Skip to content
Esta página fue generada y traducida con asistencia de IA. Si encuentra alguna imprecisión, no dude en ayudar a mejorarla. Editar en GitHub

Despliegue en Producción

Esta guía cubre el despliegue de OpenPR en un entorno de producción con HTTPS, un proxy inverso, refuerzo de la base de datos y mejores prácticas de seguridad.

Arquitectura

mermaid
graph LR
    INTERNET["Internet<br/>:443"] --> CADDY["Caddy<br/>HTTPS Automático"]
    CADDY --> FE["Frontend<br/>Nginx :3000"]
    FE --> API["API :8080"]
    FE --> MCP["MCP :8090"]
    API --> PG["PostgreSQL :5432"]
    WORKER["Worker"] --> PG

Requisitos Previos

  • Un servidor con al menos 2 núcleos de CPU y 2 GB de RAM
  • Un nombre de dominio apuntando a la dirección IP de tu servidor
  • Docker y Docker Compose (o Podman)

Paso 1: Configurar el Entorno

Crea un archivo .env de producción:

bash
# Database (use strong passwords)
DATABASE_URL=postgres://openpr:STRONG_PASSWORD_HERE@postgres:5432/openpr
POSTGRES_DB=openpr
POSTGRES_USER=openpr
POSTGRES_PASSWORD=STRONG_PASSWORD_HERE

# JWT (generate a random secret)
JWT_SECRET=$(openssl rand -hex 32)
JWT_ACCESS_TTL_SECONDS=86400
JWT_REFRESH_TTL_SECONDS=604800

# Logging
RUST_LOG=info

Secretos

Nunca hagas commit de archivos .env en el control de versiones. Usa chmod 600 .env para restringir los permisos del archivo.

Paso 2: Configurar Caddy

Instala Caddy en el sistema host:

bash
sudo apt install -y caddy

Configura el Caddyfile:

# /etc/caddy/Caddyfile
your-domain.example.com {
    reverse_proxy localhost:3000
}

Caddy obtiene y renueva automáticamente los certificados TLS de Let's Encrypt.

Inicia Caddy:

bash
sudo systemctl enable --now caddy

Alternativa: Nginx

Si prefieres Nginx, configúralo con un proxy pass al puerto 3000 y usa certbot para los certificados TLS.

Paso 3: Desplegar con Docker Compose

bash
cd /opt/openpr
docker-compose up -d

Verifica que todos los servicios estén saludables:

bash
docker-compose ps
curl -k https://your-domain.example.com/health

Paso 4: Crear la Cuenta de Administrador

Abre https://your-domain.example.com en tu navegador y registra la cuenta de administrador.

Primer Usuario

El primer usuario registrado se convierte en administrador. Registra tu cuenta de administrador antes de compartir la URL.

Lista de Verificación de Seguridad

Autenticación

  • [ ] Cambia JWT_SECRET a un valor de 32+ caracteres aleatorio
  • [ ] Establece valores de TTL de tokens apropiados (más corto para acceso, más largo para actualización)
  • [ ] Crea la cuenta de administrador inmediatamente después del despliegue

Base de Datos

  • [ ] Usa una contraseña fuerte para PostgreSQL
  • [ ] No expongas el puerto de PostgreSQL (5432) a internet
  • [ ] Habilita SSL de PostgreSQL para conexiones (si la base de datos es remota)
  • [ ] Configura copias de seguridad regulares de la base de datos

Red

  • [ ] Usa Caddy o Nginx con HTTPS (TLS 1.3)
  • [ ] Solo expone los puertos 443 (HTTPS) y opcionalmente 8090 (MCP) a internet
  • [ ] Usa un firewall (ufw, iptables) para restringir el acceso
  • [ ] Considera restringir el acceso al servidor MCP a rangos de IP conocidos

Aplicación

  • [ ] Establece RUST_LOG=info (no debug ni trace en producción)
  • [ ] Monitoriza el uso de disco del directorio de subidas
  • [ ] Configura la rotación de registros para los registros de contenedores

Copias de Seguridad de la Base de Datos

Configura copias de seguridad automatizadas de PostgreSQL:

bash
#!/bin/bash
# /opt/openpr/backup.sh
BACKUP_DIR="/opt/openpr/backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"

docker exec openpr-postgres pg_dump -U openpr openpr | gzip > "$BACKUP_DIR/openpr_$DATE.sql.gz"

# Keep only last 30 days
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +30 -delete

Añade a cron:

bash
# Daily backup at 2 AM
0 2 * * * /opt/openpr/backup.sh

Monitorización

Verificaciones de Estado

Monitoriza los endpoints de estado de los servicios:

bash
# API
curl -f http://localhost:8080/health

# MCP Server
curl -f http://localhost:8090/health

Monitorización de Registros

bash
# Follow all logs
docker-compose logs -f

# Follow specific service
docker-compose logs -f api --tail=100

Consideraciones de Escalado

  • Servidor API: Puede ejecutar múltiples réplicas detrás de un balanceador de carga. Todas las instancias se conectan a la misma base de datos PostgreSQL.
  • Worker: Ejecuta una única instancia para evitar el procesamiento duplicado de trabajos.
  • Servidor MCP: Puede ejecutar múltiples réplicas. Cada instancia es sin estado.
  • PostgreSQL: Para alta disponibilidad, considera la replicación de PostgreSQL o un servicio de base de datos gestionado.

Actualización

Para actualizar OpenPR:

bash
cd /opt/openpr
git pull origin main
docker-compose down
docker-compose up -d --build

Las migraciones de la base de datos se aplican automáticamente en el inicio del servidor API.

Próximos Pasos

Released under the Apache-2.0 License.