¿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 ;)
Hace tiempo que me pasa por la cabeza crear un nodo de GNU Social, quizás sería una alternativa mastodon. Gracias por el artículo.
Gracias por la mención! :)
En la config de Nginx no debería cambiarse el server_name por el dominio que tengamos nosotros?
Claro, el ejemplo es solo un nodo que monte en local, no esta accesible desde Internet.
Un saludo
Eso es, buena info me la guardo . Saludos dende Portugal al equipo y a los compañeros que van poniendo estos temas por aqui que son de lo mejor a seguir asi .
«Clonamos Rbend desde el repositorio o nuestro home» te referis a un usuario, por ejemplo «mastodon» creado para eso? o el home del root? Buen artículo!
Si es un error(lo acabo de cambiar) venia a decir «Clonamos Rbend desde el repositorio a nuestro home», quiere decir que tenemos que crear un usuario y su home y clonar el repositorio en el mismo, yo he usado /home/mastodon.
Gracias, un saludo
Buen artículo….gracias
Tengo una duda existencial.. Mira yo quiero crear una instancia de Mastodon, pero que no sea accesible por otros nodos de Mastodon, luego modificar las interfaces y con el tiempo unir otros nodos propios… ¿cómo lo hago?, es necesario establecer una configuración especifica para evitar que otros nodos se conecten a mi instancia?….
Se que eso de cerrar las puertas a otros va en contra de la filosofía de Mastodon, pero necesito tener el control-
Gracias.
Buen manual, pero creo que te caes en que no especificas los usuarios con el cual se instala cada componente…
El archivo de configuración Nginx está entero mal, faltan muchos pasos, como los certificados, etc.
He perdido el tiempo… :(((
Creo que no has debido leer todo el articulo, porque en la configuración de nginx se indica estas lineas:
*
Cualquier duda no duces en comentar