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
- Documentación oficial de instalación
- Guía de instalación en GitHub
- Foro de administradores de Mastodon
- Pacto de administradores de Mastodon
- Política de seguridad y reportes de vulnerabilidades
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