Cómo instalar la plataforma de redes sociales Mastodon en Debian 10

Mastodon es una plataforma de red social de código abierto muy similar a Twitter. Puedes seguir a otros usuarios y publicar mensajes e imágenes con Mastodon. Está escrito en Ruby y JavaScript, y cualquiera puede utilizarlo de forma privada y segura. Mastodon también ofrece una aplicación para varias plataformas como Android e iOS.

En este tutorial, te mostraremos cómo instalar Mastodon en Debian 10.

Requisitos

  • Un servidor con Debian 10.
  • Una contraseña de root configurada en tu servidor.
  • Un nombre de dominio válido apuntado con la dirección IP de tu servidor. En este tutorial, utilizaremos test.linuxbuz.com.

Cómo empezar

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

apt-get update -y
apt-get upgrade -y

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

apt-get install software-properties-common dirmngr apt-transport-https ca-certificates curl gcc g++ make imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core libprotobuf-dev protobuf-compiler pkg-config autoconf bison build-essential libssl-dev libyaml-dev libreadline-dev libidn11-dev libicu-dev libjemalloc-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev -y

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

Instalar Node.js

Mastodon requiere que Node.js versión 8.x y Yarn estén instalados en tu sistema. Para instalar Node.js, añade el repositorio de Node.js a tu servidor con el siguiente comando:

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

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

apt-get 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 | apt-key add -
echo "deb 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-get update -y
apt-get install yarn -y

Una vez que hayas terminado, puedes pasar al siguiente paso.

Instalar y configurar PostgreSQL

Mastodon utiliza PostgreSQL para almacenar sus datos. Puedes instalar la última versión de PostgreSQL con el siguiente comando:

apt-get install postgresql postgresql-contrib -y

Una vez instalado, entra en PostgreSQL con el siguiente comando:

su - postgres
postgres@debian:~$ psql
psql (11.5 (Debian 11.5-1+deb10u1))
Type "help" for help.

A continuación, crea un usuario para Mastodon con el siguiente comando:

postgres=# CREATE USER mastodon CREATEDB;

A continuación, sal del shell de PostgreSQL con el siguiente comando:

postgres=#exit

Instalar Ruby

Mastodon utiliza Ruby on Rails para el back-end. En primer lugar, tendrás que crear un nuevo usuario del sistema para ejecutar el servidor Mastodon.

Puedes crearlo con el siguiente comando:

adduser --disabled-login --gecos 'Mastodon Server' mastodon

Una vez creado, accede al usuario mastodon con el siguiente comando:

su - mastodon

A continuación, clona el repositorio rbenv con el siguiente comando:

git clone https://github.com/rbenv/rbenv.git ~/.rbenv

A continuación, configura rbenv y ruby-build con los siguientes comandos:

cd ~/.rbenv && src/configure && make -C src
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 que hayas terminado, instala la última versión de Ruby con el siguiente comando

RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 2.6.1

Una vez instalado, deberías obtener la siguiente salida:

Downloading ruby-2.6.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.1.tar.bz2
Installing ruby-2.6.1...

Installed ruby-2.6.1 to /home/mastodon/.rbenv/versions/2.6.1

A continuación, establece la disponibilidad global de Ruby con el siguiente comando:

rbenv global 2.6.1

A continuación, actualiza la gema e instala bundler con el siguiente comando:

gem update --system
gem install bundler --no-document

Una vez que hayas terminado, puedes comprobar el Ruby con el siguiente comando:

ruby --version

Configurar Mastodon

En primer lugar, inicia sesión con el usuario mastodon y descarga el repositorio git de mastodon con el siguiente comando

su - mastodon
git clone https://github.com/tootsuite/mastodon.git ~/live
cd ~/live

A continuación, comprueba la última rama con el siguiente comando:

git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

Deberías obtener la siguiente salida:

Note: checking out 'v2.9.3'.

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 performing another checkout.

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

  git checkout -b 

HEAD is now at 06f906aca Bump version to 2.9.3

A continuación, instala todas las dependencias requeridas por ruby y Node.js con el siguiente comando

bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test
yarn install --pure-lockfile

Ahora, configura el Mastodon con el siguiente comando:

RAILS_ENV=production bundle exec rake mastodon:setup

Durante el proceso de configuración, se te harán varias preguntas. Responde a todas las preguntas como se muestra a continuación:

Your instance is identified by its domain name. Changing it afterward will break things.
Domain name: test.linuxbuz.com

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_production
Name of PostgreSQL user: mastodon
Password of PostgreSQL user: 
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 <[email protected]>
Send a test e-mail with this configuration right now? no

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

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: a9a78a4c2eb442d72eb946f94ebe9a00
You can change your password once you login.

Una vez que hayas terminado, sal del usuario mastodonte con el siguiente comando:

exit

Configurar Nginx para Mastodon

A continuación, tendrás que instalar Nginx y Certbot en tu sistema. Por defecto, la última versión de Certbot no está disponible en el repositorio por defecto de Debian 10. Así que tendrás que añadir el repositorio de Certbot a tu sistema.

