Despliegue
Cómo se despliega ixiclinic — el API con Docker Compose en un VPS (Dockerfile multi-stage, usuario no-root, healthcheck), las apps Next.js en Vercel y las variables de entorno que cada equipo debe rellenar.
ixiclinic se despliega en dos planos: el API (con su PostgreSQL) corre en un VPS vía Docker Compose, y las apps Next.js se despliegan en Vercel. Esta página es genérica: describe cómo desplegar, no las credenciales concretas de ningún entorno. Cada equipo rellena las variables de su propia infraestructura.
API — Docker Compose en el VPS
El API se empaqueta con un Dockerfile multi-stage (apps/api/Dockerfile) y se orquesta
con apps/api/deploy/docker-compose.prod.yml, que define dos servicios: postgres y api.
Dockerfile
- Base:
node:22-alpine, conpnpm@9.15.9vía corepack. - Stage
build: instala dependencias con--frozen-lockfile, compila@ixiclinic/typesy luego el API. - Stage
production: copia solo lo necesario (dist,node_modules, las migraciones SQL y los assets). Crea y usa un usuario no-root (ixiclinic). - Healthcheck: consulta
http://localhost:5000/api/healthcada 30 s. - Arranque:
node dist/migrate.js && exec node dist/index.js— aplica las migraciones pendientes y, solo si tienen éxito, levanta el servidor (falla rápido si la migración rompe).
Compose de producción
postgres— imagenpostgres:17-alpine, volumen persistentepgdata, healthcheck conpg_isready, límites de memoria. No publica puertos a internet.api— se construye desde el Dockerfile, publica el puerto solo en localhost (127.0.0.1:5000:5000) para que un proxy inverso (p. ej. Nginx) lo exponga por HTTPS, y arranca después de quepostgresesté saludable (depends_on: condition: service_healthy).- Ambos servicios viven en una red Docker interna; el API se conecta a la base por el nombre de
servicio (
postgres:5432), no por una IP pública.
Pasos de despliegue (genéricos)
En el VPS, dentro del repo:
git pull origin main
cd apps/api
docker compose -f deploy/docker-compose.prod.yml build api
docker compose -f deploy/docker-compose.prod.yml up -d apiLas migraciones se aplican solas al arrancar el contenedor (ver Migraciones). No hace falta un paso manual de migración en el flujo normal.
Variables de entorno (no se commitean)
El servicio api carga un archivo .env.prod (referenciado por env_file en el compose)
que no está en el repositorio. Ahí van todas las variables sensibles. El compose deriva la
DATABASE_URL a partir de las de PostgreSQL.
| Variable | Para qué |
|---|---|
DB_NAME | Nombre de la base de PostgreSQL |
DB_USER | Usuario de PostgreSQL |
DB_PASSWORD | Contraseña de PostgreSQL (obligatoria; el compose la exige) |
DATABASE_URL | Cadena de conexión completa (el compose la arma con las anteriores) |
JWT_SECRET | Firma de access tokens (mínimo 32 caracteres) |
JWT_REFRESH_SECRET | Firma de refresh tokens (mínimo 32 caracteres) |
CORS_ORIGINS | Orígenes permitidos (lista separada por comas) |
| Otras integraciones | Credenciales de DGII/e-CF, email, WhatsApp, etc., según se usen |
Importante: Un equipo nuevo debe crear su propio
.env.proden el VPS con las variables de su infraestructura. Nunca lo commitees ni lo compartas por canales inseguros. La configuración del API se valida con Zod enapps/api/src/config/env.ts, que rechaza el arranque si falta algo obligatorio o los secretos JWT son demasiado cortos.
Apps Next.js — Vercel
Las apps admin, console, portal, landing y docs se despliegan en Vercel con
auto-deploy en cada push a main. No hay paso manual: al hacer merge a main, Vercel
construye y publica cada proyecto.
Cada proyecto de Vercel necesita su propia variable de API:
- Las apps Next.js usan
NEXT_PUBLIC_API_URL. - El lab-site (Vite) usa
VITE_API_URL.
Todas apuntan al endpoint público del API.
URLs públicas de producción
| Unidad | URL |
|---|---|
| API | https://api.ixiclinic.com |
| Admin (por tenant) | https://admin.ixiclinic.com |
| Console (SaaS interno) | https://console.ixiclinic.com |
| Portal (pacientes/empresas) | https://portal.ixiclinic.com |
| Landing | https://ixiclinic.com |
| Docs (este sitio) | https://docs.ixiclinic.com |
| Lab-site (por tenant) | https://<lab>.ixiclinic.com |
Operaciones
Cómo se despliega, integra y prueba ixiclinic — despliegue del API en VPS con Docker, apps Next.js en Vercel, los workflows de GitHub Actions y la estrategia de testing.
CI/CD
Los workflows de GitHub Actions de ixiclinic (release de Connect y de Desktop por tag), el auto-deploy de Vercel y el pipeline de calidad recomendado que aún no existe.