Skip to content
Q
QuoteNode

Installation

Install with Coolify

Deploy QuoteNode with Coolify using the Docker Compose build pack and the dedicated Coolify compose file.

Install with Coolify

Coolify is the recommended public beta deployment path when you want managed HTTPS, Git-based deploys, container health checks, and a web UI for environment variables.

Repository settings

Create an application from the QuoteNode repository and use these settings:

SettingValue
Build PackDocker Compose
Base Directory/
Docker Compose Location/infra/docker-compose.coolify.yml
Public domainconfigure on frontend only, for example https://crm2.prodata.cc
Backend domainleave empty unless you know why it must be public
Backup worker domainleave empty
Gotenberg domainleave empty

Coolify’s proxy should route the domain to the frontend service. The backend, backup worker, PostgreSQL, and Gotenberg stay internal. Do not assign public domains to backend, backup-worker, postgres, or gotenberg; exposing those services directly increases the attack surface and can bypass the intended frontend/proxy boundary.

Build and start commands

For normal Coolify deployments, leave custom commands empty unless your Coolify setup requires them. If Coolify shows generated commands, they may look like:

docker compose build
docker compose up -d

Do not rely on Nixpacks Node settings for QuoteNode runtime in this mode. The Dockerfiles and Compose file define the runtime.

Advanced switches

Recommended defaults:

Coolify optionRecommendation
Inject Build Args to Dockerfileenabled
Auto Deployenabled for staging, optional for production
Git Submodulesonly if your checkout needs them
LFSonly if the repo uses Git LFS assets
Shallow Cloneacceptable
Proxy Force HTTPSenabled
Enable Gzip Compressionenabled
Strip Prefixesleave default unless deploying under a path prefix

Review Watch Paths before using them. A path such as services/api/** is stale for this repository layout; backend code lives under backend/** and frontend code under frontend/**.

Required environment variables

Set these in the Coolify environment UI:

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
# Client IP is auto-detected behind internal proxies and CDNs (Cloudflare included) — leave empty.
# Set only for an unusual proxy whose transport peer is a PUBLIC address to trust (IP/CIDR or hostname).
SECURITY_TRUSTED_PROXIES=
GEOIP_ENABLED=false
LOG_LEVEL=INFO
VITE_RELEASE_CHECK_ENABLED=true
VITE_RELEASE_MANIFEST_URL=https://quotenode.dev/releases/latest.json

If email delivery is enabled, also set:

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 uses Spring’s six-field cron format, so 0 0 2 * * * means 02:00 every day.

Some operator templates also include SERVICE_URL_FRONTEND=https://<frontend-domain>. Keep it aligned with the frontend domain if your deployment process uses it. The current Coolify compose file does not consume this variable directly; browser access is controlled by CORS_ALLOWED_ORIGINS, and notification preference links use NOTIFICATIONS_PUBLIC_PREFERENCES_URL.

Release metadata

Coolify source deployments may leave APP_VERSION empty unless a release tag is being built. Set the metadata when your CI or Coolify pipeline can provide it:

# APP_VERSION may be omitted for source deployments until a release tag is built.
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>

Use APP_CHANNEL=alpha, beta, rc, dev, or stable according to the release you deploy.

License safety

For real beta and public deployments:

LICENSE_SKIP_SIGNATURE_CHECK=false

Set it explicitly to false for real beta deployments. The compose file also defaults to false when the variable is omitted, but production operators should not rely on ambiguity here. Setting it to true disables license authenticity verification and may violate license terms; use that only in disposable development environments.

Post-deploy checks

After the deployment is healthy in Coolify:

  1. Open https://<frontend-domain>/health.
  2. Open the frontend domain in a browser.
  3. Login with the seeded administrator only for first bootstrap, then change the password.
  4. Create an offer.
  5. Generate a PDF.
  6. Create and open a public link.
  7. If email is enabled, verify SMTP and notification preference links.
  8. Check the admin license/version area for current version and release notice status.

Common Coolify problems

  • Public links fail when CORS_ALLOWED_ORIGINS does not match the browser origin exactly.
  • Email preference links fail when NOTIFICATIONS_PUBLIC_PREFERENCES_URL still points to localhost or an old domain.
  • Gotenberg should not receive a public domain; it is an internal PDF service.
  • Coolify-managed HTTPS requires the frontend domain to resolve to the Coolify server.
  • If build metadata is empty, the application can still run, but the admin version display may show less release detail.

Last reviewed: Recently