Instalación de una instancia de Pleroma en Debian 9

Después de hacer un artículo sobre cómo instalar un nodo de GNU Social, tocaba probar otras cosas diferentes, así que me decidí por probar de instalar Pleroma. Para quien no sepa que carajos es, Pleroma es una red social federada compatible con GNU Social, Mastodon y otras implementaciones de ActivityPub y OStatus. Es Software Libre y está bajo la licencia AGPLv3. Actualmente Pleroma consiste en dos componentes: un backend, llamado Pleroma y un fronted para usuarios llamado Pleroma-FE.

Igual con esto me equivoco, pero hasta donde he podido ver, por lo visto se puede utilizar otros frontends para Pleroma. Parece que se puede utilizar la interfaz actual de Mastodon para ser usado bajo Pleroma -o quizás es al revés?-. También hay posibilidad de usar la interfaz de Pleroma en GNU Social -o no…- (si alguien es tan amable de dejarlo en comentarios… xD)

Bueno, vamos al lío, que es lo que mola. Para realizar este tutorial me he basado en la Wiki del GitLab de Pleroma que la verdad es que está súper bien explicado y además te lo dan todo masticado para simplemente ejecutar y disfrutar. Además lo he montado todo en un Debian GNU/Linux 9.5 «Stretch» con 2 vCores, 4GB de RAM, y 30GB SSD en los maravillosos servidores de Clouding.io. Seguramente este mismo tutorial sirva para versiones actuales de Ubuntu y otras distros basadas en la Madre Debian.

Requisitos para Pleroma

Estos son los paquetes necesarios para Pleroma:

PostgreSQL 9.6+ (Es necesario instalar también postgresql-contrib-x.x )



(Es necesario instalar también ) Elixir 1.5 or newer (No desde los repositorios de Debian, lo veremos más adelante)



1.5 or newer (No desde los repositorios de Debian, lo veremos más adelante) erlang-dev



erlang-tools



erlang-parsetools



erlang-xmerl



git



build-essential



nginx o Apache



o certbot (Usaremos Let’s Encrypt para generar el certificado)

Preparamos el sistema

Esto es Debian y como siempre que hacemos un tutorial:

apt update && apt upgrade -y

Instalamos herramientas necesarias para continuar:

apt install git build-essential

Y luego instalamos PostgreSQL:

apt install postgresql-9.6 postgresql-contrib-9.6

Y también instalamos certbot para luego crear el certificado:

apt-get install python-certbot-nginx -t stretch-backports

Instalación de Elixir y Erlang

Como hemos mencionado en el apartado de Requisitos para Pleroma, Elixir lo vamos a instalar desde otro repositorio que no sea el que trae por defecto Debian 9, así que vamos a instalar el siguiente paquete:

wget -P /tmp/ https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb dpkg -i /tmp/erlang-solutions_1.0_all.deb

Actualizamos repositorios:

apt update

Y luego instalamos Elixir y Erlang:

apt install elixir erlang-dev erlang-parsetools erlang-xmerl erlang-tools

Preparación de la instalación de Pleroma

Lo primero que haremos será ejecutar Pleroma con un usuario propio, de esta manera tendremos la instancia instalada dentro del home del usuario. Yo no soy muy fan de hacer este tipo de instalaciones, pero miraré de hacer una excepción en este caso. Creamos un usuario:

adduser pleroma

Y añadimos el usuario pleroma al grupo sudo :

usermod -aG sudo pleroma

Ahora iniciaremos con el usuario Pleroma y continuaremos con la instalación:

su pleroma cd #Hacemos esto para ponernos en nuestro home

Instalación de Pleroma

Siendo el usuario pleroma , nos descargamos el repositorio desde Gitlab:

git clone https://git.pleroma.social/pleroma/pleroma

Accedemos al directorio descargado:

cd pleroma

Instalamos las dependencias de Pleroma, si nos pide de instalar Hex , le diremos que sí:

mix deps.get

Generamos el fichero de configuración, si nos pide instalar rebar3 , le diremos también que sí:

mix generate_config

Durante la instalación, te pedirá información, así como el nombre de dominio, nombre de la instancia y cuenta de correo del administrador, os dejo la salida del comando a continuación:

Generated pleroma app Answer a few questions to generate a new config --- THIS WILL OVERWRITE YOUR config/generated_config.exs! --- What is your domain name? (e.g. pleroma.soykaf.com): midominio.es What is the name of your instance? (e.g. Pleroma/Soykaf): Super Nodo de Pleroma What's your admin email address: miemail@midominio.es Writing config to config/generated_config.exs.

Este fichero de configuración lo podremos encontrar en config/generated_config.exs , donde podremos configurar diferentes cosas interesantes así como el estado de los registros de nuevas cuentas, proxy o la base de datos.

