# Copy the needed values into Portainer under Stack > Environment variables. # Do not commit a filled production .env file. BACKEND_PORT=8112 FRONTEND_PORT=8113 LOG_LEVEL=info ALERT_DAYS_BEFORE=45 SCHEDULER_INTERVAL_MINUTES=60 APP_LOCALE=de AUTH_USERNAME=admin AUTH_PASSWORD=change-this-password AUTH_JWT_SECRET=change-this-to-a-long-random-secret AUTH_TOKEN_EXPIRES_IN_HOURS=12 WATCHTOWER_ENABLE=false # Optional image names if Portainer should tag/pull custom images. # BACKEND_IMAGE=registry.example.com/paperless-contract-companion-api:latest # FRONTEND_IMAGE=registry.example.com/paperless-contract-companion-ui:latest # Optional public app URL for generated iCal/app links. # APP_EXTERNAL_URL=https://contracts.example.com # Optional paperless-ngx integration. # PAPERLESS_BASE_URL=http://paperless:8000 # PAPERLESS_EXTERNAL_URL=https://paperless.example.com # PAPERLESS_TOKEN=replace-with-paperless-token # Optional ntfy push settings. # NTFY_SERVER_URL=https://ntfy.example.com # NTFY_TOPIC=contracts # NTFY_TOKEN=replace-with-ntfy-token # NTFY_PRIORITY=high # Optional mail settings. # MAIL_SERVER=smtp.example.com # MAIL_PORT=587 # MAIL_USERNAME=mailer # MAIL_PASSWORD=replace-with-mail-password # MAIL_USE_TLS=true # MAIL_FROM=contract-monitor@example.com # MAIL_TO=you@example.com # Optional fixed iCal token. # ICAL_SECRET=replace-with-long-random-token # Optional AI document analysis. # AI_ENABLED=false # AI_PROVIDER=openai # AI_BASE_URL=https://api.openai.com/v1 # AI_MODEL=gpt-4o-mini # AI_API_KEY=replace-with-ai-api-key # AI_SYSTEM_PROMPT= # AI_TIMEOUT_SECONDS=60 # AI_MAX_TOKENS=2000 # Optional paperless workflow webhook secret. # Paperless should send this value as x-contract-companion-secret. # PAPERLESS_WEBHOOK_SECRET=replace-with-long-random-webhook-secret