Guía Completa para Crear una Instancia de Mastodon

🐘 Guía Completa para Crear una Instancia de Mastodon

Convierte tu idea en una comunidad federada y descentralizada con control total.

📌 Introducción

Mastodon es una plataforma de redes sociales descentralizada que utiliza el protocolo ActivityPub. Crear tu propia instancia te permite:

  • ✔ Establecer tus propias reglas de comunidad y políticas de moderación
  • ✔ Controlar completamente los datos de tus usuarios
  • ✔ Personalizar la experiencia para tu comunidad específica
  • ✔ Contribuir a un Internet más diverso y resistente

🤔 Consideraciones antes de comenzar

  • 🔹 Responsabilidad: Administrar una instancia requiere tiempo y conocimientos técnicos
  • 🔹 Costos: Necesitarás un servidor con recursos adecuados (desde $10/mes)
  • 🔹 Mantenimiento: Actualizaciones de seguridad y soporte a usuarios
  • 🔹 Moderación: Deberás establecer políticas claras y hacerlas cumplir

🌟 Beneficios de tener tu propia instancia

  • Independencia total: Sin censura ni cambios impuestos por terceros
  • Privacidad garantizada: Controlas qué datos se recopilan y cómo se usan
  • Personalización completa: Desde el diseño hasta las funcionalidades
  • Comunidad a tu medida: Puedes enfocarte en intereses específicos
  • Federación flexible: Decides con qué otras instancias conectarte

🛠️ Requisitos técnicos

Componente Mínimo Recomendado Notas
Sistema operativo Debian 11 Ubuntu 22.04 LTS Mejor soporte y documentación
CPU 2 vCPU 4 vCPU Para instancias con >1000 usuarios
RAM 4 GB 8 GB +2GB por cada 1000 usuarios activos
Almacenamiento 50 GB SSD 100 GB SSD + backup Depende del número de medios compartidos
Ancho de banda 1 TB/mes 5 TB/mes Para instancias medianas (~500 usuarios)
Software PostgreSQL 13+, Redis 6+, Node.js 16+, Ruby 3.0+, Nginx

🔍 Elegir un proveedor de hosting

Opciones recomendadas para alojar tu instancia sin depender de las grandes corporaciones:

  • 🌍 Proveedores independientes: OVH, Hetzner, 1984 Hosting — ofrecen buen rendimiento y precios accesibles desde ~5€/mes
  • 🛠️ Servidores autogestionados: Si cuentas con conexión estable y algo de experiencia técnica, puedes alojarlo en tu propio equipo para tener control total
  • 🧪 Alternativas éticas: Investiga proveedores locales o cooperativos que apuesten por la privacidad, el software libre y la descentralización

🚀 Instalación paso a paso

1️⃣ Preparación del sistema

# Actualizar sistema
sudo apt update && sudo apt upgrade -y

# Instalar dependencias básicas
sudo apt install -y curl wget git ufw software-properties-common

# Configurar firewall (UFW)
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable

2️⃣ Instalar dependencias principales

# Base de datos y caché
sudo apt install -y postgresql postgresql-contrib redis-server

# Servidor web
sudo apt install -y nginx

# Certificados SSL
sudo apt install -y certbot python3-certbot-nginx

# Dependencias de Ruby
sudo apt install -y autoconf bison build-essential libssl-dev libyaml-dev \
libreadline-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev

3️⃣ Configurar PostgreSQL

# Crear usuario y base de datos
sudo -u postgres psql -c "CREATE USER mastodon CREATEDB;"
sudo -u postgres psql -c "ALTER USER mastodon WITH PASSWORD 'tu_contraseña_segura';"
sudo -u postgres psql -c "CREATE DATABASE mastodon_production OWNER mastodon;"

4️⃣ Instalar Mastodon

# Clonar repositorio
git clone https://github.com/mastodon/mastodon.git
cd mastodon
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

# Instalar dependencias
bundle config deployment 'true'
bundle config without 'development test'
bundle install -j$(getconf _NPROCESSORS_ONLN)

# Instalar Node.js y Yarn
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs
sudo npm install -g yarn

# Compilar assets
yarn install --pure-lockfile
RAILS_ENV=production bundle exec rails assets:precompile

🔧 Configuración detallada

🏠 Configuración básica

# Editar archivo de configuración
nano .env.production

# Configuración mínima requerida
LOCAL_DOMAIN=mastodon.tudominio.com
WEB_DOMAIN=mastodon.tudominio.com
SECRET_KEY_BASE=$(rake secret)
OTP_SECRET=$(rake secret)
VAPID_PRIVATE_KEY=$(rake mastodon:webpush:generate_vapid_key | grep 'Private key' | awk '{print $3}')
VAPID_PUBLIC_KEY=$(rake mastodon:webpush:generate_vapid_key | grep 'Public key' | awk '{print $3}')

🛢 Configuración de base de datos

DB_HOST=/var/run/postgresql
DB_USER=mastodon
DB_NAME=mastodon_production
DB_PASS=tu_contraseña_segura
DB_PORT=5432

✉ Configuración de correo electrónico

