Some checks are pending
CI Pipeline / changes (push) Waiting to run
CI Pipeline / core (push) Blocked by required conditions
CI Pipeline / trading-backend (push) Blocked by required conditions
CI Pipeline / trading-data-service (push) Blocked by required conditions
CI Pipeline / trading-frontend (push) Blocked by required conditions
CI Pipeline / erp-core (push) Blocked by required conditions
CI Pipeline / erp-mecanicas (push) Blocked by required conditions
CI Pipeline / gamilit-backend (push) Blocked by required conditions
CI Pipeline / gamilit-frontend (push) Blocked by required conditions
Backend: - Fix email verification and password recovery services - Fix exercise submission and student progress services Frontend: - Update missions, password, and profile API services - Fix ExerciseContentRenderer component Docs & Scripts: - Add SSL/Certbot deployment guide - Add quick deployment guide - Database scripts for testing and validations - Migration and homologation reports - Functions inventory documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
8.1 KiB
8.1 KiB
Guia SSL con Certbot - GAMILIT
Version: 1.0.0 Fecha: 2025-12-18 Autor: Requirements-Analyst (SIMCO)
1. INTRODUCCION Y PROPOSITO
Que hace el script setup-ssl-certbot.sh
Configura SSL/HTTPS automaticamente para la plataforma GAMILIT usando:
- Let's Encrypt (Certbot): Certificados SSL gratuitos y automaticos para dominios reales
- Auto-firmado: Certificados locales para servidores sin dominio publico
Cuando usar cada opcion
| Escenario | Opcion | Comando |
|---|---|---|
| Servidor con dominio real (produccion) | Let's Encrypt | ./scripts/setup-ssl-certbot.sh gamilit.com |
| Servidor sin dominio (desarrollo/staging) | Auto-firmado | ./scripts/setup-ssl-certbot.sh --self-signed |
| Multiples dominios | Let's Encrypt | ./scripts/setup-ssl-certbot.sh gamilit.com www.gamilit.com |
2. ARQUITECTURA
Diagrama de Flujo HTTP a HTTPS
Internet
│
▼
┌─────────────────┐
│ Puerto 80/443 │
│ (Nginx) │
└────────┬────────┘
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
/api/* /socket.io /*
│ │ │
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ Backend │ │ WebSocket │ │ Frontend │
│ :3006 │ │ :3006 │ │ :3005 │
└───────────┘ └───────────┘ └───────────┘
Puertos Utilizados
| Puerto | Servicio | Tipo |
|---|---|---|
| 80 | Nginx HTTP | Externo (redirect a 443) |
| 443 | Nginx HTTPS | Externo |
| 3005 | Frontend (PM2) | Interno |
| 3006 | Backend (PM2) | Interno |
| 5432 | PostgreSQL | Interno |
3. REQUISITOS PREVIOS
Sistema
- Ubuntu/Debian
- Acceso root (sudo)
- Puertos 80 y 443 abiertos en firewall
Servicios
- PM2 instalado y ejecutando
gamilit-backendactivo en PM2gamilit-frontendactivo en PM2
DNS (solo para Let's Encrypt)
- Dominio registrado
- DNS A record apuntando al servidor (IP: 74.208.126.102 o tu IP)
Verificar requisitos
# Verificar PM2
pm2 list
# Verificar puertos
sudo ufw status
# Verificar DNS (reemplaza con tu dominio)
dig +short tu-dominio.com
4. INSTALACION RAPIDA
Opcion A: Con Dominio Real (Let's Encrypt)
# 1. Hacer script ejecutable
chmod +x scripts/setup-ssl-certbot.sh
# 2. Ejecutar con tu dominio
sudo ./scripts/setup-ssl-certbot.sh gamilit.com
# 3. Para multiples dominios
sudo ./scripts/setup-ssl-certbot.sh gamilit.com www.gamilit.com
Opcion B: Sin Dominio (Auto-firmado)
# 1. Hacer script ejecutable
chmod +x scripts/setup-ssl-certbot.sh
# 2. Ejecutar con flag auto-firmado
sudo ./scripts/setup-ssl-certbot.sh --self-signed
Ayuda
./scripts/setup-ssl-certbot.sh --help
5. CONFIGURACION DETALLADA
Paso a Paso: Let's Encrypt
-
Verificacion de prerequisitos
- Instala Nginx si no existe
- Instala Certbot si no existe
- Verifica procesos PM2
-
Verificacion DNS
- Resuelve el dominio
- Verifica que apunte al servidor correcto
- Si hay discrepancia, pregunta confirmacion
-
Configuracion Nginx inicial (HTTP)
- Crea config en
/etc/nginx/sites-available/gamilit - Configura proxies para Frontend, API, WebSocket
- Habilita sitio y recarga Nginx
- Crea config en
-
Obtencion de certificado
- Ejecuta Certbot con el dominio
- Configura renovacion automatica
- Actualiza config Nginx con SSL
-
Actualizacion de variables de entorno
- Modifica
.env.productiondel backend - Modifica
.env.productiondel frontend
- Modifica
-
Rebuild y restart
- Rebuild del frontend con nuevas variables
- Restart de todos los servicios PM2
-
Validacion
- Verifica HTTPS en Frontend
- Verifica HTTPS en API
- Verifica redirect HTTP->HTTPS
Paso a Paso: Auto-firmado
Similar al anterior pero:
- Genera certificado con OpenSSL (365 dias)
- Almacena en
/etc/nginx/ssl/ - No requiere validacion DNS
6. VARIABLES DE ENTORNO ACTUALIZADAS
Backend (.env.production)
# ANTES
CORS_ORIGIN=http://74.208.126.102:3005
FRONTEND_URL=http://74.208.126.102:3005
# DESPUES (Let's Encrypt)
CORS_ORIGIN=https://gamilit.com
FRONTEND_URL=https://gamilit.com
# DESPUES (Auto-firmado)
CORS_ORIGIN=https://74.208.126.102
FRONTEND_URL=https://74.208.126.102
Frontend (.env.production)
# ANTES
VITE_API_HOST=74.208.126.102:3006
VITE_API_PROTOCOL=http
VITE_WS_HOST=74.208.126.102:3006
VITE_WS_PROTOCOL=ws
# DESPUES
VITE_API_HOST=gamilit.com
VITE_API_PROTOCOL=https
VITE_WS_HOST=gamilit.com
VITE_WS_PROTOCOL=wss
7. VALIDACION POST-INSTALACION
Validacion Automatica
./scripts/validate-deployment.sh --ssl --verbose
Validacion Manual
# Frontend HTTPS
curl -I https://gamilit.com
# API HTTPS
curl https://gamilit.com/api/health
# Redirect HTTP->HTTPS
curl -I http://gamilit.com
# Certificado
echo | openssl s_client -connect gamilit.com:443 2>/dev/null | openssl x509 -noout -dates
URLs de Acceso (post-SSL)
| Servicio | URL |
|---|---|
| Frontend | https://gamilit.com |
| API | https://gamilit.com/api |
| Health | https://gamilit.com/api/health |
| WebSocket | wss://gamilit.com/socket.io |
8. TROUBLESHOOTING
DNS no resuelve
Error: No se pudo resolver dominio gamilit.com
Solucion:
- Verificar DNS:
dig +short gamilit.com - Esperar propagacion DNS (hasta 48h)
- Verificar A record en registrador de dominio
Certbot falla
Error: Challenge failed for domain
Solucion:
- Verificar puerto 80 abierto:
sudo ufw allow 80 - Verificar que Nginx responde:
curl http://localhost - Revisar logs:
sudo tail -f /var/log/letsencrypt/letsencrypt.log
Nginx no inicia
Error: Configuracion Nginx invalida
Solucion:
- Verificar sintaxis:
sudo nginx -t - Revisar config:
sudo cat /etc/nginx/sites-available/gamilit - Revisar logs:
sudo tail -f /var/log/nginx/error.log
CORS errors despues de SSL
Error: CORS policy blocked
Solucion:
- Verificar CORS_ORIGIN en backend:
grep CORS apps/backend/.env.production - Debe ser exactamente
https://tu-dominio.com(sin trailing slash) - Restart backend:
pm2 restart gamilit-backend
Certificado expirado
Error: SSL certificate has expired
Solucion:
- Renovar manualmente:
sudo certbot renew - Verificar cron de renovacion:
sudo systemctl status certbot.timer - Si falla, regenerar:
sudo certbot certonly --nginx -d gamilit.com
9. RENOVACION Y MANTENIMIENTO
Renovacion Automatica
Certbot configura automaticamente un cron/timer para renovacion.
# Verificar timer
sudo systemctl status certbot.timer
# Ver proxima renovacion
sudo certbot certificates
Renovacion Manual
# Dry-run (sin cambios)
sudo certbot renew --dry-run
# Renovacion forzada
sudo certbot renew --force-renewal
Logs de Renovacion
# Logs de Certbot
sudo tail -f /var/log/letsencrypt/letsencrypt.log
# Historial de renovaciones
sudo ls -la /etc/letsencrypt/renewal-hooks/
10. REFERENCIAS
Documentacion Relacionada
GUIA-SSL-NGINX-PRODUCCION.md- Configuracion manual de SSLGUIA-SSL-AUTOFIRMADO.md- Certificados auto-firmadosGUIA-DEPLOYMENT-RAPIDO.md- Deployment generalGUIA-VALIDACION-PRODUCCION.md- Validaciones post-deployment
Script: /scripts/setup-ssl-certbot.sh
Ultima actualizacion: 2025-12-18