No estás usando esta distribución?

Selecciona una versión o distribución diferente

Mastodon es una red social libre y descentralizada de microblogging. Esta red social es una federación descentralizada de servidores que ejecutan el Software bajo licencia AGPL.

Eso significa que los usuarios están esparcidos en diferentes comunidades autónomos e independientes llamadas "instancias" o "nodos" cuya red se llama Fediverso (que viene de unir Federeación + Universo).

Pasos previos

Para realizar este tutorial será necesario tener un servidor Debian 11 con acceso a root.  Además también necesitaremos tener un dominio o subdominio donde hacer la instalación de la instancia de Mastodon.

Instalación de NodeJS

Para poder instalar NodeJS, deberás de seguir las instrucciones de este otro tutorial:

Instalación de NodeJS en GNU/Linux [Debian, Ubuntu, CentOS]
En el siguiente tutorial os explicaremos la correcta instalación de NodeJS en GNU/Linux. Ya sea tu servidor un Ubuntu o Debian o CentOS aquí encontrarás las instrucciones correctas para su instalación.

Es recomendable instalar la versión LTS.

# node -v
v16.17.0

Instalación de Yarn

También será necesario añadir el repositorio de Yarn para la versión de Mastodon.

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
apt update

Y lo instalamos:

apt install yarn

Instalación de dependencias

También son necesario instalar todas estas dependencias:

apt -y install 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 libreadline-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev libidn11-dev libicu-dev libjemalloc-dev

Instalación de Nginx, Redis, Certbot y PostgreSQL

Software necesario para Mastodon, necesitaremos un servidor web, que en este caso será de nuevo Nginx, también usaremos Redis para la caché y luego para las bases de datos usaremos PostgreSQL.

apt install nginx redis-server redis-tools postgresql-13 certbot

Habilitamos los servicios al arranque:

systemctl enable nginx

Dependencias que deben de ser añadidas por un usuario no-root

Creamos un usuario llamado mastodon:

adduser mastodon

Iniciamos como el usuario que hemos creado:

su - mastodon

Instalamos los siguientes paquetes rbenv y ruby-build:

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
# Reiniciamos la shell
exec bash
# Comprobamos que rbenv está bien instalado
type rbenv
# Instalamos ruby-build
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

Ahora que ya están instalados los paquetes rbenv y ruby-build podemos proceder a la instalación de la versión de Ruby que Mastodon necesita, y para habilitarlo es necesario ejecutar lo siguiente:

RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.0.4
rbenv global 3.0.4

Esto llevará un tiempo seguramente, así que por ejemplo, yo me fui hacer un café y aún estaba instalando.

Dependencias para NodeJS y Ruby

Ahora que Ruby está habilitado, vamos a clonar el repositorio de Mastodon y luego instalaremos las dependencias de Ruby y NodeJS.

Primero volvemos al home de nuestro usuario mastodon:

cd

Clonamos el repositorio de Mastodon:

git clone https://github.com/tootsuite/mastodon.git live

Accedemos dentro de la carpeta creada:

cd live

Instalamos Bundler:

gem install bundler

Usamos Bundler para instalar el resto de dependencias para Ruby:

bundle config set deployment 'true'
bundle config set without 'development test'
bundle install -j$(getconf _NPROCESSORS_ONLN)

Y usamos Yarn para instalar las dependencias de NodeJS:

yarn install --pure-lockfile

Una vez hemos acabado con esto, ejecutamos exit para salir del usuario mastodon y volver al usuario root.

Creación de la base de datos

Ahora crearemos la base de datos para Mastodon con PostgreSQL, para ello accederemos al prompt:

sudo -u postgres psql

Crearemos la base de datos:

CREATE USER mastodon CREATEDB;

Y salimos:

exit

La contraseña del usuario será que la hemos configurado para el propio sistema.

Configuración Nginx

En la documentación, te dan el fichero de configuración de Nginx preparado para copiar y utilizar, así que vamos a copiar el fichero directamente:

cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon.conf
ln -s /etc/nginx/sites-available/mastodon.conf /etc/nginx/sites-enabled/mastodon.conf

Editamos el fichero de configuración /etc/nginx/sites-available/mastodon.conf y modificamos example.com por nuestro dominio.

Reiniciamos Nginx para aplicar los cambios:

systemctl reload nginx

Configuración de Nginx con SSL

El siguiente paso será crear el certificado para nuestro dominio, así que instalaremos los paquetes necesarios para hacerlo con Let's Encrypt:

apt install certbot python3-certbot-nginx

Creamos el certificado:

certbot --nginx -d nuestrodominio.com

Instalación de Mastodon