Puedes añadirlo con el siguiente comando:

add-apt-repository ppa:certbot/certbot

A continuación, actualiza el repositorio e instala Certbot con Nginx ejecutando el siguiente comando:

apt-get update -y
apt-get install nginx python-certbot-nginx -y

Una vez instalados ambos paquetes, copia el archivo de configuración de Nginx del directorio de Mastodon a Nginx con el siguiente comando:

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

A continuación, habilita el archivo de configuración del host virtual de Mastodon con el siguiente comando:

ln -s /etc/nginx/sites-available/mastodon.conf /etc/nginx/sites-enabled/

Por defecto, el archivo de configuración del host virtual de Mastodon está configurado con el dominio example.com. Así que tendrás que sustituir el dominio example.com por tu nombre de dominio en el archivo mastodon.conf. Puedes sustituirlo con el siguiente comando:

sed -i 's/example.com/test.linuxbuz.com/g' /etc/nginx/sites-enabled/mastodon.conf

A continuación, reinicia el servicio Nginx para aplicar la configuración:

systemctl restart nginx

A continuación, descarga el certificado SSL gratuito de Let’s Encrypt y configura Nginx para que utilice este certificado ejecutando el comando certbot:

certbot --nginx -d test.linuxbuz.com

Esto descargará un certificado SSL gratuito de Let’s Encrypt y configurará el Nginx para tu dominio test.linuxbuz.com.

Tu archivo de configuración de Nginx para el Mastodonte tiene ahora el siguiente aspecto:

cat /etc/nginx/sites-enabled/mastodon.conf

Salida:

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CACHE:10m inactive=7d max_size=1g;

server {
    if ($host = test.linuxbuz.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


  listen 80;
  listen [::]:80;
  server_name test.linuxbuz.com;
  root /home/mastodon/live/public;
  location /.well-known/acme-challenge/ { allow all; }
  location / { return 301 https://$host$request_uri; }


}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name test.linuxbuz.com;

  ssl_protocols TLSv1.2;
  ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;

  # Uncomment these lines once you acquire a certificate:
  # ssl_certificate     /etc/letsencrypt/live/test.linuxbuz.com/fullchain.pem;
  # ssl_certificate_key /etc/letsencrypt/live/test.linuxbuz.com/privkey.pem;

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 80m;

  root /home/mastodon/live/public;

  gzip on;
  gzip_disable "msie6";
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

  add_header Strict-Transport-Security "max-age=31536000";

  location / {
    try_files $uri @proxy;
  }

  location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {
    add_header Cache-Control "public, max-age=31536000, immutable";
    add_header Strict-Transport-Security "max-age=31536000";
    try_files $uri @proxy;
  }

  location /sw.js {
    add_header Cache-Control "public, max-age=0";
    add_header Strict-Transport-Security "max-age=31536000";
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";
    proxy_pass_header Server;

    proxy_pass http://127.0.0.1:3000;
    proxy_buffering on;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    proxy_cache CACHE;
    proxy_cache_valid 200 7d;
    proxy_cache_valid 410 24h;
    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
    add_header X-Cached $upstream_cache_status;
    add_header Strict-Transport-Security "max-age=31536000";

    tcp_nodelay on;
  }

  location /api/v1/streaming {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";

    proxy_pass http://127.0.0.1:4000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  error_page 500 501 502 503 504 /500.html;

    ssl_certificate /etc/letsencrypt/live/test.linuxbuz.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/test.linuxbuz.com/privkey.pem; # managed by Certbot
}

Configurar el servicio Systemd para Mastodon

Ahora Nginx está instalado y configurado para servir a Mastodon. A continuación, tendrás que configurar el archivo de servicio systemd para Mastodon. Para ello, copia las plantillas de servicio systemd del directorio de Mastodon:

cp /home/mastodon/live/dist/mastodon-web.service /etc/systemd/system/
cp /home/mastodon/live/dist/mastodon-sidekiq.service /etc/systemd/system/
cp /home/mastodon/live/dist/mastodon-streaming.service /etc/systemd/system/

A continuación, inicia todos los servicios y habilítalos para que se inicien tras el reinicio con el siguiente comando:

systemctl start mastodon-web
systemctl start mastodon-sidekiq
systemctl start mastodon-streaming
systemctl enable mastodon-web
systemctl enable mastodon-sidekiq
systemctl enable mastodon-streaming

Accede a la interfaz web de Mastodon

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

Mastodonte Login

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

Primeros pasos al utilizar Mastodon

Ahora, haz clic en el botón ¡Vamos! Deberías ver la siguiente página:

Vamos

Ahora, haz clic en el botón Siguiente. Deberías ver la siguiente página:

Tutorial de Mastodonte

Ahora, haz clic en el botón ¡FINALIZAR TUTORIAL! Deberías ver el panel de control de Mastodon en la siguiente página:

Panel de control de Mastodonte

Enhorabuena! has instalado y configurado con éxito Mastodon en un servidor Debian 10. Ahora puedes crear fácilmente tu propia red social con Mastodon. No dudes en preguntarme si tienes alguna duda.

Scroll al inicio