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-perlPara la instalación de PostgreSQL, podemos seguir este tutorial:

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-toolsPreparació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 pleromaY 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/pleromaAccedemos al directorio creado para instalar Pleroma:
cd /opt/pleromaInstalamos las dependencias de Pleroma, si nos pide de instalar Hex, le diremos que sí:
sudo -Hu pleroma mix deps.getGeneramos 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 genDurante 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.psqlAhora ejecutamos la migración de la base de datos:
sudo -Hu pleroma MIX_ENV=prod mix ecto.migrateEn 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 nginxY generamos el certificado:
certbot certonly --email [TUEMAIL] -d [TUDOMINIO] --standaloneEn 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
- 📖 Aprende todos sobre los comandos de GNU/Linux en nuestro Diccionario "De la A a la Z: Los comandos de GNU/Linux"
- 💪 ¡Forma parte de la Comunidad de ./voidNull!
- 🤖 Disfruta de todos nuestros Cursos sobre Ansible, Proxmox, Home Assistant entre otros.
- 📩 Mantente actualizado con lo último en GNU/Linux y Software Libre. Recibe nuestra Newsletter mensual.

Comentarios