2022-11-12
NOTA: El día 15-11-22 ha salido la versión 4.0.2, por lo que si quereis instalar directamente esta última versión, solo debeis cambiar el 3.0.3 de las líneas siguientes (cuando os aparezcan en la guía) para que apunten a la versión 3.0.4:
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.0.3
rbenv global 3.0.3
INSTALACIÓN:
Esta instalación es para la versión 3.5.3, si quieres instalar la última hasta el momento (4.0.2) entonces lee las líneas del principio.
Observando que la guía oficial carece de cierta información y da algún que otro error si se sigue tal cual, he decidido hacer esta guía de instalación para que cualquiera pueda instalarse su instancia de Mastodon personal o general.
No será esta guía con Docker sino de la manera más oficial. Tampoco configuro aquí el servicio de email, que puede ser latoso y casi mejor ofrecer invitaciones a los que quieran registrarse o si es una instancia para ti solo no te hará falta.
Hay que tener en cuenta que así está la instalación hasta el día de hoy. Esto puede cambiar en un futuro. Si es así ya haría otro artículo para aclararlo.
Por unos 3€ mensuales podrías tener tu propia instancia personal, aunque seguramente algo limitada en espacio (40 GB que poco a poco se irán llenando). Yo recomiendo mejor 80 GB y que tenga 4 GB de ram, si es posible 4 cores, aunque con 2 irá bien.
Bueno, empecemos con la contratación de un VPS. No voy a tratar aquí el instalar desde casa o con una raspberry o pc. Esto puede traer otro tipo de configuraciones, permisos del ISP, IP dinámica, etc. Nunca lo he hecho.
En la contratación de un VPS, siempre querrán tener tus datos y documentación. No se arriesgan a que cualquiera pueda tener un servidor y usarlo para fines delictivos, por lo que es algo que debes tener en cuenta. Igual existen otros menos restrictivos pero esto suele ser lo normal.
Cuando tengas todo registrado y tu ID comprobada, normalmente te enviarán por email los datos para poder manejar el servidor, entre otras cosas. Esta información contiene la IP del servidor y la contraseña de administrador para entrar remotamente por ssh.
Si no sabes, abrir un terminal y poner:
ssh root@ipdelservidor
Te recomiendo crear un usuario aparte y quitar del servidor ssh que se pueda hacer login desde root, así como cambiar el puerto por defecto a otro que elijas, y/o usar fail2ban. Pero esto debes saber hacerlo con cuidado. Si no sabes pregunta.
En el panel de control del servidor de VPS (que te dirán enlace por email) es donde normalmente puedes instalar alguna imagen, dandote opciones para la instalación entre varios sistemas operativos: Debian 11, Ubuntu xxx, etc. Así que entra en dicho apartado y dile que instale Debian 11. Tardará un poco y al terminar estará todo listo y te dará una contraseña para root diferente a la que recibiste por email.
Abres un terminal, entras como root@ipdelservidor y te dirá GNU/Linux que aceptes la clave y tal. Le das yes y ya te pedirá la contraseña que recibiste al instalar Debian 11. Una vez dentro, lo primero es cambiar la clave de root por una más cómoda para ti. NO OLVIDES APUNTAR LA NUEVA CLAVE DE ROOT.
Debes tener un dominio contratado con algún registrador. Por lo que entra a manejar tus dominios y ponle una entrada tipo A que apunte a la IP que te ha dado el VPS por email. Si hay otras entradas A que no usas puedes eliminarlas.
Y ya podemos empezar con la instalación de Mastodon.
Lo primero instalar los paquetes básicos que se necesitarán, siempre como root hasta que no se diga lo contrario, que es el único login que tienes ahora mismo. Vamos a por los pasos, no hace falta definirlos:
apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates
curl -sL https://deb.nodesource.com/setup_16.x | bash -
wget -O /usr/share/keyrings/postgresql.asc https://www.postgresql.org/media/keys/ACCC4CF8.asc
echo "deb [signed-by=/usr/share/keyrings/postgresql.asc] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/postgresql.list
apt update
apt install -y \
imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core \
g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf \
bison build-essential libssl-dev libyaml-dev libreadline6-dev \
zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev \
nginx redis-server redis-tools postgresql postgresql-contrib \
certbot python3-certbot-nginx libidn11-dev libicu-dev libjemalloc-dev
corepack enable
yarn set version stable
adduser --disabled-login mastodon
Añadido el usuario no-admin mastodon, ahora entramos a él:
su - mastodon
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
exec bash
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.0.3
rbenv global 3.0.3
gem install bundler --no-document
exit
Salimos del usuario mastodon y volvemos ya de nuevo a root. Seguimos. Ahora toca la base de datos:
sudo -u postgres psql
No te asustes del mensaje, todo bien y ahora te pide datos, así que les daremos los siguientes:
CREATE USER mastodon CREATEDB;
ALTER USER mastodon WITH ENCRYPTED PASSWORD 'pon tu contraseña para la base de datos entre estas comillas aquí';
ALTER DATABASE mastodon OWNER TO mastodon;
\q
Ahora ya podemos descargar Mastodon en sí, por lo que volvemos a entrar al usuario mastodon:
su - mastodon
git clone https://github.com/tootsuite/mastodon.git live && cd live
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
bundle config deployment 'true'
bundle config without 'development test'
(perdón, la sintaxis de markdown no me dejaba poner esto como código y lo puse en negrita)
bundle install -j$(getconf _NPROCESSORS_ONLN)
yarn install --pure-lockfile
RAILS_ENV=production bundle exec rake mastodon:setup
Aquí se te harán ahora una serie de preguntas, te diré qué debes contestar. Luego todo esto será importante tenerlo en cuenta en el archivo oculto que se creará con el nombre .env.production, por si alguna vez necesitas cambiar algo. Está dentro de /home/mastodon/live
- Domain name: aquí debes poner el dominio o subdominio que vas a usar con tu instancia Mastodon
- Enable single user mode: aquí debes elegir si tu instancia será unipersonal o si aceptarás otros usuarios para registrarse. Si es unipersonal activa esta opción.
- Are you using Docker to run Mastodon: en esta guía elige No.
- PostgreSQL host: 127.0.0.1
- PostgreSQL port: 5432
- PostgreSQL database: mastodon
- PostgreSQL user: mastodon
- PostgreSQL user password: aquí pon la contraseña de la base de datos que creaste en un punto anterior cuando pusimos los comandos en la base de datos.
- Redis host: 127.0.0.1
- Redis port: 6379
- Redis password: dale solo al Enter
- Do you want to store uploaded files on the cloud? elige YES en el caso de querer alojar los archivos en un servidor externo, pero si eres usuario normal mejor tenerlos en el mismo servidor VPS y entonces elige ahora NO.
- Do you want to send emails from localhost? Elige YES si tienes un servidor de email en tu VPS o vas a usar un SMTP relay. Elige NO si vas a introducir tus credenciales de acceso al servidor SMTP. Yo no uso en mi instancia personal el envío de emails, por lo que elegí YES y luego no puse nada más, ni hice prueba posterior. Si vas a crear una instancia y vas a enviar solo enlaces de invitación a cada persona, pues no necesitas esto normalmente. Como veas mejor.
- E-mail address to send e-mails “from”: Si quieres puedes dar a Enter para utilizar la dirección de correo electrónico del remitente por defecto.
- Send a test e-mail with this configuration right now? Si quieres elige YES para probar. Pero si no configuraste nada puedes decirle que NO.
- Send test e-mail to: introduce el email de prueba en el caso de querer probar.
- Save configuration? Elige Yes.
Te dirá que se escribirá todo en el archivo .env.production como te dije anteriormente.
A las demás preguntas de configuración responde siempre YES o Y.
Y empezará la compilación de Mastodon.
Te preguntará al final si quieres crear una cuenta de administrador, pones el nombre o nick de dicha cuenta y te dará una contraseña: NO OLVIDES APUNTAR ESTA CONTRASEÑA EN OTRO LUGAR QUE LA NECESITARÁS LUEGO, aunque si no lo hiciste siempre hay forma de conseguir otra más adelante.
Ahora salimos ya del usuario mastodon, volviendo a root:
exit
Ahora vamos a poner en marcha el servidor web nginx con lo necesario.
cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon
Edita el archivo creado como mastodon en nginx para cambiar el típico dominio de prueba example.com por el tuyo que usarás en mastodon. Dondequiera que diga example.com tu quita eso y cambialo por el tuyo. Cuidado con los márgenes y todo lo demás, que nginx es un poco quisquilloso:
nano /etc/nginx/sites-available/mastodon
Aparte, busca estas líneas en dicho archivo:
# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
Y CAMBIALAS POR ESTAS OTRAS:
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
Si nunca usaste nano, para guardar usa Control-O y para salir Control-X. Así que haz estos pasos ahora y listo.
Creamos un archivo caché:
mkdir -p /var/nginx/cache/
y probamos que nginx ha aceptado esto, que será seguramente que sí:
nginx -t
Si da todo correcto reiniciamos el servicio:
systemctl reload nginx
Bueno, ahora vamos al certificado SSL para que la web tenga https.
certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email pontuemail -d ponaquítudominio
Si todo fue bien te dirá que felicidades, que el certificado ha sido creado satisfactoriamente.
Tan solo nos queda ahora crear un servicio de inicio, o para cuando reinicies el servidor, que arranque tu Mastodon:
cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/
Y lo cargamos y activamos:
systemctl daemon-reload
systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming
Reiniciamos también nginx:
systemctl reload nginx
Y LISTO. Ya debes tener en funcionamiento tu instancia de Mastodon. Igual puede tardarte un poco en cargar debido a tus DNS, si es así prueba con otro dispositivo, sobre todo si usas una VPN y las DNS tardan en cambiar.
Si tienes algún error siempre puedes revisar con:
journalctl -eu mastodon-web
journalctl -eu mastodon-sidekiq
journalctl -eu mastodon-streaming
¿Recuerdas que te remarqué que anotaras en otro lugar la contraseña de administrador que te dio anteriormente?. Pues ahora, para entrar en tu instancia recién creada la vas a necesitar.
Te toca poner en un navegador tu dominio y loguearte con tu nick de administrador y la contraseña que te dieron.
NO OLVIDES CAMBIAR ESTA CONTRASEÑA POR OTRA TUYA PROPIA.
Algunos enlaces que te ayudarán para ver el archivo de configuración y para manejarte con el terminal dentro de tu servidor para hacer algunos cambios:
Para el .env.production: Archivo de configuración
Para comandos de terminal: Comandos de terminal en servidor
Como ejemplo, imagina que no apuntaste la contraseña de admin anterior. Pues siempre puedes entrar a tu VPS y crear otra para poder entrar a tu nueva instancia.
Vas a /home/mastodon/live/bin y pones este comando (cambia el usuario admin por el nick que usaste para tu cuenta de administrador):
RAILS_ENV=production ./tootctl accounts modify admin --reset-password
Para borrar espacio en vuestra instancia más adelante:
Entrais en /home/mastodon/live/bin y ejecutais estos comandos:
RAILS_ENV=production ./tootctl media remove
RAILS_ENV=production ./tootctl preview_cards remove
RAILS_ENV=production ./tootctl cache clear
Hay otros comandos para borrar aún más pero los principales que os ahorrarán mucho espacio y que podeis ejecutar de vez en cuando son estos que os puse.
AÑADIR MÁS CARACTERES
Añado también a la guía cómo poder tener aún más caracteres disponibles para publicar. Por defecto son 500 pero puede ampliarse de esta forma que compartió en Mastodon Ismael (@ismaelse95@unlimit3z.online):
Entrar como root y pasar a usuario mastodon:
su - mastodon
Editar 3 ficheros, el primero de ellos es el siguiente, donde vamos a buscar el número 500 (en este fichero lo encontraremos 2 veces). Cambiamos ambos 500 por el númemo que queramos:
nano live/app/javascript/mastodon/features/compose/components/compose_form.js
En el siguiente fichero hay que buscar y reemplazar solo 1 vez el número 500:
nano live/app/validators/status_length_validator.rb
Y en el último editamos este fichero:
nano live/app/serializers/rest/instance_serializer.rb
En él hay que buscar esta línea:
attributes :domain, :title, :version, :source_url, :description,
:usage, :thumbnail, :languages, :configuration,
:registrations
Y añadirle al final, tras registrations esta línea:
,:max_toot_chars
(fíjate en la coma del principio)
Y ahora, al final del todo de este archivo, se añaden estas líneas. Donde dice "tuvaloraqui" debes poner el número de caracteres. Guarda el orden de tabulación en las líneas tal como están en dicho archivo más arriba:
🔹def max_toot_chars
tuvaloraqui
end🔹
Ya solo queda compilar y reiniciar los procesos de Mastodon. Entramos dentro de live (estaríamos en /home/mastodon/live):
cd live
RAILS_ENV=production bundle exec rails assets:precompile
Si te diera fallo de compilación debes borrar las cachés, parar Mastodon e intentarlo de nuevo, por lo que tendrás que seguir estos pasos:
RAILS_ENV=production bundle exec rake tmp:cache:clear
Porque si repites el comando sin ponerle éste último, lo que va a ocurrir es que te dirá que todo ok, pero NO, no habrá hecho nada y vuestra instancia no arrancará al terminar.
Seguramente si os dio error al compilar os lo volverá a dar. Con 4GB de RAM a mi no me dio problema, pero en un servidor de pruebas que tengo con 2 GB de RAM sí.
¿Qué solución encontré?: parar la instancia para ahorrar recursos antes de ejecutar el comando.
Así que si te da ese error de compilación haz esto:
exit
(para salir a root de nuevo)systemctl stop --now mastodon-web mastodon-sidekiq mastodon-streaming
(para parar la instancia y sus procesos)su - mastodon
(para volver de nuevo al usuario mastodon)cd live
Y luego repite de nuevo el comando:
RAILS_ENV=production bundle exec rails assets:precompile
Espero que ahora sí te funcione.
Si ya te funcionó, seguimos:
exit
systemctl restart --now mastodon-web mastodon-sidekiq mastodon-streaming
FIN