# Ejemplo para Mailgun
SMTP_SERVER=smtp.mailgun.org
SMTP_PORT=587
SMTP_LOGIN=postmaster@tudominio.com
SMTP_PASSWORD=tu_contraseña
SMTP_FROM_ADDRESS=Mastodon <notificaciones@tudominio.com>
SMTP_AUTH_METHOD=plain
SMTP_OPENSSL_VERIFY_MODE=none

🔗 Configuración de federación

# Limitar federación si es necesario
LIMITED_FEDERATION_MODE=false
WHITELIST_MODE=false

# Configuración de búsqueda
ES_ENABLED=false
ES_HOST=localhost
ES_PORT=9200

🚀 Puesta en marcha

# Migrar base de datos
RAILS_ENV=production bundle exec rails db:migrate

# Crear usuario administrador
RAILS_ENV=production bundle exec rails mastodon:setup

# Configurar servicios systemd
sudo cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/
sudo systemctl enable mastodon-web mastodon-sidekiq mastodon-streaming
sudo systemctl start mastodon-web mastodon-sidekiq mastodon-streaming

🌐 Configurar Nginx y SSL

# Copiar configuración de Nginx
sudo cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
sudo ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon

# Obtener certificado SSL
sudo certbot --nginx -d mastodon.tudominio.com

# Reiniciar Nginx
sudo systemctl restart nginx

🔐 Seguridad avanzada

🛡️ Protección básica

# Actualizaciones automáticas de seguridad
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

# Configurar fail2ban para protección contra ataques
sudo apt install -y fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

🔒 Hardening de PostgreSQL

# Editar pg_hba.conf
sudo nano /etc/postgresql/13/main/pg_hba.conf

# Asegurar conexiones (añadir al final)
hostssl mastodon_production mastodon 127.0.0.1/32 scram-sha-256

# Reiniciar PostgreSQL
sudo systemctl restart postgresql

⚙️ Optimización del rendimiento

🚀 Ajustes para Sidekiq

# Editar servicio sidekiq
sudo nano /etc/systemd/system/mastodon-sidekiq.service

# Ajustar parámetros (ejemplo para 4GB RAM)
Environment="DB_POOL=25"
Environment="MALLOC_ARENA_MAX=2"
ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 25

📈 Monitoreo con Prometheus

# Instalar Prometheus y Grafana
sudo apt install -y prometheus grafana

# Configurar para monitorear Mastodon
sudo systemctl enable prometheus grafana-server
sudo systemctl start prometheus grafana-server

🔄 Mantenimiento regular

🛠️ Actualización de Mastodon

# Detener servicios
sudo systemctl stop mastodon-*

# Actualizar código
cd /home/mastodon/live
git fetch --tags
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

# Actualizar dependencias
bundle install
yarn install --pure-lockfile

# Migrar base de datos y compilar assets
RAILS_ENV=production bundle exec rails db:migrate
RAILS_ENV=production bundle exec rails assets:precompile

# Reiniciar servicios
sudo systemctl start mastodon-web mastodon-sidekiq mastodon-streaming

💾 Copias de seguridad

# Script de backup completo
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backups/mastodon"
mkdir -p $BACKUP_DIR

# Backup de PostgreSQL
pg_dump -U mastodon -Fc mastodon_production > $BACKUP_DIR/mastodon_db_$DATE.dump

# Backup de archivos importantes
tar -czvf $BACKUP_DIR/mastodon_files_$DATE.tar.gz \
    /home/mastodon/live/.env.production \
    /home/mastodon/live/public/system

# Rotar backups antiguos (mantener 30 días)
find $BACKUP_DIR -type f -mtime +30 -delete

🆘 Solución de problemas comunes

🔍 Problemas de federación

Síntoma: Tu instancia no se comunica con otras

# Verificar conectividad
curl -v https://mastodon.social/.well-known/nodeinfo

# Revisar logs
journalctl -u mastodon-sidekiq -f

🐌 Rendimiento lento

Solución: Optimizar configuración

# Aumentar memoria para Sidekiq
sudo nano /etc/systemd/system/mastodon-sidekiq.service
# Añadir: Environment="MALLOC_ARENA_MAX=2"

# Optimizar PostgreSQL
sudo nano /etc/postgresql/13/main/postgresql.conf
# Ajustar: shared_buffers = 1GB (para 4GB RAM)
# effective_cache_size = 3GB

📚 Recursos adicionales

🎉 ¡Felicidades!

Tu instancia de Mastodon está ahora en funcionamiento en https://mastodon.tudominio.com.

Recuerda que administrar una instancia es un compromiso continuo. Mantén tu software actualizado, monitorea el rendimiento y cultiva una comunidad saludable.

📢 Comparte tu instancia

🐘 **¡Nueva instancia de Mastodon!** Acabo de lanzar mi propia instancia federada. Únete a [nombre de tu comunidad] en [enlace a tu instancia]. ¡Autonomía, privacidad y comunidad! #Fediverso #Mastodon #Descentralización

📄 Descargar esta guía

📄 Descargar PDF

Nota importante: Esta guía proporciona una base sólida, pero Mastodon se actualiza constantemente. Para obtener información completa y actualizada, consulta siempre la documentación oficial de Mastodon.