Skip to content
Q
QuoteNode

Operations

Environment Variables Reference

Complete reference for QuoteNode environment variables across production, development, Docker Compose, backup workers, and frontend dev tooling.

Environment Variables Reference

This page consolidates the environment variables currently used by the QuoteNode project.

The main source of truth is the application repository templates:

  • infra/.env.prod.example
  • infra/.env.dev.example
  • infra/.env.dev-sid
  • infra/docker-compose.*.yml

Use this page as an operator-oriented catalog. For a minimal getting-started setup, see the Installation Guide. For deployment topology, see Deployment Options.

How to read this reference

  • Prod means a variable belongs in a production .env file.
  • Dev means local development or demo stacks.
  • Compose means Docker Compose host-side wiring rather than the application itself.
  • Empty defaults usually mean “set this explicitly when you need the feature”.

Compose and local stack variables

These variables shape the local Docker Compose environment and frontend dev proxy wiring.

VariableScopePurposeTypical value
COMPOSE_PROJECT_NAMEDev / ComposePrevents container-name collisions between multiple local stacks.quotenode-dev, quotenode-dev-sid
POSTGRES_PORTDev / ComposeHost port mapped to PostgreSQL.5433, 5434
MAILPIT_PORTDev / ComposeHost port for Mailpit UI.8025, 8026
BACKEND_PORTDev / ComposeHost port for backend API.8091, 8092
FRONTEND_PORTDev / ComposeHost port for frontend app.5174, 5175
VITE_PUBLIC_API_BASEDev / FrontendBrowser-visible API base URL used by the Vite frontend in local stacks.http://localhost:8091, http://localhost:8092
APP_VERSIONProd / Dev / ComposeDocker image tag selected by Compose.latest, v0.9.0-alpha, v1.0.0
APP_CHANNELProd / Dev / ComposeProduct release channel embedded into build metadata and UI labels.alpha, stable
VITE_RELEASE_CHECK_ENABLEDProd / Dev / FrontendEnables the admin-only upstream release availability check.true, false
VITE_RELEASE_MANIFEST_URLProd / Dev / FrontendPublic JSON manifest URL used for upstream release checks.https://quotenode.dev/releases/latest.json
PROXY_MODEProd / Dev / ComposeChooses whether Caddy runs inside the stack (internal) or an external reverse proxy is used (external).internal, external
DOMAINProd / ComposePublic domain used by Caddy and public URLs when internal proxy mode is enabled.quotenode.example.com

