No estás usando esta distribución?

Selecciona una versión o distribución diferente

Pleroma es una plataforma ligera y flexible para crear redes sociales descentralizadas, ideal para quienes desean unirse al fediverso, la red de plataformas sociales interconectadas.

Al ser compatible con el protocolo ActivityPub, Pleroma permite la interacción con otros nodos y plataformas como Mastodon, PeerTube y Pixelfed, proporcionando un ecosistema social abierto y federado. Este artículo te guiará en el proceso de instalación de un nodo de Pleroma, desde los requisitos previos hasta la configuración de los servicios necesarios para un despliegue seguro y funcional.

Si estás buscando una forma eficiente y personalizable de contribuir al fediverso con tu propia instancia, esta guía te dará los pasos esenciales para lograrlo en poco tiempo.

Requisitos para Pleroma

Estos son los paquetes necesarios para Pleroma:

  • PostgreSQL 11+ (Es necesario instalar también postgresql-contrib-x.x)
  • Elixir 1.14.0 <1.17
  • erlang-dev
  • erlang-tools
  • erlang-parsetool
  • serlang-xmerl
  • git
  • build-essential
  • nginx o Apache
  • 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:

sudo apt install git build-essential cmake libmagic-dev certbot python3-certbot-nginx imagemagick ffmpeg libimage-exiftool-perl

Para la instalación de PostgreSQL, podemos seguir este tutorial:

Instalar PostgreSQL en Ubuntu 24.04
PostgreSQL es un sistema de gestión de bases de datos relacionales de código abierto y de nivel avanzado. En el siguiente artículo os explicaremos como instalar PostgreSQL en Ubuntu 24.04.

Instalación de Elixir y Erlang

Como hemos mencionado en el apartado de Requisitos para Pleroma así que vamos a instalar el siguiente paquete:

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:

useradd -r -s /bin/false -m -d /var/lib/pleroma -U pleroma

Y añadimos el usuario pleroma al grupo sudo:

usermod -aG sudo pleroma

Creamos este directorio necesario para la instalación:

mkdir -p /opt/pleroma
chown -R pleroma:pleroma /opt/pleroma

Instalación de Pleroma

Nos descargamos el repositorio desde Gitlab:

sudo -Hu pleroma git clone -b stable https://git.pleroma.social/pleroma/pleroma /opt/pleroma

Accedemos al directorio creado para instalar Pleroma:

cd /opt/pleroma

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

sudo -Hu pleroma mix deps.get

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

sudo -Hu pleroma MIX_ENV=prod mix pleroma.instance gen

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
What domain will your instance use? (e.g pleroma.soykaf.com) []  dominio.com
What is the name of your instance? (e.g. The Corndog Emporium) [pleroma.tutos.site]  Pleroma Tutos
What is your admin email address? []  tunombre@dominio.com
What email address do you want to use for sending email notifications? [tunombre@dominio.com]  
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]  
What is the hostname of your database? [localhost]  
What is the name of your database? [pleroma]  
What is the user used to connect to your database? [pleroma]  
What is the password used to connect to your database? [autogenerated]  
Would you like to use RUM indices? [n]  
What port will the app listen to (leave it if you are using the default setup with nginx)? [4000]  
What ip will the app listen to (leave it if you are using the default setup with nginx)? [127.0.0.1]  
What directory should media uploads go in (when using the local uploader)? [uploads]  
What directory should custom public files be read from (custom emojis, frontend bundle overrides, robots.txt, etc.)? [instance/static/]  
Do you want to strip location (GPS) data from uploaded images? This requires exiftool, it was detected as installed. (y/n) [y]  
Do you want to read data from uploaded files so clients can use it to prefill fields like image description? This requires exiftool, it was detected as installed. (y/n) [y]  
Do you want to anonymize the filenames of uploads? (y/n) [n]  
Do you want to deduplicate uploaded files? (y/n) [n]  
Writing config to config/generated_config.exs.
Writing the postgres script to config/setup_db.psql.
Writing /opt/pleroma/instance/static/robots.txt.

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:

sudo -Hu pleroma mv config/{generated_config.exs,prod.secret.exs}

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

sudo -Hu postgres psql -f config/setup_db.psql
📢
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:

sudo -Hu pleroma 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 /opt/pleroma/installation/pleroma.nginx /etc/nginx/sites-enabled/pleroma.nginx

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

Tenemos que modificar el parámetro server_name por nuestro dominio (tanto para el server que escucha por el puerto 80 y para el 443). Luego en la configuración del SSL cambiaremos example.tld, por nuestro dominio.

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

Tras hacer todos los cambios, paramos Nginx para poder generar el certificado:

systemctl stop nginx

Y generamos el certificado:

certbot certonly --email [TUEMAIL] -d [TUDOMINIO] --standalone

En este punto, iniciamos Nginx de nuevo.

systemctl start 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 /opt/pleroma/installation/pleroma.service /lib/systemd/system/pleroma.service

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 una 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:

mix deactivate_user username@instancename

Más sobre ./voidNull

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación