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
  • Comunidad: Fomentar una atmósfera saludable requiere dedicación constante

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

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

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

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;"

Instalar Mastodon

# Crear usuario mastodon
sudo useradd -m -s /bin/bash mastodon

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

# Instalar rbenv y Ruby
sudo -u mastodon git clone https://github.com/rbenv/rbenv.git ~/.rbenv
sudo -u mastodon git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
sudo -u mastodon ~/.rbenv/bin/rbenv install 3.0.4
sudo -u mastodon ~/.rbenv/bin/rbenv global 3.0.4

# Instalar bundler
sudo -u mastodon ~/.rbenv/shims/gem install bundler

# Instalar dependencias
sudo -u mastodon bundle config deployment 'true'
sudo -u mastodon bundle config without 'development test'
sudo -u mastodon 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
sudo -u mastodon yarn install --pure-lockfile
sudo -u mastodon RAILS_ENV=production bundle exec rails assets:precompile

Configuración detallada

Configuración básica

# Generar configuración interactiva
sudo -u mastodon RAILS_ENV=production bundle exec rake mastodon:setup

# O editar manualmente
sudo -u mastodon cp .env.production.sample .env.production
sudo -u mastodon nano .env.production

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 almacenamiento de medios

Para instancias con muchos usuarios, es recomendable usar almacenamiento de objetos:

# Configuración para S3-compatible (ej: Wasabi, Backblaze B2)
S3_ENABLED=true
S3_BUCKET=tu-bucket
S3_REGION=eu-central-1
S3_PROTOCOL=https
S3_HOSTNAME=s3.wasabisys.com
AWS_ACCESS_KEY_ID=tu_access_key
AWS_SECRET_ACCESS_KEY=tu_secret_key

Puesta en marcha

# Migrar base de datos
sudo -u mastodon RAILS_ENV=production bundle exec rails db:migrate

# Crear usuario administrador
sudo -u mastodon RAILS_ENV=production bin/tootctl accounts create \
  admin \
  --email admin@tudominio.com \
  --confirmed \
  --role Owner

# Configurar servicios systemd
sudo cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/
sudo systemctl daemon-reload
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

# Editar para tu dominio
sudo nano /etc/nginx/sites-available/mastodon
# Reemplazar example.com con tu dominio

# 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
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

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

# Recargar configuración
sudo systemctl daemon-reload
sudo systemctl restart mastodon-sidekiq

Caché de medios con CDN

Usar un CDN como Cloudflare puede mejorar significativamente el rendimiento:

  • Configura tu dominio en Cloudflare
  • Habilita el caché para medios estáticos
  • Activa HTTP/2 y Brotli compression
  • Considera usar Page Rules para optimizar el caché

Mantenimiento regular

Actualización de Mastodon

# Detener servicios
sudo systemctl stop mastodon-*

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

# Actualizar dependencias
sudo -u mastodon bundle install
sudo -u mastodon yarn install --pure-lockfile

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

# Limpiar caché
sudo -u mastodon RAILS_ENV=production bin/tootctl cache clear

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

Copias de seguridad automatizadas

# Script de backup completo (/usr/local/bin/mastodon-backup.sh)
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/mastodon"
mkdir -p $BACKUP_DIR

# Backup de PostgreSQL
sudo -u postgres pg_dump -Fc mastodon_production > $BACKUP_DIR/mastodon_db_$DATE.dump

# Backup de archivos importantes
tar -czf $BACKUP_DIR/mastodon_config_$DATE.tar.gz \
    /home/mastodon/live/.env.production \
    /etc/nginx/sites-available/mastodon

# Backup de medios (si no usas S3)
tar -czf $BACKUP_DIR/mastodon_media_$DATE.tar.gz \
    /home/mastodon/live/public/system

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

# Hacer chmod ejecutable
# sudo chmod +x /usr/local/bin/mastodon-backup.sh

# Programar con cron (diario a las 2 AM)
# 0 2 * * * /usr/local/bin/mastodon-backup.sh

Limpieza de medios antiguos

# Eliminar archivos de medios antiguos (>30 días)
sudo -u mastodon RAILS_ENV=production bin/tootctl media remove --days=30

# Eliminar vistas previas de enlaces antiguos
sudo -u mastodon RAILS_ENV=production bin/tootctl preview_cards remove --days=30

# Programar limpieza semanal con cron
# 0 3 * * 0 cd /home/mastodon/live && RAILS_ENV=production bin/tootctl media remove --days=30

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 de Sidekiq
journalctl -u mastodon-sidekiq -f

# Verificar estado de la cola
sudo -u mastodon RAILS_ENV=production bin/tootctl accounts rotate mastodon

# Reiniciar trabajos atascados
sudo systemctl restart mastodon-sidekiq

Rendimiento lento

Síntoma: La instancia responde lentamente

# Verificar uso de recursos
htop
iotop

# Optimizar PostgreSQL
sudo nano /etc/postgresql/13/main/postgresql.conf
# Ajustar según RAM disponible:
# shared_buffers = 25% de RAM total
# effective_cache_size = 75% de RAM total
# work_mem = (RAM total / max_connections) / 2

# Reiniciar PostgreSQL
sudo systemctl restart postgresql

# Verificar índices de base de datos
sudo -u mastodon RAILS_ENV=production bundle exec rails db:migrate:status

Problemas de correo electrónico

Síntoma: Los usuarios no reciben correos de confirmación

# Verificar configuración SMTP
sudo -u mastodon RAILS_ENV=production bundle exec rails console
# Ejecutar: ActionMailer::Base.smtp_settings

# Probar envío de correo
Notification.last.to_notification_request.account.user.send_confirmation_instructions

# Revisar logs
tail -f /home/mastodon/live/log/production.log | grep -i mail

Comandos útiles de administración

# Ver estadísticas de la instancia
sudo -u mastodon RAILS_ENV=production bin/tootctl accounts approve --all

# Dar rol de moderador a un usuario
sudo -u mastodon RAILS_ENV=production bin/tootctl accounts modify username --role Moderator

# Ver usuarios pendientes de aprobación
sudo -u mastodon RAILS_ENV=production bin/tootctl accounts approve --all

# Verificar integridad de archivos
sudo -u mastodon RAILS_ENV=production bin/tootctl media refresh

# Ver versión de Mastodon
sudo -u mastodon RAILS_ENV=production bin/tootctl version

Configuración de moderación

Configurar reglas de la instancia

Accede al panel de administración en https://tudominio.com/admin/settings/edit y configura:

  • Reglas del servidor: Define claramente qué comportamientos están permitidos y prohibidos
  • Política de privacidad: Explica qué datos recopilas y cómo los usas
  • Términos de servicio: Establece las condiciones de uso
  • Registro: Decide si requieres aprobación manual o es abierto

Herramientas de moderación

# Suspender una cuenta
sudo -u mastodon RAILS_ENV=production bin/tootctl accounts delete username

# Silenciar un dominio completo
sudo -u mastodon RAILS_ENV=production bin/tootctl domains crawl --concurrency=10

# Ver lista de instancias bloqueadas
https://tudominio.com/admin/instances

Monitoreo y análisis

Configurar monitoreo básico

# Instalar herramientas de monitoreo
sudo apt install -y prometheus grafana

# Configurar Prometheus para Mastodon
sudo nano /etc/prometheus/prometheus.yml
# Añadir:
# - job_name: 'mastodon'
#   static_configs:
#   - targets: ['localhost:3000']

# Habilitar servicios
sudo systemctl enable prometheus grafana-server
sudo systemctl start prometheus grafana-server

# Acceder a Grafana en http://tudominio:3000

Métricas importantes a monitorear

  • Uso de CPU y RAM: Mantener por debajo del 80%
  • Espacio en disco: Alertar cuando quede menos del 20%
  • Cola de Sidekiq: Debe procesarse en <5 minutos
  • Tiempo de respuesta: Mantener por debajo de 1 segundo
  • Tasa de error: Debe ser <1%

Recursos adicionales

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.

Felicidades

Tu instancia de Mastodon está ahora en funcionamiento. Recuerda que administrar una instancia es un compromiso continuo que requiere:

  • Mantener el software actualizado con las últimas versiones de seguridad
  • Monitorear el rendimiento y escalabilidad según crezca tu comunidad
  • Moderar activamente para mantener un ambiente saludable
  • Comunicarte regularmente con tu comunidad sobre cambios y políticas
  • Participar en la red federada de manera responsable

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