BookWyrm es una red social para llevar un registro de tus lecturas, hablar sobre libros, escribir reseñas y descubrir qué leer a continuación.

Gracias a la federación permite a las personas de BookWyrm unirse a comunidades pequeñas y de confianza que pueden conectarse entre sí y con otros servicios de ActivityPub como Mastodon y Pleroma.

Por lo que las personas que ya estén en Mastodon o Pleroma, podrán ver tus reseñas así como responderte o darle a RT o FAV.

Pasos previos

Esta vez vamos a instalar BookWyrm en Ubuntu 22.04 con Docker, ya que el entorno de BookWyrm está preparado para funcionar así.

También deberemos de tener un dominio o subdominio apuntando al servidor.

Adicionalmente, también es recomendable configurar un servidor de correo, desde la propia documentación oficial, recomiendan el uso de MailGun.

Instalación de Docker en Ubuntu 22.04

Lo primero que haremos será instalar Docker, para ello deberéis de seguir este otro tutorial:

Instalación de Docker en Ubuntu 22.04
Docker es una aplicación que simplifica el proceso de gestión de los procesos de las aplicaciones en contenedores. Los contenedores le permiten ejecutar sus aplicaciones en procesos aislados de recursos.

Tras la instalación de Docker, seguimos...

Instalación de BookWyrm

Realmente la instalación es bastante sencilla, al final es ejecutar un docker-compose para levantar todos los contenedores. Así que sigue al detalle todos estos pasos para instalar BookWyrm en tu servidor.

Clonamos el repositorio

Lo primero será clonar el proyecto entero, así que nos metemos dentro de /opt y descargamos:

cd /opt
git clone git@github.com:bookwyrm-social/bookwyrm.git

Una vez descargado, cambiamos la rama a production:

git checkout production

Configuramos entorno de BookWyrm

Después de clonar el repositorio, toca configurar a fondo BookWyrm, para ello crearemos el fichero .env y lo editaremos.

cp .env.example .env

Debemos de actualizar el fichero con nuestros datos, para ello tendremos que modificar los siguientes parámetros:

  • SECRET_KEY: Debe de ser larga y complicada de descubrir.
  • DOMAIN: Tu dominio.
  • EMAIL: Cuenta de correo con la que se validará certbot.
  • POSTGRES_PASSWORD: Configura una contraeña segura para la base de datos.
  • REDIS_ACTIVITY_PASSWORD: Configura una contraseña segura para Redis.
  • REDIS_BROKER_PASSWORD: Configura una contraseña segura para Redis Broker.
  • FLOWER_USER: Tu usuario para poder acceder a Flower.
  • FLOWER_PASSWORD: Configura una contraseña segura para Flower.
  • EMAIL_HOST_USER: Una cuenta de correo que usarás para envíar e-mails de BookWyrm.
  • EMAIL_HOST_PASSWORD: La contraseña de la cuenta de correo

Configuramos Nginx

Lo siguiente será configurar la configuración de Nginx, para ello copiamos primero el fichero de configuración:

cp nginx/production nginx/default.conf

Y actualizamos nginx/default.conf para adaptarlo a nuestro dominio:

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

upstream web {
    server web:8000;
}

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

    server_name tudominio.com;

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

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

Dentro del fichero de configuración, deberemos de modificar your-domain.com por el nombre de tu dominio. También, ten en cuenta que si por ejemplo estás usando un subdominio, deberás de eliminar el registro para www.

📢
Ten en cuenta que si eliminas el registro de www, deberás de modificar el fichero docker-compose.yml para eliminar el registro www del comando para certbot.

Inicializamos la base de datos

Tras la configuración de Nginx, procedemos a inicializar la base de datos con:

./bw-dev migrate

Creamos certificado y levantamos contenedores

Ahora lanzaremos la aplicación, para que así se configure el certificado SSL y además se descarguen las imágenes para los contenedores.

docker-compose up --build

Cuando Docker haya levantado todo y funcione correctamente, procedemos a parar el proceso con CTRL-C.

Configuramos redirección para HTTPS

Lo primero será editar docker-compose.yml para comentar el comando para generar certificado, ya que ahora únicamente deberemos de renovarlo.

Comentamos este comando:

# command: certonly --webroot --webroot-path=/var/www/certbot --email ${EMAIL} --agree-tos --no-eff-email -d ${DOMAIN}

Y descomentamos este otro:

command: renew --webroot --webroot-path /var/www/certbot

Luego en el fichero de nginx/default.conf debemos de habilitar el siguiente server configurado, por lo que deberemos de descomentar lo siguiente:

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

     server_name tudominio.com;

     client_max_body_size 3M;

     if ($host != "tudominio.com") {
         return 301 $scheme://tudominio.com$request_uri;
     }

     # SSL code
     ssl_certificate /etc/nginx/ssl/live/tudominio.com/fullchain.pem;
     ssl_certificate_key /etc/nginx/ssl/live/tudominio.com/privkey.pem;

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

     location ~ ^/(login|password-reset|resend-link) {
         limit_req zone=loginlimit;

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

     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/;
     }
}

Y guardamos!

Configuramos Cron

En Cron lo que vamos a configurar es la renovación de Let's Encrypt para el SSL, para ello ejecutaremos crontab -e y añadiremos lo siguiente:

5 0 * * * cd /opt/bookwyrm && docker-compose run --rm certbot

Iniciamos la aplicación

¡Casi lo tenemos! Ahora vamos a tener que inicializar la aplicación, para ello ejecutamos este comando:

./bw-dev setup

Al finalizar, veremos que al final nos proporcionan un código para poder generar la cuenta admin de nuestro nodo, es importante que lo guardemos:

*******************************************
Use this code to create your admin account:
c6c35779-af3a-4091-b330-c026610920d6
*******************************************

Finalmente, lanzamos los contenedores para tener nuestra aplicación escuchando por el dominio que hemos configurado:

docker-compose -up -d

Cuando acaben de levantarse todos los contenedores, podremos acceder a nuestro dominio en nuestro navegador:

Si vemos que está todo bien, entonces le damos al botón de "Continuar":

En este paso, debemos de poner el código que nos proporcionan anteriormente y luego los datos de nuestro usuario.

Y listo, ya tenemos nuestro nodo BookWyrm funcionando y esperando a que la lectura se apodere del Fediverso!