INTRODUCCIÓN
Mastodon es una red social libre y descentralizada, es decir puedes crear tu propio servidor de Mastodon y conectarte con las instancias(servidores) de otro usuarios e interaccionar con ellos. Es muy similar a Twitter pero de código abierto.
Requisitos para una instancia de mastodon:
SO:
Ubuntu 20.04
Ubuntu 24.04
Debian 12
Dominio o subdominio: Necesitas un dominio o subdominio propio para identificar a tu servidor Mastodon. Así, los usuarios podrán encontrar tu instancia y conectarse con ella.
Paso 1: preparar el servidor
Actualizar el gestor de paquetes:
sudo apt update
Paso 2: instalar paquetes necesarios
Mastodon requiere múltiples paquetes y dependencias para funcionar correctamente, por ejemplo: Node.js, Yarn, PostgreSQL, Redis y Nginx
apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates
Node.js
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg –dearmor -o /etc/apt/keyrings/nodesource.gpg
echo «deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main» | tee /etc/apt/sources.list.d/nodesource.list
PostgreSQL
wget -O /usr/share/keyrings/postgresql.asc https://www.postgresql.org/media/keys/ACCC4CF8.asc
echo «deb [signed-by=/usr/share/keyrings/postgresql.asc] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main» > /etc/apt/sources.list.d/postgresql.list
Paquetes de sistema
apt update
apt install -y imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core g++ libprotobuf-dev protobuf-compiler pkg-config gcc autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev nginx nodejs redis-server redis-tools postgresql postgresql-contrib certbot python3-certbot-nginx libidn11-dev libicu-dev libjemalloc-dev
Yarn
corepack enable
yarn set version classic
Ruby
sudo adduser mastodon
Añadir mastodon a sudo
sudo visudo
mastodon ALL=(ALL:ALL) ALL
reboot
su – mastodon
Instala rbenv y rbenv-build:
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo ‘export PATH=»$HOME/.rbenv/bin:$PATH»‘ >> ~/.bashrc
echo ‘eval «$(rbenv init -)»‘ >> ~/.bashrc
exec bash
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
Una vez terminado, instala la versión correcta de Ruby y Bundler:
RUBY_CONFIGURE_OPTS=–with-jemalloc rbenv install 3.2.3
rbenv global 3.2.3
gem install bundler –no-document
Vuelve con exit al usuario root.
Paso 3: configurar PostgreSQL
sudo -u postgres psql
CREATE USER mastodon CREATEDB;
\q
Paso 4: instalar Mastodon
su - mastodon
git clone https://github.com/mastodon/mastodon.git live && cd live
git checkout $(git tag -l | grep '^v[0-9.]*$' | sort -V | tail -n 1)
bundle config deployment 'true'
bundle config without 'development test'
bundle install -j$(getconf _NPROCESSORS_ONLN)
yarn install --pure-lockfile
Ejecuta el asistente de configuración de Mastodon:
RAILS_ENV=production bundle exec rake mastodon:setup
Domain name: indicar nombre de dominio del servidor VPS
Do you want to enable single user mode?: N
Are you using Docker to run Mastodon?: N
PostgreSQL host: default - Enter
PostgreSQL port: default - Enter
Name of PostgreSQL database: default - Enter
Name of PostgreSQL user: default - Enter
Password of PostgreSQL user: dejar vacío - Enter
Redis host: default - Enter
Redis port: default - Enter
Redis password: default – Enter
Do you want to store uploaded files on the cloud?: N
Do you want to send e-mails from localhost?: N
SMTP server: indicar servidor SMTP
SMTP port: indicar puerto del servidor SMTP
SMTP username: nombre de usuario para el inicio de sesión
SMTP authentication: plain
SMTP OpenSSL verify mode: none
E-mail address to send e-mails “from”: normalmente como el login de SMTP
Send a test e-mail with this configuration right now?: Y
Send test e-mail to: indicar dirección para recibir correos
Save configuration?: Y
Prepare the database now?: Y
Compile the assets now?: Y
Do you want to create an admin user straight away?: Y
Username: admin
E-Mail: correo propio
Vuelve a cambiar al usuario root:
exit
Paso 5: instalar el certificado SSL
Para este paso es necesario tener ya creado un subdominio o tener un dominio además de abrir los puerto 80 y 443
certbot certonly --nginx -d example.com
El certificado se guardará en la carpeta /etc/letsencrypt/live/example.com/ de tu Mastodon Server.
Paso 6: configurar Nginx
Copia la plantilla de configuración de Nginx del directorio de Mastodon y pégala en el directorio sites-available
de Nginx:
cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
Crea un enlace simbólico del archivo de configuración en sites-enabled para activarlo y elimina la configuración estándar:
ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon
rm /etc/nginx/sites-enabled/default
Abre el archivo de configuración de tu servidor Mastodon:
nano /etc/nginx/sites-available/mastodon
Introduce tu nombre de dominio en example.com.
Descomenta las líneas ssl_certificate y ssl_certificate_key y sustituye las rutas con las de tu certificado SSL. Si usas el certificado de autofirma estándar, no se modifican las rutas:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
Una vez hechos los cambios en la configuración, reinicia Nginx para aplicarlos:
sudo systemctl reload nginx
Paso 7: permisos
Agregar www-data
al grupo mastodon
:
sudo usermod -aG mastodon www-data
Asignar el grupo correctamente y dar permisos:
sudo chgrp -R mastodon /home/mastodon/live
sudo chmod -R g+rx /home/mastodon/live/public
Permitir acceso a directorios padres:
chmod g+x /home
chmod g+x /home/mastodon
chmod g+x /home/mastodon/live
Reinicia:
sudo systemctl restart nginx
sudo systemctl rest
Paso 8: configurar los servicios de Systemd
Cuando actives los servidores de Systemd, la aplicación web de Mastodon y las funciones de streaming en tiempo real se activarán automáticamente cuando se inicie el servidor. Esto garantiza que tu servidor de Mastodon esté permanentemente disponible.
Copia las plantillas de servicio de Systemd de Mastodon en el directorio correspondiente:
cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/
Si en algún momento has cambiado los valores predeterminados, comprueba que el nombre de usuario y la ruta de las plantillas de servicio son correctas
$EDITOR /etc/systemd/system/mastodon-*.service
Inicia y activa los servicios Systemd:
systemctl daemon-reload
systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming
Deja una respuesta