Cómo instalar la Red Social Mastodon en Ubuntu 22.04

Mastodon es un software gratuito y de código abierto para ejecutar servicios de redes sociales autoalojados. Ofrece funciones de microblogging que te permiten seguir a otros usuarios y publicar mensajes e imágenes con Mastodon. Está escrito en Ruby y JavaScript y admite publicaciones de audio, vídeo e imágenes, descripciones de accesibilidad, encuestas, avisos de contenido, avatares animados, emojis personalizados y mucho más. Mastodon ofrece una aplicación para varias plataformas como Android e iOS.

En este tutorial, te mostraremos cómo instalar Mastodon en Ubuntu 22.04.

Actualización: La guía se actualizó y se volvió a probar con éxito el 30/11/2022 para aclarar la instalación y solucionar los problemas mencionados en los comentarios, ya que algunas versiones de software habían cambiado desde que se escribió la guía.

Requisitos previos

  • Un servidor que ejecute Ubuntu 22.04.
  • Tu servidor tiene configurada una contraseña de root.
  • Un nombre de dominio válido apuntando a la dirección IP de tu servidor.

Cómo empezar

En primer lugar, se recomienda actualizar todos los paquetes de tu sistema con la última versión. Puedes hacerlo ejecutando el siguiente comando:

apt update -y
apt upgrade -y

Después de actualizar tu sistema, necesitarás instalar algunas dependencias requeridas por Mastodon. Puedes instalarlas todas con el siguiente comando:

apt install git software-properties-common make apt-transport-https redis-server optipng pngquant jhead jpegoptim gifsicle imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file 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 libidn11-dev libicu-dev libjemalloc-dev -y

Una vez instaladas todas las dependencias, puedes pasar al siguiente paso.

Instalar Node.js

Mastodon requiere que Node.js esté instalado en tu sistema. Para instalar Node.js, añade el repositorio de Node.js a tu servidor utilizando el siguiente comando:

curl -sL https://deb.nodesource.com/setup_16.x | bash -

Una vez añadido el repositorio, instala la versión 16 de Node.js con el siguiente comando:

apt install nodejs -y

A continuación, descarga y añade la clave GPG de Yarn y habilita el repositorio con el siguiente comando:

curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | tee /etc/apt/sources.list.d/yarn.list

Una vez añadida, actualiza el repositorio e instala Yarn con los siguientes comandos:

apt update -y
apt -y install yarn

Cuando hayas terminado, puedes pasar al siguiente paso.

Instalar y configurar PostgreSQL

Mastodon utiliza PostgreSQL como base de datos. Puedes instalar la última versión de PostgreSQL con el siguiente comando:

apt install -y postgresql postgresql-contrib

Tras instalar PostgreSQL, inicia el servicio PostgreSQL con el siguiente comando:

systemctl start postgresql

A continuación, inicia sesión en el intérprete de comandos PostgreSQL:

sudo -u postgres -i psql

A continuación, crea una base de datos para Mastodon:

CREATE DATABASE mastodon;

A continuación, crea un usuario de base de datos con el siguiente comando:

CREATE USER mastodon;

A continuación, establece una contraseña para el usuario Mastodon con el siguiente comando:

ALTER USER mastodon WITH ENCRYPTED PASSWORD 'password';

A continuación, establece el permiso adecuado para crear la base de datos:

ALTER USER mastodon createdb;

A continuación, establece este usuario como propietario de la base de datos Mastodon:

ALTER DATABASE mastodon OWNER TO mastodon;

Por último, sal del intérprete de comandos PostgreSQL con el siguiente comando:

\q

Instalar Ruby

Mastodon también requiere tener instalada la versión 2.5+ de Ruby en tu servidor. Si no está instalada, puedes instalarla con el siguiente comando:

apt install -y ruby ruby-dev

Tras la instalación, puedes verificar la versión de Ruby con el siguiente comando:

ruby -v

Obtendrás la versión de Ruby en la siguiente salida:

ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux-gnu]

Instalar y configurar Mastodon