¡Venga, que ya queda poco! Volvemos a iniciar sesión como el usuario mastodon:

su - mastodon

Ahora viene lo interesante. Iniciaremos la instalación donde tendremos una configuración interactiva donde nos pedirá información de nuestra instancia de Mastodon:

cd live
RAILS_ENV=production bundle exec rake mastodon:setup

Esta es la salida del comando y las respuestas que debéis de introducir para configurar vuestro nodo de Mastodon:

Your instance is identified by its domain name. Changing it afterward will break things.
Domain name: [NuestroDominio]

Single user mode disables registrations and redirects the landing page to your public profile.
Do you want to enable single user mode? No

Are you using Docker to run Mastodon? no

PostgreSQL host: /var/run/postgresql
PostgreSQL port: 5432
Name of PostgreSQL database: mastodon
Name of PostgreSQL user: mastodon
Password of PostgreSQL user: [Contraseña del usuario mastodon]
Database configuration works! 🎆

Redis host: localhost
Redis port: 6379
Redis password: 
Redis configuration works! 🎆

Do you want to store uploaded files on the cloud? No

Do you want to send e-mails from localhost? yes
E-mail address to send e-mails "from": mastodon@[nuestroDominio]
Send a test e-mail with this configuration right now? Yes
Send test e-mail to: [TuCuentaDeCorreo]

This configuration will be written to .env.production
Save configuration? Yes

Now that configuration is saved, the database schema must be loaded.
If the database already exists, this will erase its contents.
Prepare the database now? Yes
Running `RAILS_ENV=production rails db:setup` ...

Created database 'mastodon'
Done!

The final step is compiling CSS/JS assets.
This may take a while and consume a lot of RAM.
Compile the assets now? Yes

La última pregunta que nos hace, es si queremos compilar los assets, le diremos que si para que compile todo:

Running `RAILS_ENV=production rails assets:precompile` ...

yarn install v1.22.19
[1/6] Validating package.json...
[2/6] Resolving packages...
[3/6] Fetching packages...
[4/6] Linking dependencies...
warning Workspaces can only be enabled in private projects.
[5/6] Building fresh packages...
[6/6] Cleaning modules...
Done in 8.87s.
Compiling...
Compiled all packs in /home/mastodon/live/public/packs
Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db

Why you should do it regularly:
https://github.com/browserslist/browserslist#browsers-data-updating

Done!

All done! You can now power on the Mastodon server 🐘

Tras este proceso, tendremos Mastodon funcionando en nuestro servidor, pero antes, podemos crear un usuario admin para gestionar el nodo:

Do you want to create an admin user straight away? Yes
Username: root
E-mail: mastodon@[nuestroDominio]
You can login with the password: a17dbxxxxxxxxxxx6b2fdb5399
You can change your password once you login.

Este proceso generará una contraseña automáticamente que será la que usaremos para iniciar con nuestro usuario admin y que podemos cambiar posteriormente.

Configuración de SystemD para Mastodon

Hay que configurar tres servicios para poder iniciar el servicio de manera más sencilla. Estos son los tres ficheros y su contenido:

Para gestionar la web tendremos el fichero /etc/systemd/system/mastodon-web.service

[Unit]
Description=mastodon-web
After=network.target

[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="RAILS_ENV=production"
Environment="PORT=3000"
ExecStart=/home/mastodon/.rbenv/shims/bundle exec puma -C config/puma.rb
ExecReload=/bin/kill -SIGUSR1 $MAINPID
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

Para mantener el servicio en segundo plano tendremos este otro fichero /etc/systemd/system/mastodon-sidekiq.service con el contenido:

[Unit]
Description=mastodon-sidekiq
After=network.target

[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="RAILS_ENV=production"
Environment="DB_POOL=5"
ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

Y finalmente el último servicio para la API /etc/systemd/system/mastodon-streaming.service:

[Unit]
Description=mastodon-streaming
After=network.target

[Service]
Type=simple
User=mastodon
WorkingDirectory=/home/mastodon/live
Environment="NODE_ENV=production"
Environment="PORT=4000"
ExecStart=/usr/bin/npm run start
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

Los habilitamos para el arranque:

systemctl enable /etc/systemd/system/mastodon-*.service

Y los iniciamos uno a uno:

systemctl start mastodon-web.service
systemctl start mastodon-sidekiq.service
systemctl start mastodon-streaming.service

Y una vez hemos acabado con esto… *redoble de tambores* Ta chaaaaan! Ya tenemos Mastodon en nuestro servidor y funcionando perfectamente.

Sólo faltará que la federación haga lo suyo para empezar a ver toda la red disponible 😛

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