diff --git a/GUIA_PRODUCCION.md b/GUIA_PRODUCCION.md deleted file mode 100644 index fddaab1..0000000 --- a/GUIA_PRODUCCION.md +++ /dev/null @@ -1,403 +0,0 @@ -# Guía para Poner en Producción - -Esta guía te ayudará a desplegar el sistema en un servidor de producción cuando tengas acceso. - -## 📋 Checklist Pre-Producción - -Antes de desplegar en producción, asegúrate de tener: - -- [ ] Acceso al servidor de producción (IP: 132.248.80.77 según configuración) -- [ ] Docker y Docker Compose instalados en el servidor -- [ ] Certificados SSL válidos (o configurar Let's Encrypt) -- [ ] Dominio configurado (opcional, puedes usar solo IP) -- [ ] Credenciales de producción seguras preparadas -- [ ] Backup de los datos actuales (si hay) - -## 🚀 Pasos para Desplegar en Producción - -### 1. Preparar el Servidor - -```bash -# Conectarse al servidor (SSH) -ssh usuario@132.248.80.77 - -# Actualizar el sistema -sudo apt update && sudo apt upgrade -y - -# Instalar Docker (si no está instalado) -curl -fsSL https://get.docker.com -o get-docker.sh -sudo sh get-docker.sh - -# Instalar Docker Compose -sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose -sudo chmod +x /usr/local/bin/docker-compose - -# Verificar instalación -docker --version -docker-compose --version -``` - -### 2. Clonar el Repositorio - -```bash -# Clonar en el servidor -cd /opt # o el directorio que prefieras -sudo git clone https://github.com/val20-11/Pagina-de-Asistencia-MAC.git -cd Pagina-de-Asistencia-MAC -``` - -### 3. Configurar Variables de Entorno de Producción - -```bash -# Copiar el template -cp .env.production.example .env.production - -# Editar con tus credenciales SEGURAS -nano .env.production -``` - -**IMPORTANTE:** Configura estas variables en `.env.production`: - -```env -# Django -DEBUG=False -SECRET_KEY= -ALLOWED_HOSTS=132.248.80.77,tu-dominio.com - -# Base de Datos -DB_NAME=mac_attendance -DB_USER=mac_user -DB_PASSWORD= -DB_HOST=db -DB_PORT=5432 - -# CORS (solo HTTPS en producción) -CORS_ALLOWED_ORIGINS=https://132.248.80.77,https://tu-dominio.com - -# Security -CSRF_TRUSTED_ORIGINS=https://132.248.80.77,https://tu-dominio.com -SECURE_SSL_REDIRECT=True -``` - -**Generar SECRET_KEY segura:** -```bash -docker run --rm python:3.11-slim python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())" -``` - -**Generar contraseña segura de BD:** -```bash -openssl rand -base64 32 -``` - -### 4. Configurar Certificados SSL - -#### Opción A: Certificados Autofirmados (para pruebas) - -Los certificados autofirmados ya están configurados en `docker/ssl/README.md`. - -#### Opción B: Let's Encrypt (Recomendado para producción) - -```bash -# Instalar certbot -sudo apt install certbot - -# Generar certificados (necesitas un dominio) -sudo certbot certonly --standalone -d tu-dominio.com - -# Los certificados estarán en: -# /etc/letsencrypt/live/tu-dominio.com/fullchain.pem -# /etc/letsencrypt/live/tu-dominio.com/privkey.pem - -# Copiar a la ubicación de Docker -sudo cp /etc/letsencrypt/live/tu-dominio.com/fullchain.pem docker/ssl/server.crt -sudo cp /etc/letsencrypt/live/tu-dominio.com/privkey.pem docker/ssl/server.key -sudo chmod 644 docker/ssl/server.crt -sudo chmod 600 docker/ssl/server.key -``` - -**Renovación automática:** -```bash -# Crear script de renovación -sudo crontab -e - -# Agregar (renueva cada 2 meses, los certificados duran 3 meses): -0 0 1 */2 * certbot renew --quiet && cp /etc/letsencrypt/live/tu-dominio.com/fullchain.pem /opt/Pagina-de-Asistencia-MAC/docker/ssl/server.crt && cp /etc/letsencrypt/live/tu-dominio.com/privkey.pem /opt/Pagina-de-Asistencia-MAC/docker/ssl/server.key && docker-compose -f /opt/Pagina-de-Asistencia-MAC/docker-compose.yml restart nginx -``` - -### 5. Construir e Iniciar Contenedores - -```bash -# Construir imágenes -docker-compose build - -# Iniciar en segundo plano -docker-compose up -d - -# Ver logs -docker-compose logs -f -``` - -### 6. Verificar que Todo Funciona - -```bash -# Ver estado de contenedores -docker-compose ps - -# Verificar logs del backend -docker-compose logs backend | tail -50 - -# Verificar que la base de datos esté saludable -docker-compose exec db pg_isready -U mac_user -d mac_attendance -``` - -### 7. Verificar Usuarios Creados - -```bash -# Listar usuarios creados -docker-compose exec backend python manage.py shell -c "from django.contrib.auth.models import User; [print(f'{u.username} - Superuser: {u.is_superuser}') for u in User.objects.all()]" -``` - -Si los fixtures se cargaron correctamente, verás tu superusuario "Admin" y otros usuarios. - -### 8. Acceder al Sistema - -Abre tu navegador y ve a: -- **Aplicación:** https://132.248.80.77 (o https://tu-dominio.com) -- **Admin:** https://132.248.80.77/admin - -## 🔒 Seguridad Post-Despliegue - -### Cambiar Contraseñas - -**IMPORTANTE:** Si estás usando los fixtures con contraseñas de desarrollo, cámbialas: - -```bash -# Cambiar contraseña del superusuario -docker-compose exec backend python manage.py changepassword Admin - -# O crear un nuevo superusuario -docker-compose exec backend python manage.py createsuperuser -``` - -### Configurar Firewall - -```bash -# Permitir solo puertos necesarios -sudo ufw allow 22/tcp # SSH -sudo ufw allow 443/tcp # HTTPS -sudo ufw enable - -# Verificar -sudo ufw status -``` - -### Configurar Fail2Ban (Protección contra fuerza bruta) - -```bash -# Instalar fail2ban -sudo apt install fail2ban - -# Configurar (opcional, para proteger SSH y Django) -sudo systemctl enable fail2ban -sudo systemctl start fail2ban -``` - -## 📊 Backups en Producción - -### Backup Manual - -```bash -# Crear backup de la base de datos -docker-compose exec db pg_dump -U mac_user mac_attendance > backup_$(date +%Y%m%d_%H%M%S).sql - -# Guardar en un lugar seguro (S3, Google Drive, etc.) -``` - -### Backup Automático Diario - -```bash -# Crear script de backup -sudo nano /opt/backup_mac.sh -``` - -Contenido del script: -```bash -#!/bin/bash -BACKUP_DIR="/opt/backups" -DATE=$(date +%Y%m%d_%H%M%S) -mkdir -p $BACKUP_DIR - -docker-compose -f /opt/Pagina-de-Asistencia-MAC/docker-compose.yml exec -T db pg_dump -U mac_user mac_attendance > $BACKUP_DIR/backup_$DATE.sql - -# Mantener solo los últimos 30 días -find $BACKUP_DIR -name "backup_*.sql" -mtime +30 -delete - -echo "Backup completado: backup_$DATE.sql" -``` - -```bash -# Hacer ejecutable -sudo chmod +x /opt/backup_mac.sh - -# Agregar a crontab (diario a las 2 AM) -sudo crontab -e -# Agregar: -0 2 * * * /opt/backup_mac.sh -``` - -## 🔄 Actualizar el Sistema en Producción - -Cuando hay cambios en el código: - -```bash -# 1. Hacer backup -docker-compose exec db pg_dump -U mac_user mac_attendance > backup_pre_update.sql - -# 2. Detener servicios -docker-compose down - -# 3. Actualizar código -git pull origin main - -# 4. Reconstruir imágenes -docker-compose build - -# 5. Iniciar servicios -docker-compose up -d - -# 6. Verificar logs -docker-compose logs -f -``` - -## 📈 Monitoreo - -### Ver Logs en Tiempo Real - -```bash -# Todos los servicios -docker-compose logs -f - -# Solo backend -docker-compose logs -f backend - -# Solo nginx -docker-compose logs -f nginx - -# Solo BD -docker-compose logs -f db -``` - -### Estadísticas de Uso - -```bash -# Uso de recursos -docker stats - -# Espacio en disco -df -h -docker system df -``` - -## 🚨 Problemas Comunes - -### "502 Bad Gateway" -```bash -# Verificar que el backend esté corriendo -docker-compose ps backend - -# Ver logs del backend -docker-compose logs backend - -# Reiniciar backend -docker-compose restart backend -``` - -### "Base de datos no conecta" -```bash -# Verificar salud de la BD -docker-compose exec db pg_isready - -# Ver logs -docker-compose logs db - -# Verificar credenciales en .env.production -``` - -### "Certificado SSL inválido" -```bash -# Verificar que los archivos existen -ls -la docker/ssl/ - -# Verificar permisos -chmod 644 docker/ssl/server.crt -chmod 600 docker/ssl/server.key - -# Reiniciar nginx -docker-compose restart nginx -``` - -## 📞 Mantenimiento - -### Limpieza Regular - -```bash -# Limpiar imágenes no usadas (mensual) -docker system prune -a - -# Limpiar volúmenes huérfanos -docker volume prune -``` - -### Actualizar Dependencias - -```bash -# Actualizar imágenes base -docker-compose pull -docker-compose build --no-cache -docker-compose up -d -``` - -## 📝 Checklist Post-Despliegue - -- [ ] Sistema accesible via HTTPS -- [ ] Certificados SSL válidos -- [ ] Usuarios pueden iniciar sesión -- [ ] Contraseñas de desarrollo cambiadas -- [ ] Firewall configurado -- [ ] Backups automáticos configurados -- [ ] Monitoreo funcionando -- [ ] Logs revisados (sin errores críticos) -- [ ] Documentación actualizada -- [ ] Equipo notificado de la URL de producción - ---- - -## 🎯 Resumen: Comandos Rápidos para Producción - -```bash -# Iniciar -docker-compose up -d - -# Detener -docker-compose down - -# Reiniciar -docker-compose restart - -# Ver logs -docker-compose logs -f - -# Backup -docker-compose exec db pg_dump -U mac_user mac_attendance > backup.sql - -# Actualizar -git pull && docker-compose build && docker-compose up -d - -# Estado del sistema -docker-compose ps -docker stats -``` - ---- - -**¡El sistema está listo para producción cuando tengas acceso al servidor! 🚀**