Cómo instalar BookWyrm en un servidor Rocky Linux 9 utilizando Docker

BookWyrm es una red social federada de código abierto para lectores de libros. Actúa como una alternativa a Goodreads sin publicidad. Utiliza el protocolo ActivityPub para enviar y recibir la actividad de los usuarios entre otras instancias de BookWyrm y otros servicios que utilizan el protocolo, como Mastodon. Ofrece muchas funciones, como reseñas de libros, valoraciones, actividad lectora, estanterías de libros como «pendientes de leer», «leyendo actualmente» y «leído», listas de libros y seguimiento de otros usuarios y su progreso de lectura. También ofrece funciones de moderación de usuarios, como bloquear o aprobar manualmente seguidores, y múltiples niveles de privacidad para estados, estanterías y listas.

En este tutorial, aprenderás a instalar BookWyrm en un servidor Rocky Linux 9.

Requisitos previos

  • Un servidor que ejecute Rocky Linux 9 con un mínimo de 2 GB de RAM y 2 núcleos de CPU.
  • Un usuario no root con privilegios sudo.
  • Un Nombre de Dominio Completamente Cualificado (FQDN) como bookwyrm.example.com que apunte a tu servidor.
  • Una cuenta SMTP con un servicio de correo electrónico como Amazon SES o Mailgun.
  • Asegúrate de que todo está actualizado.
    $ sudo dnf update
    
  • Pocos paquetes que necesite tu sistema.
    $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
    

    Puede que algunos de estos paquetes ya estén instalados en tu sistema.

Paso 1 – Configurar el cortafuegos

El primer paso es configurar el cortafuegos. Rocky Linux utiliza el cortafuegos Firewalld. Comprueba el estado del cortafuegos.

$ sudo firewall-cmd --state
running

El cortafuegos funciona con diferentes zonas, y la zona pública es la que utilizaremos por defecto. Enumera todos los servicios y puertos activos en el cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Debería mostrar la siguiente salida.

cockpit dhcpv6-client ssh

Permite los puertos HTTP y HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Vuelve a comprobar el estado del cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Deberías ver un resultado similar.

cockpit dhcpv6-client http https ssh

Recarga el cortafuegos para activar los cambios.

$ sudo firewall-cmd --reload

Paso 2 – Instala Docker y Docker Compose

Este paso es necesario tanto en el servidor como en las máquinas cliente.

Instala el repositorio oficial de Docker.

$ sudo dnf install yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Instala Docker.

$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Habilita y ejecuta el demonio Docker.

$ sudo systemctl enable docker --now

Comprueba el estado del servicio Docker.

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
     Active: active (running) since Wed 2023-09-13 09:15:08 UTC; 6s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 6425 (dockerd)
      Tasks: 9
     Memory: 33.2M
        CPU: 282ms
     CGroup: /system.slice/docker.service
             ??6425 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Añade tu usuario de sistema al grupo Docker para evitar utilizar sudo para ejecutar comandos Docker.

$ sudo usermod -aG docker $(whoami)

Vuelve a conectarte a tu servidor después de cerrar la sesión para activar el cambio.

Paso 3 – Instalar Git

BookWyrm necesita Git para descargar los archivos y no está disponible por defecto en Rocky Linux. Ejecuta el siguiente comando para instalar Git.

$ sudo dnf install git

Verifica la instalación.

$ git --version
git version 2.39.3

Puedes configurar Git con tu nombre y dirección de correo electrónico para su uso posterior. Aunque este paso es opcional.

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

Paso 4 – Instalar Nginx

Rocky Linux 9 viene con una versión antigua de Nginx. Para instalar la última versión, necesitas descargar el repositorio oficial de Nginx.

Crea y abre el archivo /etc/yum.repos.d/nginx.repo para editarlo.

$ sudo nano /etc/yum.repos.d/nginx.repo

Pega en él el siguiente código.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Instala Nginx.

