¿Que es mastodon Ultimamente mastodon, parece haberse puesto de moda entre los mass medias, como un «fuerte» competidor de twitter. Mastodon es un software para crear una red abierta y descentralizada al estilo de gnusocial, pero sin utilizar su software, aunque es totalmente compatible con ella. Si queréis una explicación mas detallada, echarle un vistazo a el articulo que ya hizo victorhck en su blog https://victorhckinthefreeworld.com/2016/11/22/mastodon-un-nuevo-servidor-compatible-con-gnusocial que el lo explica mucho mejor que yo ;)

Instalando y configurando mastodon

El software de mastodon esta escrito en ruby, por lo que necesita una serie de dependencias para funcionar, aunque la documentación oficial esta muy bien documentada, faltan algunos pasos, por lo que creo que este articulo puede servir para tener una completa guía de instalación, para que cualquiera que quiera instalar un nodo pueda hacerlo sin complicaciones.

Instalación de dependencias

apt-get install imagemagick libpq-dev libxml2-dev libxslt1-dev nodejs file git curl

El paquete ffmpeg tambien necesitamos instalarlo , pero para ello tendremos que añadir los repositorios de jessie-backport, con lo que solo tendremos que añadir a nuestro archivo /etc/apt/sources.list, la siguiente linea:

deb http://ftp.debian.org/debian jessie-backports main

Actualizamos

apt-get update

Lo instalamos con apt-get -t jessie-backports install ffmpeg

Instalacion node – Descargamos y instalamos node con los siguiente comandos:

curl -sL https://deb.nodesource.com/setup_4.x | bash - apt-get intall nodejs npm install -g yarn

Instalacion Redis

apt-get install redis-server redis-tools

Instalacion y configuracion Postgres

apt-get install postgresql postgresql-contrib

Creamos un usuario y base de datos para nuestra aplicacion, con el nombre de mastodon

Entramos con el usuario postgres su - postgres

Ejecutamos postgres psql

Creamos un usuario con permisos para crear base de datos. CREATE USER mastodon CREATEDB;

Salimos \q

Instalacion Rbenv

Primero necesitamos instalar las siguientes dependencias:

apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev

Clonamos Rbend desde el repositorio a nuestro home

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

Añadimos rbend al path

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo'export PATH="$HOME/.rbenv/shims:$PATH"'>> ~/.bashrc

Reiniciamos nuestra bash, para que se apliquen los cambios Una vez echo esto, comprobamos que tenemos correctamente el path de rbenv con:

type rbenv

Os tiene que salir algo como esto:

Instalacion ruby-build

Vamos a instalarlo como un plugin de rbenv para poder usar el comando install

Clonamos el repo git en la misma ruta donde instalamos rbenv

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

Instalacion de ruby

Ahora que tenemos rbenv y el plugin de install instalados, tan solo tenemos que ejecutar el siguiente comando, para instalar ruby:

rbenv install 2.4.1

Instalando y configurando mastodon

Bajamos mastodon del repositorio git clone https://github.com/tootsuite/mastodon.git live

Accedemos a la carpeta del proyecto y instalamos y configuramos las dependencias del mismo gem install bundler bundle install --deployment --without development test yarn install

Una vez instaladas todas las dependencias, vamos a configurar el archivo de nuestra instancia

Cogemos el archivo de configuración por defecto y hacemos una copia para producción cp .env.production.sample .env.production

Lo editamos y lo dejamos como indica la documentación:

Ojo: Es muy importante que en tu sistema exista un usuario llamado mastodon y que toda la instalación del proyecto este en su home, ya que la autenticacion, se basa en una mapeo de este con el usuario de postgres que creaste.

Generamos un «secret» para nuestra aplicacion bundle exec rake secret

Copiamos nuestro «secret» y lo introducimos en config/initializers/devise.rb y en config/secrets.yml

Generamos la bd RAILS_ENV=production bundle exec rails db:setup

Compilamos css y javascript RAILS_ENV=production bundle exec rails assets:precompile

Necesitamos crear varios servicios en systemd para poner la aplicación a funcionar, para ello creamos los siguientes archivos:

servicio: /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 TimeoutSec=15 Restart=always [Install] WantedBy=multi-user.target

servicio: /etc/systemd/system/mastodon-sidekiq.service

[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

servicio: /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

Les damos permiso systemctl enable /etc/systemd/system/mastodon-*.service

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

Nginx

Ahora que tenemos nuestros servicios instalados y corriendo, necesitamos montar el frontal de la web en nginx.

Instalamos nginx apt-get install nginx

cd /etc/nginx/sites-avaliable

Creamos un nuevo fichero de configuración mastodon.conf

map $http_upgrade $connection_upgrade {

default upgrade;

» close;

}

server {

listen 80;

listen [::]:80;

server_name example.com;

# Useful for Let’s Encrypt

location /.well-known/acme-challenge/ { allow all; }

location / { return 301 https://$host$request_uri; }

}

server {

listen 443 ssl;

listen [::]:443 ssl;

server_name example.com;

ssl_protocols TLSv1.2;

ssl_ciphers EECDH+AESGCM:EECDH+AES;

ssl_ecdh_curve prime256v1;

ssl_prefer_server_ciphers on;

ssl_session_cache shared:SSL:10m;

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;

ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

keepalive_timeout 70;

sendfile on;

client_max_body_size 0;

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 /assets {

add_header Cache-Control «public, max-age=31536000, immutable»;

}

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 off; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; 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://localhost: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;

}

Accedemos al directorio, y activamos el sitio creando un enlace: cd ../sites-enable ln -s ../sites-avaliable/mastodon.conf .

Reinicias nginx nginx -s reload

Y ya tendréis vuestro sitio funcionando.

Happy fediverse ;)