Files
social-media-automation/DEPLOY.md
Consultoría AS 85bda6abcf feat(phase-6): Complete testing and deployment setup
Testing:
- Add pytest configuration (pytest.ini)
- Add test fixtures (tests/conftest.py)
- Add ContentGenerator tests (13 tests)
- Add ContentScheduler tests (16 tests)
- Add PublisherManager tests (16 tests)
- All 45 tests passing

Production Docker:
- Add docker-compose.prod.yml with healthchecks, resource limits
- Add Dockerfile.prod with multi-stage build, non-root user
- Add nginx.prod.conf with SSL, rate limiting, security headers
- Add .env.prod.example template

Maintenance Scripts:
- Add backup.sh for database and media backups
- Add restore.sh for database restoration
- Add cleanup.sh for log rotation and Docker cleanup
- Add healthcheck.sh with Telegram alerts

Documentation:
- Add DEPLOY.md with complete deployment guide

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 02:12:34 +00:00

7.2 KiB

Deployment Guide

Social Media Automation System

Guía completa para desplegar el sistema en producción.


Requisitos del Sistema

Hardware Mínimo

  • CPU: 2 cores
  • RAM: 4GB
  • Disco: 20GB SSD
  • Red: Conexión estable a internet

Software

  • Docker 24.0+
  • Docker Compose 2.20+
  • Git

Puertos Requeridos

  • 80: HTTP (redirección a HTTPS)
  • 443: HTTPS (aplicación principal)

Instalación Rápida

# 1. Clonar repositorio
git clone https://git.consultoria-as.com/consultoria-as/social-media-automation.git
cd social-media-automation

# 2. Crear archivo de configuración
cp .env.prod.example .env.prod

# 3. Editar configuración
nano .env.prod

# 4. Generar certificados SSL (ver sección SSL)

# 5. Iniciar servicios
docker-compose -f docker-compose.prod.yml up -d

# 6. Verificar estado
docker-compose -f docker-compose.prod.yml ps

Configuración Detallada

Variables de Entorno (.env.prod)

Base de Datos

POSTGRES_USER=social_automation
POSTGRES_PASSWORD=<contraseña_segura>
POSTGRES_DB=social_automation

Aplicación

SECRET_KEY=<genera_con: openssl rand -hex 32>
ENVIRONMENT=production

APIs de Redes Sociales

X (Twitter)

  1. Ve a https://developer.twitter.com
  2. Crea una app con permisos de lectura/escritura
  3. Genera tokens de acceso
X_API_KEY=<api_key>
X_API_SECRET=<api_secret>
X_ACCESS_TOKEN=<access_token>
X_ACCESS_SECRET=<access_secret>
X_BEARER_TOKEN=<bearer_token>

Meta (Facebook, Instagram, Threads)

  1. Ve a https://developers.facebook.com
  2. Crea una app tipo "Business"
  3. Agrega productos: Facebook Login, Instagram Graph API
  4. Genera token de página con permisos:
    • pages_manage_posts
    • pages_read_engagement
    • instagram_basic
    • instagram_content_publish
META_ACCESS_TOKEN=<page_access_token>
FACEBOOK_PAGE_ID=<page_id>
INSTAGRAM_ACCOUNT_ID=<instagram_business_id>
THREADS_USER_ID=<threads_user_id>

DeepSeek API

  1. Ve a https://platform.deepseek.com
  2. Genera una API key
DEEPSEEK_API_KEY=<api_key>
DEEPSEEK_BASE_URL=https://api.deepseek.com

ImgBB (subida de imágenes)

  1. Ve a https://api.imgbb.com
  2. Genera una API key
IMGBB_API_KEY=<api_key>

Telegram (notificaciones)

  1. Habla con @BotFather en Telegram
  2. Crea un bot con /newbot
  3. Obtén el chat_id con @userinfobot
TELEGRAM_BOT_TOKEN=<bot_token>
TELEGRAM_CHAT_ID=<chat_id>

Certificados SSL

Opción 1: Let's Encrypt (Recomendado)

# Instalar certbot
apt install certbot

# Generar certificados
certbot certonly --standalone -d tu-dominio.com

# Copiar a nginx
cp /etc/letsencrypt/live/tu-dominio.com/fullchain.pem nginx/ssl/
cp /etc/letsencrypt/live/tu-dominio.com/privkey.pem nginx/ssl/

# Renovación automática (agregar a crontab)
0 0 1 * * certbot renew --quiet && docker-compose -f docker-compose.prod.yml restart nginx