$ sudo dnf install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.24.0

Habilita e inicia el servicio del servidor Nginx.

$ sudo systemctl enable nginx --now

Comprueba el estado del servicio.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Wed 2023-09-13 09:16:59 UTC; 8s ago
       Docs: http://nginx.org/en/docs/
    Process: 8786 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 8787 (nginx)
      Tasks: 3 (limit: 22979)
     Memory: 2.8M
        CPU: 12ms
     CGroup: /system.slice/nginx.service
             ??8787 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??8788 "nginx: worker process"
             ??8789 "nginx: worker process"

Paso 5 – Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Para ello utilizaremos el instalador de paquetes Snapd. Como Rocky Linux no lo incluye, instala el instalador Snapd. Necesita el repositorio EPEL (Extra Packages for Enterprise Linux) para funcionar.

Instala el repositorio EPEL.

$ sudo dnf install epel-release

Instala Snapd.

$ sudo dnf install -y snapd

Activa e inicia el servicio Snap.

$ sudo systemctl enable snapd --now

Instala el paquete principal de Snap, y asegúrate de que tu versión de Snapd está actualizada.

$ sudo snap install core && sudo snap refresh core

Crea los enlaces necesarios para que Snapd funcione.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Ejecuta el siguiente comando para instalar Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Verifica la instalación.

$ certbot --version
certbot 2.6.0

Genera el certificado SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d bookwyrm.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/bookwyrm.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Comprueba el servicio programador de renovaciones de Certbot.

$ sudo systemctl list-timers

Encontrarás snap.certbot.renew.service como uno de los servicios programados para ejecutarse.

NEXT                        LEFT          LAST                        PASSED       UNIT                         ACTIVATES     ------------------------------------------------------------------------------------------------------------------             
Wed 2023-09-13 10:45:51 UTC 1h 25min left Wed 2023-09-13 09:19:00 UTC 1min 13s ago dnf-makecache.timer          dnf-makecache.service
Wed 2023-09-13 18:33:00 UTC 9h left       -                           -            snap.certbot.renew.timer     snap.certbot.renew.service
Thu 2023-09-14 00:00:00 UTC 14h left      Wed 2023-09-13 08:32:04 UTC 48min ago    logrotate.timer              logrotate.service

Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.

Paso 6 – Descarga BookWyrm

Crea un directorio para BookWyrm.

$ mkdir ~/bookwyrm

Accede al directorio.

$ cd ~/bookwyrm

Clona la rama de producción de la aplicación BookWyrm desde GitHub.

$ git clone https://github.com/bookwyrm-social/bookwyrm.git .

Cambia a la rama de producción.

$ git checkout production

Crea el archivo de entorno copiando el archivo de ejemplo.

$ cp .env.example .env

Paso 7 – Configurar el archivo de entorno de BookWyrm

Genera una clave secreta para BookWyrm.

$ openssl rand 60 | openssl base64 -A
kahYlt56TI2fZQwj0oX054u2aJE7bptHyInK4RXQadLLmXwGSDm8N1vW9uacA9N6FHoXPINPwOFTmnaT

Abre el archivo de entorno para editarlo.

$ sudo nano .env

Configura las siguientes variables.

SECRET_KEY="kahYlt56TI2fZQwj0oX054u2aJE7bptHyInK4RXQadLLmXwGSDm8N1vW9uacA9N6FHoXPINPwOFTmnaT"
DOMAIN=bookwyrm.example.com
[email protected]
POSTGRES_PASSWORD=Your_Password
POSTGRES_USER=bookwyrmuser
POSTGRES_DB=bookwyrm
POSTGRES_HOST=localhost

REDIS_ACTIVITY_HOST=localhost
REDIS_ACTIVITY_PORT=6379
REDIS_ACTIVITY_PASSWORD=Your_Redis_Password
REDIS_ACTIVITY_DB_INDEX=0