Movemos el fichero de configuración:

mv config/{generated_config.exs,prod.secret.exs}

Ahora creamos la base de datos que utilziará los datos que hay en el fichero de configuración config/prod.secret.exs :

sudo su postgres -c 'psql -f config/setup_db.psql'

Nota para Sysadmins: En el fichero de configuración de Pleroma podemos cambiar el nombre de la base de datos y el usuario, en este tutorial usaremos la base de datos y usuario que viene por defecto.

Ahora ejecutamos la migración de la base de datos:

MIX_ENV=prod mix ecto.migrate

En este momento podríamos levantar ya Pleroma, pero antes configuraremos un servidor web para acceder con SSL.

Configuración Nginx

Se puede utilizar Apache, pero ya que en GNU Social usé Apache, esta vez utilizaremos Nginx, pero ya os aviso que no debe cambiar mucho, así que si sois más de Apache no hay problema, eso si, seguramente algunas cosas se harán diferente, pero seguro que sabes hacerlo 😛

Volvemos a ser usuario root y procedemos a instalar Nginx:

apt install nginx

Copiamos el fichero de configuración para Pleroma:

cp /home/pleroma/pleroma/installation/pleroma.nginx /etc/nginx/sites-enabled/pleroma.nginx

Ahora editamos el fichero /etc/nginx/sites-enabled/pleroma.nginx y cambiaremos algunas cosas:

Dentro del primer server configurado, editaremos el parámetro server_name y pondremos nuestro dominio.



configurado, editaremos el parámetro y pondremos nuestro dominio. Comentamos la línea del parámetro return .

# return 301 https://$server_name$request_uri;

En el mismo server , descomentaremos las tres líneas para crear el certificado con Certbot y también pondremos la ruta completa al parámetro root :

location ~ /\.well-known/acme-challenge { root /home/pleroma/pleroma/priv/static/; }

Del segundo server -configurado con el puerto 433- comentaremos las tres líneas del SSL:

#ssl_trusted_certificate /etc/letsencrypt/live/example.tld/fullchain.pem; #ssl_certificate /etc/letsencrypt/live/example.tld/fullchain.pem; #ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem;

Y para comprobar que todo está correcto:

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

Reiniciamos Nginx:

systemctl restart nginx

Generamos el certificado SSL con CertBot:

certbot --authenticator webroot --installer nginx

Cuando nos pida el webroot para nuestro dominio, tendremos que indicar que es /home/pleroma/pleroma/priv/static/ .

Ahora tenemos que volver a editar el fichero /etc/nginx/sites-enabled/pleroma.nginx donde haremos los siguientes cambios:

En el primer server tendremos que añadir el parámetro listen para el puerto 80 y descomentaremos la línea del parámetro return .

listen 80; server_name dominio.es; return 301 https://$server_name$request_uri;

Luego si nos fijamos, veremos que dentro del primer server se han añadido varias líneas por parte del Certbot. Tendremos que eliminar la de listen y la de include y el resto las moveremos al segundo server .

server { listen 443 ssl http2; ssl_session_timeout 5m; ssl_certificate /etc/letsencrypt/live/dominio.es/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/dominio.es/privkey.pem; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot ...

Por último, iremos hasta el final del fichero y eliminaremos las siguientes líneas añadidas por Certbot:

server { if ($host = dominio.es) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; server_name dominio.es; return 404; # managed by Certbot }

Reiniciamos Nginx:

systemctl restart nginx

En este punto, podríamos iniciar Pleroma y podríamos acceder desde nuestro navegador. Pero antes de iniciarlo, haremos un servicio para poder reiniciarlo de manera más cómoda.

Configurar arranque automático de Pleroma

Copiamos el fichero de ejemplo para SystemD:

cp /home/pleroma/pleroma/installation/pleroma.service /lib/systemd/system/pleroma.service

Lo editamos y dentro [Service] añadimos lo siguiente:

Environment="MIX_ENV=prod"

Iniciamos Pleroma al arranque:

systemctl enable --now pleroma.service

Y ahora si accedemos con nuestro dominio desde un navegador, nos debería de cargar Pleroma! 😀

Tareas de administradores

Ahora ya tenemos uns instancia de Pleroma funcionando en nuestro servidor. Lo siguiente es saber que se pueden crear usuarios, añadir moderadores y gestionar usuarios de la siguiente forma.

Para reiniciar la contraseña de un usuario:

mix generate_password_reset username

Para hacer moderador a un usuario -y así poder borrar estados de otros usuarios-:

mix set_moderator username [true|false]

Registrar un usuario:

mix register_user name username email bio password

Eliminar un usuario:

mix rm_user username

Desactivar una cuenta: