Cómo instalar la plataforma de redes sociales Pleroma en Ubuntu 20.04

Pleroma es una plataforma de red social federada de código abierto, compatible con Mastodon y otras plataformas ActivityPub. Forma parte de Fediverse, una red federada de instancias que pueden comunicarse utilizando un protocolo común. Una sola cuenta en una instancia puede hablar con toda la red Fediverse.

Esta guía te mostrará cómo crear tu propia instancia de Pleroma instalándola en un servidor basado en Ubuntu 20.04.

Requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Un usuario sudo no root.
  • Asegúrate de que todo está actualizado.
    $ sudo apt update
    $ sudo apt upgrade
    
  • Pocos paquetes y dependencias que necesites antes de instalar Pleroma.
    $ sudo apt install wget curl gnupg2 ca-certificates lsb-release gnupg zip libncurses5 libmagic-dev -y
    

Paso 1 – Configurar el cortafuegos

El primer paso es configurar el cortafuegos. Ubuntu viene con ufw (Uncomplicated Firewall) por defecto.

Comprueba si el cortafuegos está funcionando.

$ sudo ufw status

Deberías obtener la siguiente salida.

Status: inactive

Permite el puerto SSH para que el cortafuegos no rompa la conexión actual al activarlo.

$ sudo ufw allow OpenSSH

Permite también los puertos HTTP y HTTPS.

$ sudo ufw allow 80
$ sudo ufw allow 443

Habilita el cortafuegos

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Comprueba de nuevo el estado del cortafuegos.

$ sudo ufw status

Deberías ver un resultado similar.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Paso 2 – Instala PostgreSQL

Añade el repositorio oficial de PostgreSQL a la lista de fuentes de Ubuntu.

$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Añade la clave GPG del repositorio.

$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Actualiza la lista de paquetes del sistema.

$ sudo apt update

Paso 3 – Instala Nginx

Ubuntu 20.04 incluye por defecto la versión estable Nginx 18.

$ sudo apt install nginx

Paso 4 – Instalar Pleroma

Esta guía instala Pleroma desde una versión OTP. El primer paso es crear un usuario Pleroma sin capacidad de inicio de sesión. También se creará el directorio home para él en /opt/pleroma.

$ sudo adduser --system --shell  /bin/false --home /opt/pleroma pleroma

Cambia al usuario Pleroma. Pero antes, tenemos que cambiar al usuario root.

$ sudo su
$ su pleroma -s $SHELL -l

Descarga Pleroma en una ubicación temporal.

$ curl "https://git.pleroma.social/api/v4/projects/2/jobs/artifacts/stable/download?job=amd64" -o /tmp/pleroma_amd64.zip

Descomprime el archivo.

$ unzip /tmp/pleroma_amd64.zip -d /tmp/

Instala Pleroma.