A continuación, tendrás que crear un usuario dedicado para ejecutar Mastodon. Puedes crearlo con el siguiente comando:

adduser mastodon --system --group --disabled-login

A continuación, descarga la última versión de Mastodon del repositorio Git:

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

A continuación, crea un directorio /var/www/ para Mastodon si no existe.

mkdir -p /var/www/

A continuación, mueve el directorio Mastodon al directorio /var/www:

mv mastodon/ /var/www/

A continuación, cambia la propiedad del directorio Mastodon a mastodon:

chown -R mastodon:mastodon /var/www/mastodon/

A continuación, navega hasta el directorio /var/www/mastodon y comprueba la última rama:

cd /var/www/mastodon/
sudo -u mastodon git checkout v4.0.2

Obtendrás el siguiente resultado:

Note: switching to 'v4.0.2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c 

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 03b0f3ac8 Bump version to 4.0.2 (#20725)

A continuación, instala todas las dependencias necesarias para Mastodon con el siguiente comando:

gem install bundler
sudo -u mastodon bundle config deployment 'true'
sudo -u mastodon bundle config without 'development test'
sudo -u mastodon bundle install -j$(getconf _NPROCESSORS_ONLN)

Por último, ejecuta el asistente de instalación de Mastodon con el siguiente comando:

sudo -u mastodon RAILS_ENV=production bundle exec rake mastodon:setup

Se te pedirá que indiques tu nombre de dominio:

Type application/netcdf is already registered as a variant of application/netcdf.
Your instance is identified by its domain name. Changing it afterward will break things.
Domain name: mastodon.linuxbuz.com

Escribe tu nombre de dominio y pulsa la tecla Intro. Se te pedirá que habilites el modo monousuario:

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

Escribe No y pulsa la tecla Intro. Se te pedirá que utilices Docker para ejecutar Mastodon:

Are you using Docker to run Mastodon? no

Escribe no y pulsa la tecla Intro. Se te pedirá que proporciones los detalles de la base de datos PostgreSQL:

PostgreSQL host: /var/run/postgresql
PostgreSQL port: 5432
Name of PostgreSQL database: mastodon
Name of PostgreSQL user: mastodon
Password of PostgreSQL user: 

Proporciona los detalles de tu base de datos PostgreSQL y pulsa la tecla Intro. Se te pedirán los datos del servidor Redis:

Database configuration works! ????

Redis host: localhost
Redis port: 6379
Redis password: 

Indica el host y el puerto de Redis, deja en blanco el campo de la contraseña y pulsa la tecla Intro. Se te pedirá que almacenes los archivos en la nube:

Redis configuration works! ????

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

Escribe No y pulsa la tecla Intro. Se te pedirá que envíes un correo electrónico desde localhost:

Do you want to send e-mails from localhost? yes
E-mail address to send e-mails "from": Mastodon <[email protected]>
Send a test e-mail with this configuration right now? no

Introduce todos los datos necesarios y pulsa la tecla Intro. Se te pedirá que guardes todas las configuraciones:

This configuration will be written to .env.production
Save configuration? (Y/n) Y

Escribe Y y pulsa la tecla Intro. Se te pedirá que prepares la base de datos:

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? (Y/n) Y

Escribe Y y pulsa la tecla Intro. Se te pedirá que compiles los activos CSS/JS.

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

Escribe Y y pulsa la tecla Intro. Se te pedirá que configures una contraseña de administrador:

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

Do you want to create an admin user straight away? Yes
Username: admin
E-mail: [email protected]
You can login with the password: 9835fbd5e569ad149610862178580da7
You can change your password once you login.

Introduce tu nombre de usuario y correo electrónico de administrador y pulsa la tecla Intro para finalizar la instalación.

Crear archivo de servicio Systemd para Mastodon

Mastodon viene con un archivo systemd preconfigurado para gestionar los servicios de Mastodon. Tendrás que copiarlos en el directorio /etc/sysetmd/system/.

cp /var/www/mastodon/dist/mastodon*.service /etc/systemd/system/

A continuación, tendrás que cambiar el directorio de trabajo de Mastodon de /home/mastodon/live/ a /var/www/mastodon/ en el archivo de servicio. Puedes hacerlo con el siguiente comando:

sed -i 's/home\/mastodon\/live/var\/www\/mastodon/g' /etc/systemd/system/mastodon-*.service

También tendrás que cambiar /home/mastodon/.rbenv/shims/bundle por /usr/local/bin/bundle en los archivos de servicio:

sed -i 's/home\/mastodon\/.rbenv\/shims/usr\/local\/bin/g' /etc/systemd/system/mastodon-*.service

A continuación, recarga el systemd para aplicar los cambios de configuración:

systemctl daemon-reload

A continuación, inicia y activa todos los servicios de Mastodon:

systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming

Puedes comprobar el estado de todos los servicios con el siguiente comando:

systemctl status mastodon-web mastodon-sidekiq mastodon-streaming

Salida:

? mastodon-web.service - mastodon-web
     Loaded: loaded (/etc/systemd/system/mastodon-web.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-11-30 03:07:13 UTC; 19s ago
   Main PID: 10201 (ruby3.0)
      Tasks: 29 (limit: 464140)
     Memory: 249.0M
     CGroup: /system.slice/mastodon-web.service
             ??10201 "puma 5.6.5 (tcp://127.0.0.1:3000) [mastodon]" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">
             ??10228 "puma: cluster worker 0: 10201 [mastodon]" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "">
             ??10232 "puma: cluster worker 1: 10201 [mastodon]" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "">

Nov 30 03:07:15 ubuntu22042 bundle[10201]: [10201] *  Max threads: 5
Nov 30 03:07:15 ubuntu22042 bundle[10201]: [10201] *  Environment: production
Nov 30 03:07:15 ubuntu22042 bundle[10201]: [10201] *   Master PID: 10201
Nov 30 03:07:15 ubuntu22042 bundle[10201]: [10201] *      Workers: 2
Nov 30 03:07:15 ubuntu22042 bundle[10201]: [10201] *     Restarts: (?) hot (?) phased
Nov 30 03:07:15 ubuntu22042 bundle[10201]: [10201] * Preloading application
Nov 30 03:07:27 ubuntu22042 bundle[10201]: [10201] * Listening on http://127.0.0.1:3000
Nov 30 03:07:27 ubuntu22042 bundle[10201]: [10201] Use Ctrl-C to stop
Nov 30 03:07:27 ubuntu22042 bundle[10201]: [10201] - Worker 0 (PID: 10228) booted in 0.04s, phase: 0
Nov 30 03:07:27 ubuntu22042 bundle[10201]: [10201] - Worker 1 (PID: 10232) booted in 0.01s, phase: 0

? mastodon-sidekiq.service - mastodon-sidekiq
     Loaded: loaded (/etc/systemd/system/mastodon-sidekiq.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-11-30 03:07:13 UTC; 19s ago
   Main PID: 10199 (ruby3.0)
      Tasks: 32 (limit: 464140)
     Memory: 247.1M
     CGroup: /system.slice/mastodon-sidekiq.service
             ??10199 "sidekiq 6.5.7 mastodon [0 of 25 busy]" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "">

Nov 30 03:07:29 ubuntu22042 bundle[10199]: 2022-11-30T03:07:29.202Z pid=10199 tid=cc7 uniquejobs=upgrade_locks INFO: Start - Converting v6 lo>
Nov 30 03:07:29 ubuntu22042 bundle[10199]: 2022-11-30T03:07:29.202Z pid=10199 tid=cc7 uniquejobs=upgrade_locks INFO: Done - Converting v6 loc>
Nov 30 03:07:29 ubuntu22042 bundle[10199]: 2022-11-30T03:07:29.202Z pid=10199 tid=cc7 uniquejobs=upgrade_locks INFO: Start - Deleting v6 keys
Nov 30 03:07:29 ubuntu22042 bundle[10199]: 2022-11-30T03:07:29.203Z pid=10199 tid=cc7 uniquejobs=upgrade_locks INFO: Done - Deleting v6 keys

Por defecto, Mastodon escucha en el puerto 3000. Puedes comprobarlo con el siguiente comando:

ss -lnpt | grep 3000

Salida:

LISTEN 0      1024       127.0.0.1:3000      0.0.0.0:*    users:(("ruby3.0",pid=10232,fd=5),("ruby3.0",pid=10228,fd=5),("ruby3.0",pid=10201,fd=5))

Configurar Nginx como proxy inverso

En primer lugar, instala el paquete del servidor web Nginx con el siguiente comando:

apt install nginx -y

A continuación, copia el archivo de configuración del host virtual Nginx en el directorio Nginx:

cp /var/www/mastodon/dist/nginx.conf /etc/nginx/conf.d/mastodon.conf

A continuación, edita el archivo de configuración del host virtual Mastodon:

nano /etc/nginx/conf.d/mastodon.conf

Busca la siguiente línea tanto en el bloque del servidor del puerto 80 como en el bloque del servidor del puerto 443:

server_name example.com;

Sustitúyelos por la siguiente línea:

server_name mastodon.linuxbuz.com;

Busca la siguiente línea tanto en el bloque del servidor del puerto 80 como en el bloque del servidor del puerto 443.

root /home/mastodon/live/public;

Sustitúyela por la siguiente línea:

root /var/www/mastodon/public;

Encuentra las dos líneas siguientes.

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

Cámbialas por las siguientes, para que Nginx utilice temporalmente un certificado TLS autofirmado. Más adelante obtendremos un certificado Let’s Encrypt válido.

ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;

Guarda y cierra el archivo y, a continuación, crea un directorio de caché para Nginx:

mkdir -p /var/nginx/cache/

A continuación, comprueba si Nginx tiene algún error de sintaxis:

nginx -t

Obtendrás la siguiente salida:

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

A continuación, reinicia el servicio Nginx para aplicar los cambios:

systemctl restart nginx

Asegura Mastodon con Let’s Encrypt SSL

Para habilitar HTTPS en el sitio web de Mastodon, necesitarás instalar el paquete Certbot en tu servidor.

Primero, instala el gestor de paquetes Snap con el siguiente comando:

apt install snapd

A continuación, actualiza el paquete Snap a la última versión:

snap install core
snap refresh core

A continuación, instala el paquete Certbot con el siguiente comando:

snap install --classic certbot

A continuación, crea un enlace simbólico para el binario de Certbot en la ubicación del sistema:

ln -s /snap/bin/certbot /usr/bin/certbot

A continuación, ejecuta el siguiente comando para descargar e instalar los certificados SSL de Let’s Encrypt:

certbot --nginx -d mastodon.linuxbuz.com

Se te pedirá que proporciones tu dirección de correo electrónico y que aceptes las condiciones del servicio:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Escribe Y y pulsa la tecla Intro para descargar e instalar los certificados SSL para tu dominio:

Account registered.
Requesting a certificate for mastodon.linuxbuz.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/mastodon.linuxbuz.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/mastodon.linuxbuz.com/privkey.pem
This certificate expires on 2023-02-28.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for mastodon.linuxbuz.com to /etc/nginx/conf.d/mastodon.conf
Congratulations! You have successfully enabled HTTPS on https://mastodon.linuxbuz.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Accede a la Interfaz Web de Mastodon

Ahora, abre tu navegador web y escribe la URL https://mastodon.linuxbuz.com. Serás redirigido a la siguiente página:

Haz clic en el botón Iniciar sesión. Deberías ver la página de inicio de sesión de Mastodon:

Ahora, proporciona tu correo electrónico de administrador y la contraseña que creaste anteriormente, y haz clic en el botón Iniciar sesión. Deberías ver el panel de control de Mastodon en la siguiente página:

Enhorabuena! has instalado y configurado correctamente Mastodon en el servidor Ubuntu 22.04. Ahora puedes crear fácilmente tu propia red social utilizando Mastodon. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...