Files
jobtrackingapp/docs/configuration/environment-variables.md

8.8 KiB

Environment variables

This table covers the variables in .env.example, their Docker Compose mappings, and runtime variables read directly by the API, UI, AI service, or test harness. Blank means no repository default; “conditional” means required only when that feature/provider is enabled.

Database and application

Variable Required Service Secret Default Description
DATABASE_PROVIDER Production Compose/API No sqlite sqlite, mariadb, or mysql; also selects the backup path.
JOBTRACKER_CONNECTION_STRING Conditional API Yes — Server database connection string; ignored for SQLite.
APP_PUBLIC_BASE_URL Production API/UI No — Canonical external origin for links, callbacks, cookies, billing, and host validation.
APP_VERSION No API No — Release/version metadata.
APP_COMMIT_SHA No API No — Release commit metadata.
APP_BUILD_STAMP No API No — Release build timestamp metadata.
NEXT_PUBLIC_API_BASE_URL No UI build No /api Browser-visible API origin; leave blank for nginx same-origin proxy.

Authentication, identity, and billing

Variable Required Service Secret Default Description
AUTH_JWT_KEY Production API Yes — Local JWT signing key; required when auth is required.
AUTH_ADMIN_EMAIL Conditional API No — Seed/admin account email.
AUTH_ADMIN_PASSWORD Conditional API Yes — Seed/admin account password.
AUTH_ALLOW_REGISTRATION No API No false Enables local self-registration.
AUTH_REQUIRE_EMAIL_VERIFICATION No API No true Requires verified local-account email before sign-in.
ACCOUNT_DELETION_ENABLED No API No false Self-service deletion gate; keep disabled until retention/restore policy is approved.
TURNSTILE_SITE_KEY Conditional API/UI No — Public Turnstile site key.
TURNSTILE_SECRET_KEY Conditional API Yes — Server-side Turnstile verification secret.
AUTH_GOOGLE_CLIENT_ID Conditional API/UI No — Google sign-in client ID.
AUTH_MICROSOFT_CLIENT_ID Conditional API/UI No — Microsoft sign-in client ID.
AUTH_MICROSOFT_TENANT No API/UI No common Microsoft sign-in tenant policy; distinct from Graph tenant.
STRIPE_SECRET_KEY Conditional API Yes — Hosted Checkout/portal server key.
STRIPE_PRICE_PREMIUM Conditional API No — Recurring Premium Stripe Price ID (price_...).
STRIPE_WEBHOOK_SECRET Conditional API Yes — Signed billing webhook secret.

Mail-provider connections

Variable Required Service Secret Default Description
GOOGLE_GMAIL_CLIENT_SECRET Conditional API Yes — Gmail OAuth client secret.
MICROSOFT_CLIENT_ID Conditional API No — Microsoft Graph mail application ID; separate from sign-in ID.
MICROSOFT_CLIENT_SECRET Conditional API Yes — Microsoft Graph OAuth secret.
MICROSOFT_TENANT_ID Conditional API No — Graph mailbox tenant; separate from AUTH_MICROSOFT_TENANT.

AI and document processing

Variable Required Service Secret Default Description
AI_SERVICE_BASE_URL Docker API No http://ai-service:8001 Internal FastAPI service URL.
AI_SERVICE_TOKEN Docker/prod API/AI Yes — Shared backend-to-sidecar token; required by Compose except /health.
OLLAMA_BASE_URL No AI No http://ollama:11434 Ollama endpoint.
OLLAMA_MODEL No AI No qwen2.5:7b Local Ollama model.
AI_PROVIDER No API/AI No ollama Structured CV provider: ollama, gemini, or groq.
EXTERNAL_AI_ENABLED No API/AI No false Administrator gate for external processing.
AI_ROUTING_MODE No API/AI No local_first local_only, local_first, or external_only.
EXTERNAL_AI_ALLOWED_TASKS No AI No CV task list Allowlisted external task types.
EXTERNAL_AI_MAX_PROMPT_CHARS No AI No 24000 External prompt-size ceiling.
LOCAL_AI_CIRCUIT_FAILURE_THRESHOLD No AI No 3 Local-provider failures before circuit opens.
LOCAL_AI_CIRCUIT_OPEN_SECONDS No AI No 30 Circuit-open duration.
PARSER_TIMEOUT_SECONDS No AI No 25 Parser wall-clock budget.
PARSER_CPU_SECONDS No AI No 20 Linux parser CPU budget.
PARSER_MEMORY_MIB No AI No 512 Linux parser address-space budget.
PARSER_STALE_WORK_SECONDS No AI No 3600 Age at which stale parser work is reconciled.
GEMINI_API_KEY Conditional AI Yes — Gemini provider key.
GEMINI_MODEL No AI No gemini-2.0-flash Gemini model.
GROQ_API_KEY Conditional AI Yes — Groq provider key.
GROQ_MODEL No AI No llama-3.3-70b-versatile Groq model.
WORKER_AI_OPERATIONS_ENABLED No API No false Durable AI worker gate.
AI_QUEUE_WORKER_CONCURRENCY No API No 1 AI worker concurrency.
AI_QUEUE_GLOBAL_CAPACITY No API No 100 Global queued-operation capacity.
AI_QUEUE_PER_USER_CAPACITY No API No 10 Per-user queued-operation capacity.
AI_QUEUE_DEADLINE_MINUTES No API No 15 Queue deadline.
AI_QUEUE_OPERATION_TIMEOUT_SECONDS No API No 300 Operation timeout.