$ mv /tmp/release/* /opt/pleroma

Elimina los archivos temporales.

$ rm -rf /tmp/pleroma_amd64.zip /tmp/release

Cambia al usuario root.

$ exit

Crea directorios para las subidas y los archivos públicos.

$ mkdir -p /var/lib/pleroma/{uploads,static}

Crea el directorio para la configuración de Pleroma.

$ mkdir -p /etc/pleroma

Cambia la propiedad de los directorios de Pleroma al usuario Pleroma.

$ chown -R pleroma /var/lib/pleroma /etc/pleroma

Paso 5 – Configurar Pleroma

Vuelve a cambiar al usuario Pleroma.

$ su pleroma -s /bin/bash -l

Ejecuta el siguiente comando para generar el archivo de configuración de la instancia de Pleroma.

$ ./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql

Se te harán varias preguntas sobre la configuración de Pleroma. Si recibes una advertencia indicando que no se ha podido encontrar el archivo de configuración, ignórala.

pleroma@pleroma:~$ ./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql
!!! /etc/pleroma/config.exs not found! Please ensure it exists and that PLEROMA_CONFIG_PATH is unset or points to an existing file

What domain will your instance use? (e.g pleroma.soykaf.com) [] example.com

What is the name of your instance? (e.g. The Corndog Emporium) [nspeaks.com] Howtoforge Pleroma
What is your admin email address? [] [email protected]
What email address do you want to use for sending email notifications? [[email protected]] <Press Enter>
Do you want search engines to index your site? (y/n) [y] y
Do you want to store the configuration in the database (allows controlling it from admin-fe)? (y/n) [n] n
What is the hostname of your database? [localhost] localhost
What is the name of your database? [pleroma] pleroma
What is the user used to connect to your database? [pleroma] pleroma
What is the password used to connect to your database? [autogenerated] yourpassword
Would you like to use RUM indices? [n] n
What port will the app listen to (leave it if you are using the default setup with nginx)? [4000] <Press Enter>
What ip will the app listen to (leave it if you are using the default setup with nginx)? [127.0.0.1] <Press Enter>
What directory should media uploads go in (when using the local uploader)? [/var/lib/pleroma/uploads] <Press Enter>
What directory should custom public files be read from (custom emojis, frontend bundle overrides, robots.txt, etc.)? [/var/lib/pleroma/static] <Press Enter>
Do you want to strip location (GPS) data from uploaded images? This requires exiftool, it was detected as not installed, please install it if you answer yes. (y/n) [n] n
Do you want to anonymize the filenames of uploads? (y/n) [n] n
Do you want to deduplicate uploaded files? (y/n) [n] y
Writing config to /etc/pleroma/config.exs.
Writing the postgres script to /tmp/setup_db.psql.
Writing /var/lib/pleroma/static/robots.txt.

 All files successfully written! Refer to the installation instructions for your platform for next steps.

Puedes elegir un conjunto diferente de opciones en función de tus necesidades. Elige una contraseña segura para tu base de datos. Si quieres configurar tu instancia desde el Panel de Administración, selecciona y para la pregunta sobre el almacenamiento de la configuración en la base de datos.

Cambia al usuario PostgreSQL predeterminado que se creó al instalar PostgreSQL.

$ exit
$ su postgres -s /bin/bash -l

Crea la base de datos utilizando el archivo SQL proporcionado por Pleroma.

$ psql -f /tmp/setup_db.psql

Vuelve a cambiar al usuario Pleroma.

$ exit
$ su pleroma -s /bin/bash -l

Inicializa la base de datos que acabamos de crear.

$ ./bin/pleroma_ctl migrate

Sal al usuario Raíz.

$ exit

Paso 6 – Instalar SSL utilizando Let’s Encrypt

Para instalar un certificado SSL utilizando Let’s Encrypt, necesitamos descargar la herramienta Certbot.

Para instalar Certbot, utilizaremos el instalador de paquetes Snapd. El repositorio oficial de Certbot está obsoleto y el paquete Certbot de Ubuntu tiene más de un año. Snapd siempre lleva la última versión estable de Certbot y deberías utilizarla. Afortunadamente, Ubuntu 20.04 viene con Snapd preinstalado.

Asegúrate de que tu versión de Snapd está actualizada.

$ snap install core 
$ snap refresh core

Elimina cualquier versión antigua de Certbot.

$ apt remove certbot

Instala Certbot.

$ 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.

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

Detén el servicio Nginx.

$ systemctl stop nginx

Genera un certificado SSL.

$ certbot certonly --standalone --preferred-challenges http -d example.com

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

Crea un directorio raíz web de desafío para la renovación automática de Let’s Encrypt.

$ mkdir -p /var/lib/letsencrypt

Crea un Cron Job para renovar el SSL. Se ejecutará cada día para comprobar el certificado y renovarlo si es necesario. Para ello, primero, crea el archivo /etc/cron.daily/certbot-renew y ábrelo para editarlo.

$ nano /etc/cron.daily/certbot-renew

Pega el siguiente código.

#!/bin/sh
certbot renew --cert-name example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Cambia los permisos del archivo de la tarea para que sea ejecutable.

$ chmod +x /etc/cron.daily/certbot-renew

Paso 7 – Configurar Nginx

Pleroma incluye un archivo de configuración de Nginx por defecto. Instálalo moviéndolo al directorio /etc/nginx/sites-available.

$ mv /opt/pleroma/installation/pleroma.nginx /etc/nginx/sites-available/pleroma.conf

Sustituye todas las apariciones de example.tld por tu dominio.

$ sed -i 's/example\.tld/example.com/g' /etc/nginx/sites-available/pleroma.conf

Abre el archivo de configuración para editarlo.

$ nano /etc/nginx/sites-available/pleroma.conf

Descomenta el bloque location ~ /\.well-known/acme-challenge. El bloque server de tu archivo de configuración debe tener el siguiente aspecto.

server {
    server_name    example.com;

    listen         80;
    listen         [::]:80;

    location ~ /\.well-known/acme-challenge {
        root /var/lib/letsencrypt/;
    }

    location / {
        return         301 https://$server_name$request_uri;
    }
}

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

Habilita la configuración de Pleroma Nginx creando un enlace simbólico.

$ ln -s /etc/nginx/sites-available/pleroma.conf /etc/nginx/sites-enabled/pleroma.conf

Habilita el servidor Nginx para iniciarlo en el arranque.

$ systemctl enable nginx.

Inicia el servidor Nginx.

$ systemctl start nginx

Instala el archivo de unidad de servicio Pleroma systemd proporcionado en la distribución.

$ mv /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service

Activa e inicia el servicio Pleroma.

$ systemctl enable pleroma
$ systemctl start pleroma

El sitio Pleroma puede tardar unos 30 segundos en estar disponible. Ahora, puedes abrir https://example.com en tu navegador web para visitar Pleroma. Debería tener el siguiente aspecto.

Página de Pleroma

Paso 8 – Configurar Pleroma

Crear un usuario Administrador

Puedes crear un usuario administrador a través de la línea de comandos. Cambia primero al usuario Pleroma.

$ su pleroma -s /bin/bash -l

Crea un usuario administrador. Sustituye example por tu nombre de usuario, [email protected] por tu dirección de correo electrónico y password123 por una contraseña segura.

$ ./bin/pleroma_ctl user new example [email protected] --password password123 --admin

Vuelve a cambiar al usuario root cuando hayas terminado.

$ exit

Cambiar la configuración

Si seleccionaste no como respuesta para almacenar la configuración en la base de datos, significa que no puedes cambiar la configuración desde el panel de Administración de Pleroma. Para cambiar la configuración, tendrás que modificar el archivo /etc/pleroma/config.exs.

$ nano /etc/pleroma/config.exs

Una vez que hayas terminado de editar el archivo, también tendrás que reiniciar el servicio Pleroma. Es posible que tengas que esperar algún tiempo antes de que se reinicie el servicio.

$ systemctl restart pleroma

Actualizar Pleroma

Para actualizar Pleroma, el primer paso es descargar la nueva versión. Ejecuta el siguiente comando para descargar la nueva versión de Pleroma.

$ su pleroma -s $SHELL -lc "./bin/pleroma_ctl update"

Detén la instancia de Pleroma.

$ systemctl stop pleroma

El siguiente paso es migrar la base de datos.

$ su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate"

Inicia la instancia de Pleroma.

$ systemctl start pleroma

Copia de seguridad de Pleroma

Detén el servicio Pleroma.

$ systemctl stop pleroma

Cambia al directorio de Pleroma.

$ cd /opt/pleroma

Ejecuta el siguiente comando para hacer una copia de seguridad de la base de datos.

$ sudo -Hu postgres pg_dump -d <pleroma_db> --format=custom -f </path/to/backup_location/pleroma.pgdump>

Copia los archivos pleroma.pgdump, config/prod.secret.exs, config/setup_db.sql y la carpeta uploads a tu destino de copia de seguridad.

Inicia de nuevo el servicio Pleroma.

$ systemctl start pleroma

Restaurar Pleroma

Para restaurar Pleroma, tienes que reinstalar Pleroma y asegurarte de que el servicio Pleroma no está funcionando.

A continuación, copia los archivos de la copia de seguridad en su ubicación original.

Elimina la base de datos y el usuario existentes utilizando el siguiente comando.

$ sudo -Hu postgres psql -c 'DROP DATABASE <pleroma_db>;';` `sudo -Hu postgres psql -c 'DROP USER <pleroma_db>;'

Restaura el esquema de la base de datos y el rol Postgres de Pleroma con el archivo setup_db.sql copiado.

$ sudo -Hu postgres psql -f config/setup_db.psql

A continuación, restaura los datos de la instancia Pleroma.

$ sudo -Hu postgres pg_restore -d <pleroma_db> -v -1 </path/to/backup_location/pleroma.pgdump>

Migra la base de datos si queda alguna migración por realizar en caso de que vayas a pasar a una versión más reciente.

$ su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate"

Reinicia el servicio Pleroma.

$ systemctl restart pleroma

Genera las estadísticas para que Postgres pueda planificar correctamente las consultas.

$ sudo -Hu postgres vacuumdb --all --analyze-in-stages

Conclusión

Con esto concluye nuestro tutorial sobre la instalación de la Plataforma de Redes Sociales Pleroma en un servidor con Ubuntu 20.04. Si tienes alguna pregunta o comentario, publícalo en los comentarios a continuación.

También te podría gustar...