Files
CRM_AGENTES_CARGA/deploy
Aduanasoft 5a250204b5 chore(deploy): override de preview privado (puertos solo en loopback)
Para levantar el stack en el servidor de pruebas con acceso por túnel SSH sin
exponer nada a internet: backend/frontend publicados solo en 127.0.0.1 y
postgres/minio sin publicar al host.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 17:37:17 -06:00
..

Despliegue — testing.crm.aduanasoft.com (entorno de pruebas)

Guía para publicar el CRM Agente de Carga en el servidor de pruebas. El estándar Aduanasoft es desplegar vía Jenkins (CI/CD); este runbook manual es para el levantamiento inicial o cuando el pipeline aún no está conectado.

Servidor: deploy@216.250.125.140:3232 · DNS: testing.crm.aduanasoft.com216.250.125.140

0. Reglas de seguridad (no negociables)

  • ENVIRONMENT=production y DEV_LOCAL_AUTH=false. En development el RBAC auto-bootstrapea super_admin a cualquiera y se activa el login local — inaceptable en un dominio público.
  • Los secretos (DB, S3, SECRET_KEY, Keycloak) los captura el operador en el servidor, nunca se versionan ni se comparten por chat.
  • Las migraciones las ejecuta el operador/CI, no de forma automática. No correr migraciones contra producción.

1. Acceso por llave (una vez)

Autoriza la llave pública del operador en el servidor (desde una máquina que ya entre):

ssh -p 3232 deploy@216.250.125.140 \
  "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '<TU_LLAVE_PUBLICA>' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

2. Código y entorno

ssh -p 3232 deploy@216.250.125.140
git clone https://git.aduanasoft.com/ADUANASOFT/CRM_AGENTES_CARGA.git
cd CRM_AGENTES_CARGA
git checkout feature/crm-cumplimiento-pdf   # o la rama/tag liberado
cp deploy/env.testing.example .env
$EDITOR .env                                 # rellenar TODOS los CHANGE_ME

3. Build de producción (importante)

El docker-compose.yml del repo está orientado a desarrollo (vite dev + --reload). Para un sitio público hay que servir la build de producción:

  • Frontend: npm ci && npm run build (adapter-node) y arrancar con node build escuchando en 5173, con ORIGIN=https://testing.crm.aduanasoft.com.
  • Backend: uvicorn main:app --host 0.0.0.0 --port 8000 sin --reload.
  • Publica los puertos SOLO en loopback (override):
    # docker-compose.testing.yml (ejemplo de override)
    services:
      backend:
        ports: ["127.0.0.1:8000:8000"]
        command: ["uvicorn","main:app","--host","0.0.0.0","--port","8000"]
      frontend:
        ports: ["127.0.0.1:5173:5173"]
        command: ["node","build"]
    
    docker compose -f docker-compose.yml -f docker-compose.testing.yml up -d --build
    

4. Migraciones y datos base

docker compose exec backend alembic upgrade head
# Catálogo de permisos + roles por carril (Ventas/Operaciones/Facturación/Consulta):
docker compose exec backend python -c "from api.v1.modules.core.permissions.service import PermissionService; from core.database import CoreSessionLocal; PermissionService(CoreSessionLocal()).sync_permissions()"

En producción NO se usa el auto-bootstrap de dev: asigna los roles a los usuarios reales desde el módulo de Roles y permisos.

5. Nginx + TLS

sudo cp deploy/nginx/testing.crm.aduanasoft.com.conf /etc/nginx/sites-available/
sudo ln -s /etc/nginx/sites-available/testing.crm.aduanasoft.com.conf /etc/nginx/sites-enabled/
sudo mkdir -p /var/www/certbot
sudo certbot certonly --webroot -w /var/www/certbot -d testing.crm.aduanasoft.com
sudo nginx -t && sudo systemctl reload nginx

6. Smoke test

curl -fsS https://testing.crm.aduanasoft.com/api/health && echo OK
# Abre la app y valida login (Keycloak), listar clientes, y un flujo end-to-end.

Notas

  • App y API van en el mismo origen (/ y /api/) para no requerir CORS entre hosts.
  • MinIO: si el navegador debe abrir URLs prefirmadas, S3_ENDPOINT_URL debe resolver a un host accesible públicamente (o publicar MinIO detrás de nginx en otro subdominio). Revisar según la política de red del entorno de pruebas.