Ingress, deployment, maintenance, and backups

Variable Required Service Secret Default Description
WEB_PROXY_SUBNET Production Compose No 172.31.250.0/29 Dedicated nginx/backend network; verify no overlap.
INGRESS_PROXY_CIDRS Production Frontend No — Trusted reverse-proxy socket peers.
MAINTENANCE_GITEA_BASE_URL No API No https://git.cesnimda.uk Gitea API base for allowlisted maintenance jobs.
MAINTENANCE_GITEA_OWNER No API No cesnimda Gitea owner.
MAINTENANCE_GITEA_REPOSITORY No API No jobtrackingapp Gitea repository.
MAINTENANCE_GITEA_TOKEN Conditional API Yes — Narrowly scoped workflow-dispatch token.
BACKUP_TIMEZONE No Ops No Europe/Oslo Backup schedule timezone.
BACKUP_DAILY_RETENTION_DAYS No Ops No 30 Daily recovery-set retention.
BACKUP_MONTHLY_RETENTION_COUNT No Ops No 12 Monthly recovery-set count.
BACKUP_RCLONE_REMOTE No Ops Yes/depends — Optional encrypted remote destination.

Email and workers

Variable Required Service Secret Default Description
EMAIL_ENABLED No API No false Enables SMTP delivery.
EMAIL_SMTP_HOST Conditional API No smtp.gmail.com SMTP host.
EMAIL_SMTP_PORT Conditional API No 587 SMTP port.
EMAIL_SMTP_USER Conditional API No — SMTP username.
EMAIL_SMTP_PASSWORD Conditional API Yes — SMTP password/app password.
EMAIL_FROM No API No SMTP user Sender address.
EMAIL_FROM_NAME No API No Jobbjakt Sender display name.
EMAIL_FOLLOWUPREMINDERS_ENABLED No API No false Reminder-email gate.
EMAIL_FOLLOWUPREMINDERS_UPCOMINGDAYS No API No 2 Reminder look-ahead days.
EMAIL_SMTP_ENABLE_SSL No API No true SMTP TLS setting.
EMAIL_SMTP_TIMEOUT_MS No API No 15000 SMTP timeout.
WORKER_RULES_ENABLED No API No false Rules/ghosting worker gate.
WORKER_FOLLOWUP_REMINDERS_ENABLED No API No false Reminder worker gate.
WORKER_SAVED_SEARCH_ALERTS_ENABLED No API No true Saved-search alert worker gate.
SAVED_SEARCH_INTERVAL_HOURS No API No 6 Saved-search interval.
WORKER_DAILY_EXPORT_ENABLED No API No false Daily export worker gate.
WORKER_JOB_ENRICHMENT_ENABLED No API No false Job enrichment worker gate.

Runtime-only variables

The source also accepts CV_FORCE_AI_NORMALIZER, CV_PDF_BROWSER_PATH, PARSER_TEMP_ROOT, GEMINI_BASE_URL, GROQ_BASE_URL, AI_SERVICE_SKIP_MODEL_LOAD, and AI_SERVICE_EAGER_MODEL_LOAD. These are local/diagnostic/sidecar overrides and are intentionally not in the operator .env.example; see the relevant AI and testing guides. GOOGLE_GMAIL_REDIRECT_URI and MICROSOFT_REDIRECT_URI were present in the pre-cleanup local .env but have no current Compose/source consumer; they are retained locally for review and intentionally omitted from the template. REACT_APP_API_BASE_URL and REACT_APP_GOOGLE_CLIENT_ID are obsolete CRA names and must not be added back.