Operator note: QuoteNode keeps runtime refresh checks (/app-version.json) separate from upstream release checks (https://quotenode.dev/releases/latest.json). The upstream notice is admin-only, never forces a reload, and can be disabled with VITE_RELEASE_CHECK_ENABLED=false.

Database and core runtime

VariableScopePurposeTypical value
DB_URLProd / DevJDBC connection string for PostgreSQL.jdbc:postgresql://postgres:5432/quotenode
DB_USERNAMEProd / DevDatabase user.quotenode, app
DB_PASSWORDProd / DevDatabase password.random 32+ chars in prod
DB_NAMEProd / Dev / ComposeDatabase name used by app and Compose.quotenode, app
SPRING_PROFILES_ACTIVEProd / DevActivates the Spring profile.prod, dev
CORS_ALLOWED_ORIGINSProd / DevAllowed browser origins for the API. Avoid * in production.https://yourdomain.com
LOG_LEVELProd / DevBaseline application log verbosity.ERROR, INFO, DEBUG

Docker log rotation and support diagnostics

VariableScopePurposeTypical value
DOCKER_LOG_MAX_SIZEProd / ComposeMaximum size of a single container log file before rotation.10m
DOCKER_LOG_MAX_FILEProd / ComposeNumber of rotated container log files to retain.5
SUPPORT_LOGS_BUFFER_SIZEProdSize of the in-app support log preview buffer.4000
SUPPORT_LOGS_PREVIEW_RATE_LIMIT_PER_MINUTEProdRate limit for support log preview requests.30
SUPPORT_LOGS_LOG_LEVEL_DEFAULT_TTL_MINUTESProdAuto-revert timeout for temporary log-level changes.15
SUPPORT_LOGS_LOG_LEVEL_MAX_TTL_MINUTESProdMaximum allowed temporary log-level escalation window.30
SUPPORT_LOGS_LOG_LEVEL_ALLOWED_SCOPESProdPackage scopes that may be temporarily escalated for diagnostics.dev.quotenode,...

Auth and session security

VariableScopePurposeTypical value
DB_ENCRYPTION_KEYProd / DevMain application-layer encryption key for sensitive data.64 hex chars in prod
TIMING_TOKEN_SECRETProd / DevHMAC secret for timing-token based bot protection.32+ random chars
PUBLIC_LINK_PASSWORD_SESSION_SECRETProd / DevSession secret for password-protected public offer links.32+ random chars
AUTH_PASSWORD_MIN_LENGTHProd / DevMinimum password length policy.12 in prod, 8 in dev
AUTH_PASSWORD_COMPLEXITY_LEVELProd / DevPassword complexity tier enforced by auth policy.2 in prod, 1 in dev
AUTH_SESSION_IDLE_TIMEOUT_MINProd / DevIdle timeout for authenticated sessions.30, 480
SECURITY_SESSION_ABSOLUTE_TIMEOUT_HProd / DevAbsolute maximum session lifetime.12, 24
SECURITY_MAX_FAILED_LOGINS_SOFTProd / DevFailed login threshold for soft warnings.5, 10
SECURITY_MAX_FAILED_LOGINS_TEMP_LOCKProd / DevFailed login threshold for temporary lockout.10, 20
SECURITY_MAX_FAILED_LOGINS_HARD_LOCKProd / DevFailed login threshold for hard lockout.20, 50
SECURITY_TEMP_LOCK_MINUTESProd / DevDuration of temporary lockout.30, 5
FEATURE_2FA_ENABLEDProd / DevMaster switch for two-factor authentication flows.true, false
SECURITY_REQUIRE_2FA_ROLESProd / DevRoles that must enroll in 2FA.ADMIN
SECURITY_BOT_DETECTION_ENABLEDProd / DevEnables the bot-detection layer.true, false
SECURITY_BOT_SCORE_WARN_THRESHOLDProd / DevBot score threshold for warning-only action.30
SECURITY_BOT_SCORE_BLOCK_THRESHOLDProd / DevBot score threshold for blocking action.70
SECURITY_IP_WHITELIST_FORCE_DISABLERuntime overrideEmergency operator override that disables stored IP whitelist enforcement.false

CRM, files, imports, and product media

VariableScopePurposeTypical value
CRM_DEDUP_NAME_SIMILARITY_THRESHOLDProd / Devpg_trgm similarity threshold for duplicate-company warnings.0.8
CRM_DEDUP_EMAIL_DOMAIN_WARNProd / DevWarn when business email domains match existing records.true
CRM_ATTACHMENT_MAX_SIZE_MBProd / DevMaximum CRM attachment size.25, 10
CRM_ATTACHMENT_ALLOWED_TYPESProd / DevAllowed CRM attachment extensions.pdf,doc,docx,...
CSV_IMPORT_MAX_ROWSProd / DevRow limit for CSV imports.5000
STORAGE_PATHProd / DevRoot directory for uploaded files./data/uploads, ./data/uploads
PIM_MEDIA_MAX_SIZE_MBProd / DevMaximum size for a single product image.5, 10
PIM_MEDIA_MAX_PER_PRODUCTProd / DevMaximum media items attached to one product.5, 10
PIM_MEDIA_THUMBNAIL_WIDTHProd / DevThumbnail width used during image processing.300
PIM_MEDIA_ALLOWED_TYPESProd / DevAllowed product media extensions.jpg,jpeg,png,webp,svg
IMPORT_ZIP_MAX_SIZE_MBProd / DevMaximum ZIP size for batch image import.100
IMPORT_ZIP_MAX_IMAGESProd / DevMaximum image count inside a ZIP import.1000
IMPORT_IMAGE_MAX_SIZE_MBProd / DevMaximum size of one imported image inside ZIP batches.5
IMPORT_IMAGE_FUZZY_THRESHOLDProd / DevThreshold for fuzzy filename-to-product matching.0.82

Shipping, FX, and offer defaults

VariableScopePurposeTypical value
SHIPPING_DEFAULT_VOLUMETRIC_DIVISORProd / DevVolumetric-weight divisor used by shipping calculations.4000
SHIPPING_OVERRIDE_REQUIRES_REASONProd / DevRequires a justification when shipping cost is overridden manually.true
FX_PROVIDERProd / DevFX rate source.NBP, MOCK, ECB, CUSTOM
FX_PROVIDER_URLProd / DevCustom provider URL override.empty unless CUSTOM
FX_REFRESH_INTERVAL_MINProd / DevAutomatic FX refresh cadence.60, 0
FX_DEFAULT_MARGIN_PERCENTProd / DevDefault percentage margin applied on top of provider rates.0
FX_DEVIATION_WARN_PERCENTProd / DevWarn threshold for manually adjusted FX rates.3
FX_DEVIATION_BLOCK_PERCENTProd / DevBlock threshold for manually adjusted FX rates.8
OFFER_NUMBER_PREFIXProd / DevPrefix used when numbering offers.OF
VariableScopePurposeTypical value
SMTP_HOSTProd / DevSMTP hostname used for offer sending and notifications.provider hostname, localhost
SMTP_PORTProd / DevSMTP port.587, 1025, 1026
SMTP_USERNAMEProd / DevSMTP auth username.provider account
SMTP_PASSWORDProd / DevSMTP auth password.provider secret
SMTP_AUTHProd / DevEnables SMTP authentication.true, false
SMTP_STARTTLSProd / DevEnables STARTTLS negotiation.true, false
PUBLIC_LINK_TOKEN_BYTESProd / DevEntropy used for generated public-link tokens.32
PUBLIC_LINK_DEFAULT_EXPIRY_DAYSProd / DevDefault validity window for public links.0 for no expiry
PUBLIC_RATE_LIMIT_OPEN_PER_HOURProd / DevHourly limit for opening public offer endpoints.60, 999
PUBLIC_RATE_LIMIT_ACTION_PER_HOURProd / DevHourly limit for public actions such as accept/reject.5, 999
TRACKING_IP_ANONYMIZEProd / DevEnables IP anonymization for tracking data.false
TRACKING_IP_ANONYMIZE_AFTER_DAYSProd / DevDelayed anonymization period for tracking IPs.0
TRACKING_RETENTION_DAYSProd / DevRetention window for public-link tracking data.365
CLIENT_CONFIRM_EMAIL_ENABLEDProd / DevSends a confirmation email to the client after acceptance.false
NOTIFICATIONS_ENABLEDProd / DevEnables the notifications subsystem.true
NOTIFICATIONS_EMAIL_ENABLEDProd / DevEnables email delivery for notifications.true, false
NOTIFICATIONS_PUBLIC_PREFERENCES_URLProdPublic URL for notification preference management.https://yourdomain.com/notifications/preferences
NOTIFICATIONS_PREFERENCE_TOKEN_TTL_DAYSProdToken validity for notification-preference links.30
NOTIFICATIONS_OFFER_EXPIRY_WARN_DAYSProd / DevDays-before-expiry reminder schedule for offers.7,2
NOTIFICATIONS_LICENSE_EXPIRY_WARN_DAYSProd / DevDays-before-expiry reminder schedule for licenses.30,14,7,1
REMINDERS_JOB_INTERVAL_MINUTESProd / DevPolling cadence for reminder jobs.5

PDF generation

VariableScopePurposeTypical value
PDF_ENABLEDProd / DevEnables PDF generation flows.true, false
PDF_GOTENBERG_URLProd / DevInternal URL of the Gotenberg service.http://gotenberg:3000
PDF_SYNC_TIMEOUT_MSProd / DevTimeout for synchronous PDF requests.10000, 5000
PDF_SYNC_MAX_ITEMSProd / DevMaximum offer-item count still handled synchronously.50
PDF_STORAGE_PATHProd / DevFilesystem path where generated PDFs are stored./data/pdfs, ./data/pdfs
PDF_RETENTION_DAYSProd / DevRetention period for generated PDFs.365
PDF_RETRY_BACKOFF_SECONDSProd / DevRetry schedule for async PDF jobs.30,120,600
PDF_WORKER_CONCURRENCYProd / DevWorker concurrency for PDF processing.2
PDF_WORKER_POLL_INTERVAL_MSProd / DevPolling interval for PDF jobs.2000

Licensing, reports, and maintenance

VariableScopePurposeTypical value
LICENSE_SKIP_SIGNATURE_CHECKProd / DevBypasses license signature validation. Never enable in production.false, true
LICENSE_EXPIRY_CHECK_INTERVAL_HProd / DevReload cadence for license-expiry checks.24
REPORTS_DEFAULT_PERIOD_DAYSProd / DevDefault reporting date range.30
REPORTS_EXPORT_MAX_ROWSProd / DevRow cap for report exports.10000

Backups, GeoIP, and privacy operations

VariableScopePurposeTypical value
BACKUP_ENABLEDProd / DevEnables scheduled backups.true, false
BACKUP_CRONProd / DevCron schedule for automated backups.0 0 2 * * *
BACKUP_RETENTION_DAILYProd / DevNumber of daily backups to retain.7
BACKUP_RETENTION_WEEKLYProd / DevNumber of weekly backups to retain.4
BACKUP_RETENTION_MONTHLYProd / DevNumber of monthly backups to retain.12
BACKUP_LOCAL_DIRRuntime / ComposeLocal directory used by backup scripts and backup-worker containers./app/data/backups
BACKUP_GPG_RECIPIENTProd / DevGPG recipient for backup encryption.fingerprint or email
BACKUP_RCLONE_REMOTEProd / Devrclone destination for offsite backups.s3:bucket/path
BACKUP_ENCRYPTION_ENABLEDRuntime overrideInternal or smoke-test switch for backup encryption behavior.false
GEOIP_ENABLEDProd / DevEnables GeoIP-based access controls.false
GEOIP_DB_PATHProd / DevPath to the MaxMind GeoIP database./app/data/geoip/...
SECURITY_GEOIP_ALLOWED_COUNTRIESProd / DevISO country allowlist for GeoIP checks.empty or PL,DE,CZ
MAXMIND_ACCOUNT_IDProdMaxMind account for GeoLite downloads.account ID
MAXMIND_LICENSE_KEYProdMaxMind license key.secret
GEOIP_EDITION_IDProdMaxMind edition identifier.GeoLite2-Country
GDPR_ANONYMIZE_AUTO_AFTER_DAYSProd / DevAutomatic anonymization horizon for privacy workflows.0

Practical guidance

  • Start from the production template for real deployments and from the development template for local work.
  • Treat DB_ENCRYPTION_KEY, TIMING_TOKEN_SECRET, PUBLIC_LINK_PASSWORD_SESSION_SECRET, and SMTP credentials as secrets that must be backed up securely.
  • Keep Compose-only ports and frontend variables out of production .env files unless your deployment model explicitly needs them.
  • If you need only the smallest viable production setup, the Installation Guide is intentionally shorter than this reference.

Last reviewed: Recently