feat: SAM integration, deployment scripts, and audio response enhancements
- Add SAM (Sistema de Administración Académica) integration with sync endpoints - Add deployment automation (deploy.sh, remote-setup.sh, setup-nginx-ssl.sh) - Add nginx proxy configuration for SSL with Let's Encrypt - Add audio response support for student lessons (migrations, handlers) - Add audio evaluations admin page - Update CORS to support wildcard subdomains for norteamericano.cl - Add comprehensive deployment documentation (DESPLIEGUE.md, ManualDeConfiguracion.md) - Update docker-compose.yml with nginx-proxy and acme-companion services - Remove outdated documentation files Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
+345
@@ -0,0 +1,345 @@
|
||||
# OpenCCB - Instrucciones de Despliegue (AWS EC2)
|
||||
|
||||
## Resumen
|
||||
|
||||
OpenCCB utiliza **nginx-proxy + acme-companion** para SSL automático con Let's Encrypt.
|
||||
|
||||
| Componente | Función |
|
||||
|------------|---------|
|
||||
| **nginx-proxy** | Reverse proxy que maneja el tráfico HTTP/HTTPS |
|
||||
| **acme-companion** | Gestiona certificados SSL de Let's Encrypt automáticamente |
|
||||
| **Studio + CMS** | Administración de cursos (puerto 3000/3001) |
|
||||
| **Experience + LMS** | Experiencia del estudiante (puerto 3003/3002) |
|
||||
| **PostgreSQL + PGVector** | Base de datos con búsqueda semántica |
|
||||
|
||||
---
|
||||
|
||||
## Despliegue Rápido
|
||||
|
||||
### Paso 1: Desde tu máquina local
|
||||
|
||||
```bash
|
||||
# Ejecutar el script de despliegue
|
||||
./deploy.sh
|
||||
```
|
||||
|
||||
Este script hace **TODO** automáticamente:
|
||||
1. ✅ Copia todos los archivos al servidor
|
||||
2. ✅ Instala Docker y Docker Compose
|
||||
3. ✅ Genera credenciales seguras (DB_PASSWORD, JWT_SECRET)
|
||||
4. ✅ Configura las variables de entorno correctas
|
||||
5. ✅ Inicia nginx-proxy y acme-companion
|
||||
6. ✅ Crea las bases de datos
|
||||
7. ✅ Inicia todos los servicios
|
||||
8. ✅ Obtiene certificados SSL automáticamente
|
||||
|
||||
---
|
||||
|
||||
### Paso 2: Verificar estado (opcional)
|
||||
|
||||
```bash
|
||||
# Conectarse al servidor
|
||||
ssh -i "ubuntu.pem" ubuntu@ec2-18-224-137-67.us-east-2.compute.amazonaws.com
|
||||
cd /var/www/openccb
|
||||
|
||||
# Ver estado de contenedores
|
||||
sudo docker compose ps
|
||||
|
||||
# Ver logs de SSL
|
||||
docker logs acme-companion --tail 50
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## URLs de Acceso
|
||||
|
||||
Después del despliegue (esperar 2-5 minutos para SSL):
|
||||
|
||||
```
|
||||
https://studio.norteamericano.com (CMS/Admin)
|
||||
https://learning.norteamericano.com (LMS/Estudiantes)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Requisitos Previos
|
||||
|
||||
### 1. Configurar DNS
|
||||
|
||||
Antes de ejecutar `deploy.sh`, configura los registros DNS en tu proveedor de dominio:
|
||||
|
||||
| Tipo | Nombre | Valor | TTL |
|
||||
|------|--------|-------|-----|
|
||||
| A | @ | 18.224.137.67 | 300 |
|
||||
| A | studio | 18.224.137.67 | 300 |
|
||||
| A | learning | 18.224.137.67 | 300 |
|
||||
|
||||
**Verificación:**
|
||||
```bash
|
||||
dig studio.norteamericano.com
|
||||
dig learning.norteamericano.com
|
||||
```
|
||||
|
||||
### 2. Configurar Security Group de AWS
|
||||
|
||||
En la consola de AWS EC2, edita el Security Group de tu instancia:
|
||||
|
||||
| Tipo | Protocolo | Puerto | Fuente |
|
||||
|------|-----------|--------|--------|
|
||||
| SSH | TCP | 22 | Tu IP |
|
||||
| HTTP | TCP | 80 | 0.0.0.0/0 |
|
||||
| HTTPS | TCP | 443 | 0.0.0.0/0 |
|
||||
|
||||
### 3. Archivo de llave SSH
|
||||
|
||||
Asegúrate de tener `ubuntu.pem` en el directorio del proyecto:
|
||||
```bash
|
||||
chmod 400 ubuntu.pem
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Comandos Útiles
|
||||
|
||||
### Ver estado de servicios
|
||||
```bash
|
||||
sudo docker compose ps
|
||||
```
|
||||
|
||||
### Ver logs en tiempo real
|
||||
```bash
|
||||
sudo docker compose logs -f
|
||||
```
|
||||
|
||||
### Ver logs de un servicio específico
|
||||
```bash
|
||||
# Studio (CMS)
|
||||
docker logs openccb-studio --tail 20
|
||||
|
||||
# Experience (LMS)
|
||||
docker logs openccb-experience --tail 20
|
||||
|
||||
# Base de datos
|
||||
docker logs openccb-db --tail 20
|
||||
|
||||
# nginx-proxy
|
||||
docker logs nginx-proxy --tail 20
|
||||
|
||||
# SSL (acme-companion)
|
||||
docker logs acme-companion --tail 50
|
||||
```
|
||||
|
||||
### Reiniciar servicios
|
||||
```bash
|
||||
# Reiniciar todo
|
||||
sudo docker compose restart
|
||||
|
||||
# Reiniciar un servicio específico
|
||||
sudo docker compose restart studio
|
||||
```
|
||||
|
||||
### Detener servicios
|
||||
```bash
|
||||
sudo docker compose down
|
||||
```
|
||||
|
||||
### Reconstruir desde cero
|
||||
```bash
|
||||
# ⚠️ Esto elimina todos los datos
|
||||
sudo docker compose down -v
|
||||
sudo docker compose up -d --build
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Solución de Problemas
|
||||
|
||||
### Error 502 Bad Gateway
|
||||
|
||||
**Causa:** nginx-proxy no puede conectar con los servicios backend.
|
||||
|
||||
**Solución:**
|
||||
```bash
|
||||
# 1. Verificar que los servicios están corriendo
|
||||
sudo docker compose ps
|
||||
|
||||
# 2. Ver logs de Studio
|
||||
docker logs openccb-studio --tail 20
|
||||
|
||||
# 3. Ver logs de nginx
|
||||
docker logs nginx-proxy --tail 20
|
||||
|
||||
# 4. Reiniciar servicios
|
||||
sudo docker compose restart
|
||||
```
|
||||
|
||||
### Certificados SSL no se generan
|
||||
|
||||
**Síntomas:**
|
||||
- Error de conexión SSL en el navegador
|
||||
- `acme-companion` muestra errores de rate limit
|
||||
|
||||
**Solución:**
|
||||
```bash
|
||||
# 1. Verificar DNS
|
||||
dig studio.norteamericano.com
|
||||
dig learning.norteamericano.com
|
||||
|
||||
# 2. Verificar que nginx-proxy está corriendo
|
||||
sudo docker compose ps nginx-proxy
|
||||
|
||||
# 3. Ver logs de acme-companion
|
||||
docker logs acme-companion --tail 100
|
||||
|
||||
# 4. Verificar puertos
|
||||
sudo netstat -tlnp | grep -E ':80|:443'
|
||||
|
||||
# 5. Esperar 1 hora (rate limit de Let's Encrypt)
|
||||
```
|
||||
|
||||
### Base de datos no está disponible
|
||||
|
||||
```bash
|
||||
# 1. Verificar estado de la DB
|
||||
sudo docker compose ps db
|
||||
|
||||
# 2. Ver logs de la DB
|
||||
docker logs openccb-db --tail 20
|
||||
|
||||
# 3. Reiniciar DB
|
||||
sudo docker compose restart db
|
||||
|
||||
# 4. Verificar bases de datos
|
||||
sudo docker exec openccb-db psql -U user -d postgres -c "\l"
|
||||
```
|
||||
|
||||
### Error de conexión SSH
|
||||
|
||||
```bash
|
||||
# Verificar permisos del archivo .pem
|
||||
chmod 400 ubuntu.pem
|
||||
|
||||
# Probar conexión
|
||||
ssh -i "ubuntu.pem" ubuntu@ec2-18-224-137-67.us-east-2.compute.amazonaws.com
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Actualización de la Plataforma
|
||||
|
||||
### Método recomendado
|
||||
|
||||
```bash
|
||||
# Desde tu máquina local
|
||||
./deploy.sh
|
||||
```
|
||||
|
||||
El script sincronizará los cambios y reconstruirá los contenedores automáticamente.
|
||||
|
||||
---
|
||||
|
||||
## Backup y Restauración
|
||||
|
||||
### Backup de base de datos
|
||||
|
||||
```bash
|
||||
# Conectarse al servidor
|
||||
ssh -i "ubuntu.pem" ubuntu@ec2-18-224-137-67.us-east-2.compute.amazonaws.com
|
||||
cd /var/www/openccb
|
||||
|
||||
# Crear backup
|
||||
sudo docker exec openccb-db pg_dump -U user openccb_cms > backup_cms_$(date +%Y%m%d).sql
|
||||
sudo docker exec openccb-db pg_dump -U user openccb_lms > backup_lms_$(date +%Y%m%d).sql
|
||||
|
||||
# Descargar backup a tu máquina local
|
||||
scp -i "ubuntu.pem" ubuntu@ec2-18-224-137-67.us-east-2.compute.amazonaws.com:/var/www/openccb/backup_*.sql .
|
||||
```
|
||||
|
||||
### Restaurar base de datos
|
||||
|
||||
```bash
|
||||
# Subir backup al servidor
|
||||
scp -i "ubuntu.pem" backup_cms_20250101.sql ubuntu@ec2-18-224-137-67.us-east-2.compute.amazonaws.com:/var/www/openccb/
|
||||
|
||||
# Conectarse al servidor
|
||||
ssh -i "ubuntu.pem" ubuntu@ec2-18-224-137-67.us-east-2.compute.amazonaws.com
|
||||
cd /var/www/openccb
|
||||
|
||||
# Restaurar
|
||||
sudo docker exec -i openccb-db psql -U user -d openccb_cms < backup_cms_20250101.sql
|
||||
sudo docker exec -i openccb-db psql -U user -d openccb_lms < backup_lms_20250101.sql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Seguridad
|
||||
|
||||
### Credenciales por Defecto
|
||||
|
||||
Después de ejecutar `deploy.sh`, las credenciales se generan automáticamente:
|
||||
|
||||
- **DB_PASSWORD**: Contraseña de base de datos (generada aleatoriamente)
|
||||
- **JWT_SECRET**: Secreto JWT (generado aleatoriamente)
|
||||
|
||||
Estas credenciales se guardan en el archivo `.env`. **Guárdalas en un lugar seguro**.
|
||||
|
||||
### Usuario Admin Inicial
|
||||
|
||||
El primer usuario admin se crea durante la instalación inicial con:
|
||||
- **Email**: admin@norteamericano.com
|
||||
- **Contraseña**: La que definas durante la instalación
|
||||
|
||||
---
|
||||
|
||||
## Arquitectura del Sistema
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ AWS EC2 │
|
||||
│ │
|
||||
│ ┌─────────────┐ ┌──────────────────────────┐ │
|
||||
│ │ nginx │───▶│ Studio + CMS │ │
|
||||
│ │ proxy │ │ (Next.js + Rust) │ │
|
||||
│ │ :80, :443 │ │ :3000, :3001 │ │
|
||||
│ └──────┬──────┘ └──────────┬───────────────┘ │
|
||||
│ │ │ │
|
||||
│ │ ┌─────────────────┘ │
|
||||
│ │ │ │
|
||||
│ ▼ ▼ │
|
||||
│ ┌─────────────┐ ┌──────────────────────────┐ │
|
||||
│ │ acme │ │ Experience + LMS │ │
|
||||
│ │ companion │ │ (Next.js + Rust) │ │
|
||||
│ │ (Let's │ │ :3003, :3002 │ │
|
||||
│ │ Encrypt) │ └──────────┬───────────────┘ │
|
||||
│ └─────────────┘ │ │
|
||||
│ │ │
|
||||
│ ┌──────────▼───────────────┐ │
|
||||
│ │ PostgreSQL + PGVector │ │
|
||||
│ │ :5432 │ │
|
||||
│ └──────────────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Notas Importantes
|
||||
|
||||
1. **Certificados automáticos**: Se renuevan automáticamente con Let's Encrypt
|
||||
2. **Puertos usados**:
|
||||
- 80: HTTP (redirección a HTTPS, validación Let's Encrypt)
|
||||
- 443: HTTPS (tráfico web)
|
||||
- 5432: PostgreSQL (interno de Docker)
|
||||
- 3000-3003: Internos de los servicios
|
||||
3. **Volúmenes persistentes**:
|
||||
- `postgres_data`: Datos de la base de datos
|
||||
- `uploads_data`: Archivos subidos por usuarios
|
||||
- `certs`: Certificados SSL
|
||||
- `vhost`: Configuración virtual de nginx
|
||||
|
||||
---
|
||||
|
||||
**Fecha**: Marzo 2026
|
||||
**Versión**: OpenCCB 0.3.0
|
||||
**Servidor**: AWS EC2 us-east-2
|
||||
**Instancia**: ec2-18-224-137-67.us-east-2.compute.amazonaws.com
|
||||
Reference in New Issue
Block a user