Wiki
Deployment Options
How to deploy QuoteNode — Docker Compose, Coolify, and production topology.
Deployment Options
QuoteNode supports multiple deployment models, all based on Docker containers. Choose the approach that fits your infrastructure.
Docker Compose (Standard)
The standard deployment uses a single docker-compose.yml file that starts all services:
docker compose up -d
Production topology
Internet
│
▼
Caddy (port 80/443, automatic HTTPS)
├── /api/* → Backend (Java 25, port 8080)
├── /offer/* → Backend (public offer pages)
└── /* → Frontend (Vue 3, static assets)
Backend → PostgreSQL (port 5432)
Backend → Gotenberg (port 3000, PDF generation)
backup-worker → PostgreSQL (scheduled backups)
Services
| Container | Image | Purpose |
|---|---|---|
frontend | Vue 3 + Caddy | Serves the SPA and proxies API requests |
backend | Java 25 / Spring Boot | REST API, business logic, PDF generation |
postgres | PostgreSQL 16 Alpine | Database |
gotenberg | Gotenberg 8 | HTML-to-PDF conversion (Chromium-based) |
backup-worker | Same as backend | Scheduled database and file backups |
Persistent volumes
| Volume | Contents |
|---|---|
postgres_prod_data | Database files |
backend_prod_uploads | Product images, company logos |
backend_prod_pdfs | Generated PDF documents |
backend_prod_backups | Backup archives |
backend_prod_geoip | MaxMind GeoIP database (optional) |
Coolify Deployment
Coolify is an open-source, self-hostable PaaS (Platform as a Service) — an alternative to Heroku, Vercel, or Railway that runs on your own server.
QuoteNode provides a dedicated docker-compose.coolify.yml configuration optimized for Coolify deployments.
Key differences from standard Docker Compose
- Coolify manages TLS — its own Caddy proxy handles HTTPS certificates and domain routing. The application containers do not include a separate TLS layer.
- Environment variables via Coolify UI — instead of
.envfiles, all configuration is set through Coolify’s web interface. - Health checks — Coolify monitors container health and can auto-restart failed services.
- Two deployment modes:
Mode A — Build from source
Coolify clones the repository and builds Docker images on deploy:
- Slower deploys (build step on every deploy)
- No CI/CD pipeline required
- Good for getting started quickly
Mode B — Pre-built images
GitHub Actions builds and pushes images to GitHub Container Registry (GHCR), and Coolify pulls the latest image:
- Fast deploys (just pull + restart)
- Requires CI/CD workflow setup
- Recommended for production
Required Coolify configuration
- Resource type: Dockerfile or Docker Image
- Internal port: 8080 (Coolify routes external traffic to this port)
- Health check path:
/health - Domain: configured at Coolify level (not in the application)
- HTTPS: enforced by Coolify automatically
Environment Variables Reference
Required (all deployments)
| Variable | Description |
|---|---|
DB_USERNAME | PostgreSQL username |
DB_PASSWORD | PostgreSQL password |
DB_ENCRYPTION_KEY | AES-256 key for sensitive field encryption (64 hex chars = 32 bytes; generate: openssl rand -hex 32) |
TIMING_TOKEN_SECRET | Secret for timing-based bot detection tokens |
PUBLIC_LINK_PASSWORD_SESSION_SECRET | Session secret for password-protected public links |
CORS_ALLOWED_ORIGINS | Allowed origins for CORS (your domain) |
Email (optional but recommended)
| Variable | Description |
|---|---|
SMTP_HOST | SMTP server hostname |
SMTP_PORT | SMTP port (typically 587) |
SMTP_USERNAME | SMTP auth username |
SMTP_PASSWORD | SMTP auth password |
SMTP_AUTH | Enable SMTP authentication (default: true) |
SMTP_STARTTLS | Enable STARTTLS (default: true) |
Backup (optional)
| Variable | Description |
|---|---|
BACKUP_ENABLED | Enable scheduled backups (default: false) |
BACKUP_CRON | Cron expression (default: 0 0 2 * * * — 2 AM daily) |
BACKUP_RCLONE_REMOTE | rclone remote for offsite backup storage |
BACKUP_GPG_RECIPIENT | GPG key ID for backup encryption |
Security (optional)
| Variable | Description |
|---|---|
FEATURE_2FA_ENABLED | Enable two-factor authentication (default: true) |
SECURITY_BOT_DETECTION_ENABLED | Enable timing-based bot detection (default: true) |
GEOIP_ENABLED | Enable GeoIP access control (default: false) |
Features
| Variable | Description |
|---|---|
PDF_ENABLED | Enable PDF generation (default: true) |
NOTIFICATIONS_ENABLED | Enable notification system (default: true) |
NOTIFICATIONS_EMAIL_ENABLED | Enable email notifications (default: false) |
LOG_LEVEL | Application log level (default: ERROR) |
Minimum Server Requirements
| Deployment | RAM | CPU | Disk |
|---|---|---|---|
| Evaluation / solo use | 2 GB | 1 core | 10 GB SSD |
| Small team (5-10 users) | 4 GB | 2 cores | 20 GB SSD |
| Mid-size team (10-50 users) | 8 GB | 4 cores | 50 GB SSD |
These are conservative estimates. Actual resource usage depends on catalog size, offer volume, and PDF generation frequency.