Opción 2: Certificado Autofirmado (Solo desarrollo)

openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout nginx/ssl/privkey.pem \
  -out nginx/ssl/fullchain.pem \
  -subj "/CN=localhost"

Comandos Útiles

Gestión de Servicios

# Iniciar todos los servicios
docker-compose -f docker-compose.prod.yml up -d

# Detener todos los servicios
docker-compose -f docker-compose.prod.yml down

# Ver logs en tiempo real
docker-compose -f docker-compose.prod.yml logs -f

# Ver logs de un servicio específico
docker-compose -f docker-compose.prod.yml logs -f app

# Reiniciar un servicio
docker-compose -f docker-compose.prod.yml restart app

# Ver estado de los contenedores
docker-compose -f docker-compose.prod.yml ps

Base de Datos

# Ejecutar migraciones
docker-compose -f docker-compose.prod.yml exec app alembic upgrade head

# Acceder a PostgreSQL
docker exec -it social-automation-db psql -U social_automation

# Backup manual
./scripts/maintenance/backup.sh

# Restaurar backup
./scripts/maintenance/restore.sh backups/database/db_backup_YYYYMMDD.sql.gz

Celery

# Ver tareas activas
docker exec social-automation-flower celery -A app.worker.celery_app inspect active

# Ver tareas programadas
docker exec social-automation-flower celery -A app.worker.celery_app inspect scheduled

# Purgar cola
docker exec social-automation-worker celery -A app.worker.celery_app purge -f

Mantenimiento

Tareas Programadas (Crontab)

# Editar crontab
crontab -e

# Agregar las siguientes líneas:

# Backup diario a las 2 AM
0 2 * * * /ruta/al/proyecto/scripts/maintenance/backup.sh >> /var/log/backup.log 2>&1

# Limpieza semanal los domingos a las 3 AM
0 3 * * 0 /ruta/al/proyecto/scripts/maintenance/cleanup.sh >> /var/log/cleanup.log 2>&1

# Health check cada 5 minutos
*/5 * * * * /ruta/al/proyecto/scripts/maintenance/healthcheck.sh > /dev/null 2>&1

Actualizaciones

# 1. Hacer backup
./scripts/maintenance/backup.sh

# 2. Obtener cambios
git pull origin main

# 3. Reconstruir imágenes
docker-compose -f docker-compose.prod.yml build

# 4. Aplicar migraciones
docker-compose -f docker-compose.prod.yml exec app alembic upgrade head

# 5. Reiniciar servicios
docker-compose -f docker-compose.prod.yml up -d

# 6. Verificar
./scripts/maintenance/healthcheck.sh

Troubleshooting

La aplicación no inicia

# Ver logs detallados
docker-compose -f docker-compose.prod.yml logs app

# Verificar variables de entorno
docker-compose -f docker-compose.prod.yml exec app env | grep -E "(DATABASE|REDIS|SECRET)"

# Probar conexión a DB
docker exec social-automation-db pg_isready -U social_automation

Error de conexión a la base de datos

# Verificar que DB esté corriendo
docker ps | grep db

# Verificar health check
docker inspect social-automation-db | grep -A 10 Health

# Reiniciar DB
docker-compose -f docker-compose.prod.yml restart db

Worker no procesa tareas

# Ver estado del worker
docker-compose -f docker-compose.prod.yml logs worker

# Verificar Redis
docker exec social-automation-redis redis-cli ping

# Reiniciar worker y beat
docker-compose -f docker-compose.prod.yml restart worker beat

Error 502 Bad Gateway

# Verificar que app esté respondiendo
curl http://localhost:8000/api/health

# Ver logs de nginx
docker-compose -f docker-compose.prod.yml logs nginx

# Reiniciar nginx
docker-compose -f docker-compose.prod.yml restart nginx

Alto uso de disco

# Ejecutar limpieza
./scripts/maintenance/cleanup.sh

# Limpiar Docker
docker system prune -a --volumes

# Verificar tamaño de backups
du -sh backups/

Seguridad

Checklist de Producción

  • Cambiar todas las contraseñas por defecto
  • Generar SECRET_KEY único
  • Configurar certificados SSL válidos
  • Configurar firewall (solo puertos 80, 443)
  • Configurar backups automáticos
  • Configurar monitoreo y alertas
  • Habilitar autenticación en Flower

Firewall (UFW)

# Configurar firewall básico
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow 80
ufw allow 443
ufw enable

Soporte