REDIS_BROKER_HOST=localhost
REDIS_BROKER_PORT=6379
REDIS_BROKER_PASSWORD=Your_Redis_Password
REDIS_BROKER_DB_INDEX=1

FLOWER_USER=username
FLOWER_PASSWORD=flowerpassword

EMAIl_HOST=
EMAIL_PORT=587
EMAIL_HOST_USER=AmazonSESUSER
EMAIL_HOST_PASSWORD=AmazonSESPASSWORD
EMAIL_USE_TLS=true
EMAIL_USE_SSL=false
EMAIL_SENDER_NAME=HowtoForge
EMAIL_SENDER_DOMAIN=example.com

## only enable it if you have a fairly powered server with a minimum of 2 CPU Cores and 2GB of RAM
ENABLE_PREVIEW_IMAGES=true 	

Repasemos todas las variables del archivo de entorno.

  • SECRET_KEY – la clave que generaste anteriormente
  • DOMAIN – el nombre de dominio completo (FQDN) de tu instancia de BookWyrn. En nuestro caso, sería bookwyrm.example.com.
  • POSTGRES_PASSWORD – Contraseña PostgreSQL configurada en el paso 2.
  • POSTGRES_HOST – configurado a db que es el nombre de servicio de PostgreSQL en el archivo docker-compose.yml.
  • POSTGRES_USER – configurado a bookwyrmuser que elegiste en el paso 2.
  • POSTGRES_DB – configurado a bookwyrm que elegiste en el paso 2.
  • REDIS_ACTIVITY_HOST y REDIS_BROKER_HOST – establécelos en localhost si alojas el servidor Redis en la misma máquina.
  • REDIS_ACTIVITY_PORT y REDIS_BROKER_PORT – establécelos en el puerto Redis 6379 por defecto.
  • REDIS_ACTIVITY_DB y REDIS_BROKER_DB – establécelos en 0 y 1 respectivamente. Utilizaremos bases de datos diferentes para ambos.
  • REDIS_ACTIVITY_PASSWORD y REDIS_BROKER_PASSWORD – configúralos con la contraseña de Redis elegida en el paso 3.
  • FLOWER_USER – elige un nombre de usuario para el servicio Flower, necesario para BookWyrm.
  • FLOWER_PASSWORD – elige una contraseña para el servicio Flower.
  • EMAIL_HOST – establece el host SMTP del servicio de correo electrónico que estés utilizando.
  • EMAIL_PORT – Establece el puerto SMTP del servicio de correo electrónico.
  • EMAIL_HOST_USER – Establece el nombre de usuario SMTP.
  • EMAIL_HOST_PASSWORD – Establece la contraseña SMTP.
  • EMAIL_USE_TLS – ponlo a true si tu servicio de correo electrónico utiliza TLS.
  • EMAIL_USE_SSL – Establécelo como verdadero si tu servicio de correo electrónico utiliza SSL.
  • EMAIL_SENDER_NAME – elige el nombre del remitente para los correos electrónicos enviados por tu instancia.
  • EMAIL_SENDER_DOMAIN – Establécelo como el nombre de dominio utilizado por el servicio de correo electrónico.
  • ENABLE_PREVIEW_IMAGES – ponlo a true si quieres que tu instancia genere imágenes de previsualización automáticamente. Sin embargo, asegúrate de que tu servidor dispone de suficiente CPU y RAM para ello, ya que se trata de un proceso intensivo.

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Paso 8 – Configurar el archivo Docker de BookWyrm

Abre el archivo Docker compose para editarlo.

$ nano docker-compose.yml

Como puedes ver, el archivo Docker consta de los servicios Nginx y Certbot. Pero para nuestro tutorial, utilizaremos Nginx externamente como servidor proxy inverso. Así que no utilizaremos el servicio Certbot en el archivo. Además, tenemos que cambiar el servicio Nginx en consecuencia.

