Installation
Instalar con Coolify
Despliega QuoteNode con Coolify usando el build pack de Docker Compose y el archivo compose dedicado para Coolify.
Instalar con Coolify
Coolify es la ruta de despliegue pública recomendada en beta cuando necesitas HTTPS gestionado, despliegues basados en Git, health checks de contenedores y una interfaz web para variables de entorno.
Configuración del repositorio
Crea una aplicación desde el repositorio de QuoteNode y usa estos ajustes:
| Ajuste | Valor |
|---|---|
| Build Pack | Docker Compose |
| Base Directory | / |
| Docker Compose Location | /infra/docker-compose.coolify.yml |
| Public domain | configurar solo en frontend, por ejemplo https://crm2.prodata.cc |
| Backend domain | dejar vacío a menos que sepas por qué debe ser público |
| Backup worker domain | dejar vacío |
| Gotenberg domain | dejar vacío |
El proxy de Coolify debe enrutar el dominio al servicio frontend. El backend, backup worker, PostgreSQL y Gotenberg permanecen internos. No asignes dominios públicos a backend, backup-worker, postgres ni gotenberg; exponer esos servicios directamente aumenta la superficie de ataque y puede saltarse el límite previsto de frontend/proxy.
Comandos de build y start
Para despliegues normales de Coolify, deja los comandos personalizados vacíos a menos que tu instalación de Coolify los requiera. Si Coolify muestra comandos generados, pueden parecerse a:
docker compose build
docker compose up -d
No dependas de los ajustes Nixpacks Node para el runtime de QuoteNode en este modo. Los Dockerfiles y el archivo Compose definen el runtime.
Opciones avanzadas
Valores recomendados por defecto:
| Opción de Coolify | Recomendación |
|---|---|
| Inject Build Args to Dockerfile | habilitado |
| Auto Deploy | habilitado para staging, opcional para producción |
| Git Submodules | solo si tu checkout los necesita |
| LFS | solo si el repo usa assets de Git LFS |
| Shallow Clone | aceptable |
| Proxy Force HTTPS | habilitado |
| Enable Gzip Compression | habilitado |
| Strip Prefixes | dejar por defecto a menos que se despliegue bajo un prefijo de ruta |
Revisa las Watch Paths antes de usarlas. Una ruta como services/api/** es obsoleta para este layout de repositorio; el código del backend vive bajo backend/** y el del frontend bajo frontend/**.
Variables de entorno requeridas
Configura estas en la interfaz de entorno de Coolify:
DB_NAME=quotenode
DB_USERNAME=quotenode
DB_PASSWORD=<random-32+-characters>
DB_URL=jdbc:postgresql://postgres:5432/quotenode
DB_ENCRYPTION_KEY=<64-hex-characters>
TIMING_TOKEN_SECRET=<random-32+-characters>
PUBLIC_LINK_PASSWORD_SESSION_SECRET=<random-32+-characters>
CORS_ALLOWED_ORIGINS=https://<frontend-domain>
NOTIFICATIONS_PUBLIC_PREFERENCES_URL=https://<frontend-domain>/notifications/preferences
PDF_ENABLED=true
NOTIFICATIONS_ENABLED=true
NOTIFICATIONS_EMAIL_ENABLED=false
FEATURE_2FA_ENABLED=true
BACKUP_ENABLED=false
BACKUP_CRON=0 0 2 * * *
SECURITY_BOT_DETECTION_ENABLED=true
# La IP del cliente se detecta automáticamente tras proxies internos y CDNs (incluido Cloudflare) — déjalo vacío.
# Defínelo solo para un proxy inusual cuyo par de transporte sea una dirección PÚBLICA a confiar (IP/CIDR o nombre de host).
SECURITY_TRUSTED_PROXIES=
GEOIP_ENABLED=false
LOG_LEVEL=INFO
VITE_RELEASE_CHECK_ENABLED=true
VITE_RELEASE_MANIFEST_URL=https://quotenode.dev/releases/latest.json
Si la entrega de correo está habilitada, configura también:
NOTIFICATIONS_EMAIL_ENABLED=true
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USERNAME[email protected]
SMTP_PASSWORD=<smtp-password>
SMTP_AUTH=true
SMTP_STARTTLS=true
BACKUP_CRON usa el formato cron de seis campos de Spring, así que 0 0 2 * * * significa a las 02:00 todos los días.
Algunas plantillas de operador también incluyen SERVICE_URL_FRONTEND=https://<frontend-domain>. Mantenlo alineado con el dominio del frontend si tu proceso de despliegue lo usa. El archivo compose actual de Coolify no consume esta variable directamente; el acceso del navegador se controla mediante CORS_ALLOWED_ORIGINS, y los enlaces de preferencias de notificación usan NOTIFICATIONS_PUBLIC_PREFERENCES_URL.
Metadatos de release
Los despliegues desde fuente de Coolify pueden dejar APP_VERSION vacío a menos que se esté construyendo un tag de release. Configura los metadatos cuando tu CI o pipeline de Coolify pueda proporcionarlos:
# APP_VERSION puede omitirse para despliegues desde fuente hasta que se construya un tag de release.
APP_CHANNEL=beta
APP_COMMIT_SHA=<commit-sha>
APP_BUILD_TIME=<iso-time>
APP_BUILD_NUMBER=<build-number>
APP_SOURCE_REF=<branch-or-tag>
APP_IMAGE_TAG=<image-tag>
Usa APP_CHANNEL=alpha, beta, rc, dev o stable según el release que despliegues.
Seguridad de licencias
Para despliegues beta y públicos reales:
LICENSE_SKIP_SIGNATURE_CHECK=false
Configúralo explícitamente a false para despliegues beta reales. El archivo compose también usa false por defecto cuando la variable se omite, pero los operadores en producción no deben depender de la ambigüedad. Configurarlo a true deshabilita la verificación de autenticidad de la licencia y puede violar los términos de licencia; úsalo solo en entornos de desarrollo locales desechables.
Comprobaciones post-despliegue
Después de que el despliegue esté saludable en Coolify:
- Abre
https://<frontend-domain>/health. - Abre el dominio del frontend en un navegador.
- Inicia sesión con el administrador predefinido solo para el primer arranque, luego cambia la contraseña.
- Crea una oferta.
- Genera un PDF.
- Crea y abre un enlace público.
- Si el correo está habilitado, verifica SMTP y los enlaces de preferencias de notificación.
- Comprueba el área de licencia/versión del administrador para ver la versión actual y el estado de aviso de release.
Problemas comunes de Coolify
- Los enlaces públicos fallan cuando
CORS_ALLOWED_ORIGINSno coincide exactamente con el origen del navegador. - Los enlaces de preferencias de notificación fallan cuando
NOTIFICATIONS_PUBLIC_PREFERENCES_URLsigue apuntando a localhost o a un dominio antiguo. - Gotenberg no debe recibir un dominio público; es un servicio interno de PDF.
- El HTTPS gestionado por Coolify requiere que el dominio del frontend resuelva al servidor de Coolify.
- Si los metadatos de build están vacíos, la aplicación puede seguir funcionando, pero la pantalla de versión del administrador puede mostrar menos detalle del release.