forked from val-lop20/Pagina-de-Asistencia-MAC
Eliminar 'GUIA_PRODUCCION.md'
This commit is contained in:
@@ -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=<GENERAR_CLAVE_NUEVA_SEGURA>
|
||||
ALLOWED_HOSTS=132.248.80.77,tu-dominio.com
|
||||
|
||||
# Base de Datos
|
||||
DB_NAME=mac_attendance
|
||||
DB_USER=mac_user
|
||||
DB_PASSWORD=<CONTRASEÑA_SEGURA_AQUÍ>
|
||||
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! 🚀**
|
||||
Reference in New Issue
Block a user