En los servicios >> nginx >> puertos comenta los puertos por defecto y añade la línea ` – «8001:8001» como se muestra a continuación. Además, comenta los volúmenes certbot bajo el servicio Nginx. El servicio Nginx debería tener el siguiente aspecto. Y por último, comenta toda la sección del servicio certbot.

services:
  nginx:
    image: nginx:latest
    logging: *default-logging
    restart: unless-stopped
    ports:
    #  - "80:80"
    #  - "443:443"
      - "8001:8001"
    depends_on:
      - web
    networks:
      - main
    volumes:
      - ./nginx:/etc/nginx/conf.d
    #  - ./certbot/conf:/etc/nginx/ssl
    #  - ./certbot/data:/var/www/certbot
      - static_volume:/app/static
      - media_volume:/app/images
  #certbot:
  #  image: certbot/certbot:latest
  #  command: certonly --webroot --webroot-path=/var/www/certbot --email ${EMAIL} --agree-tos --no-eff-email -d ${DOMAIN} -d www.${DOMAIN}
    #command: renew --webroot --webroot-path /var/www/certbot
  #  logging: *default-logging
  #  volumes:
  #    - ./certbot/conf:/etc/letsencrypt
  #    - ./certbot/logs:/var/log/letsencrypt
  #    - ./certbot/data:/var/www/certbot

No es necesario realizar más cambios. Una vez terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Paso 8 – Configurar Nginx y los archivos Nginx

Haz una copia del archivo de plantilla de producción de Nginx y configúralo para utilizarlo con el servicio docker Nginx.

$ cp nginx/production nginx/default.conf

Abre el archivo default.conf para editarlo.

$ nano nginx/default.conf

Sustituye el your-domain.com por tu nombre de dominio BookWyrm real en el primer y tercer bloque del servidor. En nuestro caso es bookwyrm.example.com. Si no utilizas la versión www-your-domain.com de tu dominio, elimínala de server_name. Además, comenta el bloque location ~ /.well-known/acme-challenge bajo el primer bloque de servidor.

Este es el aspecto que debería tener tu default.conf.

include /etc/nginx/conf.d/server_config;

upstream web {
    server web:8000;
}

server {
    listen [::]:80;
    listen 80;

    server_name bookwyrm.example.com;

#    location ~ /.well-known/acme-challenge {
#        allow all;
#        root /var/www/certbot;
#    }

#     # redirect http to https
#     return 301 https://your-domain.com$request_uri;
}

# server {
....
}

# Reverse-Proxy server
 server {
     listen [::]:8001;
     listen 8001;

     server_name bookwyrm.example.com;

     location / {
         proxy_pass http://web;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header Host $host;
         proxy_redirect off;
     }

     location /images/ {
         alias /app/images/;
     }

     location /static/ {
         alias /app/static/;
     }
 }

Una vez terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Crea y abre el archivo /etc/nginx/conf.d/bookwyrm.conf para editarlo.

$ sudo nano /etc/nginx/conf.d/bookwyrm.conf

Pega en él el siguiente código.

server {
    server_name bookwyrm.example.com;

    listen [::]:80;
    listen 80;

    # redirect http to https
    return 301 https://bookwyrm.example.com$request_uri;
}

server {
    access_log /var/log/nginx/bookwyrm.access.log;
    error_log  /var/log/nginx/bookwyrm.error.log;

    listen [::]:443 ssl http2;
    listen 443 ssl http2;

    server_name bookwyrm.example.com;

    # SSL code
    ssl_certificate /etc/letsencrypt/live/bookwyrm.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/bookwyrm.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/bookwyrm.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_prefer_server_ciphers off;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
    resolver_timeout 2s;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    
    location / {
        proxy_pass http://localhost:8001;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
    }

    location /images/ {
        proxy_pass http://localhost:8001;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
    }

    location /static/ {
        proxy_pass http://localhost:8001;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
    }
}

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Comprueba la sintaxis del archivo de configuración de Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reinicia el servicio Nginx para habilitar la nueva configuración.

$ sudo systemctl restart nginx

Paso 9 – Instalar BookWyrm

Cambia al directorio Bookwyrm.

$ cd ~/bookwyrm

Inicializa la base de datos. El comando tardará unos minutos en completarse.

$ ./bw-dev migrate

Una vez completado, verás una salida similar.

..............................
  Applying django_celery_beat.0005_add_solarschedule_events_choices... OK
  Applying django_celery_beat.0006_auto_20180322_0932... OK
  Applying django_celery_beat.0007_auto_20180521_0826... OK
  Applying django_celery_beat.0008_auto_20180914_1922... OK
  Applying django_celery_beat.0006_auto_20180210_1226... OK
  Applying django_celery_beat.0006_periodictask_priority... OK
  Applying django_celery_beat.0009_periodictask_headers... OK
  Applying django_celery_beat.0010_auto_20190429_0326... OK
  Applying django_celery_beat.0011_auto_20190508_0153... OK
  Applying django_celery_beat.0012_periodictask_expire_seconds... OK
  Applying django_celery_beat.0013_auto_20200609_0727... OK
  Applying django_celery_beat.0014_remove_clockedschedule_enabled... OK
  Applying django_celery_beat.0015_edit_solarschedule_events_choices... OK
  Applying django_celery_beat.0016_alter_crontabschedule_timezone... OK
  Applying sessions.0001_initial... OK

Ejecuta la aplicación compilando la imagen Docker para BookWyrm, Celery y Flower.

$ docker compose up --build

Este proceso tardará al menos 10-15 minutos en finalizar, dependiendo de los recursos de tu servidor. Espera a que termine de compilar todas las imágenes. El resultado final debería ser algo parecido a lo siguiente.

Una vez finalizado el proceso, detén el proceso pulsando Ctrl + C.

Deberías ver algo similar cuando finalice el proceso.

bookwyrm-nginx-1           | 2023/09/13 10:20:33 [notice] 30#30: http file cache: /var/cache/nginx/bookwyrm_cache 0.000M, bsize: 4096
bookwyrm-nginx-1           | 2023/09/13 10:20:33 [notice] 1#1: signal 17 (SIGCHLD) received from 30
bookwyrm-nginx-1           | 2023/09/13 10:20:33 [notice] 1#1: cache loader process 30 exited with code 0
bookwyrm-nginx-1           | 2023/09/13 10:20:33 [notice] 1#1: signal 29 (SIGIO) received
bookwyrm-redis_broker-1    | 1:M 13 Sep 2023 10:24:32.018 * 100 changes in 300 seconds. Saving...
bookwyrm-redis_broker-1    | 1:M 13 Sep 2023 10:24:32.018 * Background saving started by pid 21
bookwyrm-redis_broker-1    | 21:C 13 Sep 2023 10:24:32.022 * DB saved on disk
bookwyrm-redis_broker-1    | 21:C 13 Sep 2023 10:24:32.023 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB
bookwyrm-redis_broker-1    | 1:M 13 Sep 2023 10:24:32.119 * Background saving terminated with success
^CGracefully stopping... (press Ctrl+C again to force)
Aborting on container exit...
canceled

Inicializa la aplicación.

$ ./bw-dev setup

Este proceso terminará con tu código de administrador.

*******************************************
Use this code to create your admin account:
299f3181-e57e-4f16-94c9-51cfc427b8df
*******************************************

Puedes obtener el código en cualquier momento ejecutando el siguiente comando.

$ ./bw-dev admin_code
*******************************************
Use this code to create your admin account:
299f3181-e57e-4f16-94c9-51cfc427b8df
*******************************************

El último paso en la instalación de BookWyrm es iniciar todos los contenedores restantes.

$ docker compose up -d

Puedes comprobar el estado de tus contenedores utilizando el siguiente comando.

$ docker ps

Deberías obtener una salida similar.

Salida BookWyrm Docker PS

CONTAINER ID   IMAGE                    COMMAND                  CREATED        STATUS        PORTS                                               NAMES
083c2dfc81f4   nginx:latest             "/docker-entrypoint.…"   26 hours ago   Up 26 hours   80/tcp, 0.0.0.0:8001->8001/tcp, :::8001->8001/tcp   bookwyrm-nginx-1
8618c3a7b460   bookwyrm-web             "gunicorn bookwyrm.w…"   26 hours ago   Up 26 hours   0.0.0.0:32768->8000/tcp, :::32768->8000/tcp         bookwyrm-web-1
3e67c639e21f   bookwyrm-celery_beat     "celery -A celerywyr…"   26 hours ago   Up 26 hours                                                       bookwyrm-celery_beat-1
86a774a5bb6d   bookwyrm-flower          "celery -A celerywyr…"   26 hours ago   Up 26 hours                                                       bookwyrm-flower-1
ac2ff1e91bb4   bookwyrm-celery_worker   "celery -A celerywyr…"   26 hours ago   Up 26 hours                                                       bookwyrm-celery_worker-1
bc6a64fac55c   redis                    "docker-entrypoint.s…"   26 hours ago   Up 26 hours   6379/tcp                                            bookwyrm-redis_activity-1
ef78760b967b   bookwyrm-db              "/bookwyrm-entrypoin…"   26 hours ago   Up 26 hours   5432/tcp                                            bookwyrm-db-1
5ededaed00ab   redis                    "docker-entrypoint.s…"   26 hours ago   Up 26 hours   6379/tcp                                            bookwyrm-redis_broker-1

También puedes comprobar el estado utilizando el siguiente comando.

$ docker compose ps

Aunque esta vez la salida será un poco diferente.

El siguiente paso es acceder a BookWyrm y configurar tu instancia.

Paso 10 – Acceder a BookWyrm

Abre la URL https://bookwyrm.example.com en tu navegador y obtendrás la siguiente página.

Pantalla de configuración de BookWyrm

Si todo parece correcto, haz clic en el botón Continuar para pasar a la página siguiente.

Crear cuenta de administrador de BookWyrm

Introduce la clave de administrador que obtuviste en el paso anterior junto con las credenciales de la cuenta de administrador. Pulsa el botón Registrarse cuando hayas terminado para pasar a la página siguiente.

Configuración del sitio BookWyrm

Aquí se te pedirá que configures tu sitio y añadas información y políticas del sitio.

A continuación, comprueba tu configuración de correo electrónico haciendo clic en Sistema >> Configuración de correo electrónico en la barra lateral izquierda. Confirma tu configuración de correo electrónico que aparece en la página y haz clic en el botón Enviar correo de prueba para enviarte un correo de prueba.

Página de configuración del correo electrónico de BookWyrm

Si el correo se envió correctamente, deberías recibir el siguiente correo.

Correo electrónico de prueba de BookWyrm

También puedes configurar los ajustes restantes accediendo a ellos desde la barra lateral izquierda. Una vez hayas hecho todo esto, tu instancia de BookWyrm estará lista para ser utilizada.

Paso 11 – Copia de seguridad de BookWyrm

BookWyrm incluye una utilidad de copia de seguridad para su instalación Docker. También incluye una utilidad de poda automática de copias de seguridad que limpia automáticamente la carpeta de copias de seguridad.

Las copias de seguridad se crean dentro del directorio backups del contenedor de la base de datos. Las copias de seguridad se crean diariamente a medianoche UTC. Ejecuta el siguiente comando para entrar en el shell SSH del contenedor.

$ docker exec -it bookwyrm-db-1 bash

Una vez dentro del contenedor, comprueba el contenido del directorio de copias de seguridad. Este comando sólo mostrará las copias de seguridad cuando hayan transcurrido 24 horas desde la creación del contenedor.

$ ls backups -al
total 252
drwxr-xr-x. 2 root root     56 Sep 12 00:00 .
drwxr-xr-x. 1 root root     39 Sep 11 11:47 ..
-rw-r--r--. 1 root root 250380 Sep 12 00:00 backup_bookwyrm_2023-09-12.sql
-rw-r--r--. 1 root root     44 Sep 11 11:47 .env

Sal del shell.

$ exit

Puedes copiar las copias de seguridad a tu máquina local ejecutando el siguiente comando.

$ docker cp bookwyrm-db-1:/backups <host machine path>

La función de poda automática de la base de datos está desactivada por defecto. Para activarla, abre el archivo ~/bookwyrm/postgres-docker/cronfile para editarlo.

$ nano ~/bookwyrm/postgres-docker/cronfile

Descomenta la última línea eliminando la almohadilla (#) que aparece delante de ella. Tu cronfile debería tener el siguiente aspecto.

0 0 * * * /usr/local/bin/bookwyrm-backup.sh
# If uncommented, this script will weed the backups directory. It will keep the 14
# most-recent backups, then one backup/week for the next four backups, then one
# backup/month after that.
0 5 * * * /usr/local/bin/bookwyrm-weed.sh -d 14 -w 4 -m -1 /backups

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

El script anterior guardará las últimas 14 copias de seguridad.

Reconstruye tu instancia.

$ cd ~/bookwyrm
$ docker compose up --build

Paso 12 – Actualizar BookWyrm

Actualizar tu instancia de BookWyrm implica varios pasos. En primer lugar, extrae los últimos cambios del repositorio GitHub de BookWyrm.

$ cd ~/bookwyrm
$ git pull

Si hay conflictos, primero tendrás que ejecutar git pull por separado.

Reconstruye las imágenes.

$ docker compose rebuild

Ejecuta las migraciones de bases de datos utilizando las imágenes Docker recién construidas.

$ docker compose run --rm web python manage.py migrate 

Compila los temas de BookWyrm.

$ docker compose run --rm web python manage.py compile_themes

Carga los archivos estáticos actualizados.

$ docker compose run --rm web python manage.py collectstatic --no-input

Apaga los contenedores existentes.

$ docker compose down --remove-orphans

Reinicia los contenedores utilizando las imágenes recién creadas.

$ docker compose up -d

Los flujos de cada usuario se almacenan en la base de datos Redis. Para repoblar un flujo, ejecuta el siguiente comando.

$ ./bw-dev populate_streams

O puedes utilizar el siguiente comando para repoblar los flujos.

$ docker compose run --rm web python manage.py populate_streams

Si no funciona o las cosas se estropean, puedes borrar los datos del flujo utilizando el siguiente comando.

$ docker compose run --rm web python manage.py erase_streams

Paso 13 – Herramienta de línea de comandos BookWyrm

Hasta ahora nos has visto utilizar la herramienta de línea de comandos bw-dev para BookWyrm. Esta herramienta puede realizar un montón de tareas útiles e incluso ejecutar comandos Docker. Algunos de los usos populares de la herramienta son los siguientes.

Confirmar manualmente la cuenta de un usuario

El siguiente comando confirma manualmente el correo electrónico de un usuario (nombre de usuario) y lo marca como activo.

$ ./bw-dev confirm_email <username> 

Generar imágenes de previsualización

Si habilitas la opción de imágenes de previsualización más adelante, tendrás que actualizarlas para los datos cargados anteriormente. Ejecuta el siguiente comando para hacer lo mismo.

$ ./bw-dev generate_preview_images --all

Generar miniaturas para portadas de libros

El siguiente comando genera miniaturas para las portadas de los libros.

$ ./bw-dev generate_thumbnails

Estas son algunas de las opciones. Para obtener una lista completa, consulta el manual BookWyrm CLI.

Conclusión

Con esto concluye nuestro tutorial sobre la instalación de la red social BookWyrm en un servidor Rocky Linux 9. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...