# ============================================================================== # .env.example – OpenProject Docker Compose environment template # ============================================================================== # 1. cp .env.example .env # 2. Edit .env with real values (never commit .env to version control) # 3. docker compose up -d --build --pull always # ============================================================================== # --------------------------------------------------------------------------- # Core – OpenProject behaviour # --------------------------------------------------------------------------- # Docker image tag. Use XX-slim for the compose setup (recommended). TAG=17-slim # Protocol flag. Set to "false" for first-run / local dev without TLS. # In production set to "true" and terminate TLS at your reverse proxy. OPENPROJECT_HTTPS=true # Public hostname + optional port that appears in every generated URL and # e-mail link. Must match what end-users type in the browser. OPENPROJECT_HOST__NAME=project.martinhal.tech # If OpenProject is mounted at a sub-path (e.g. /op), set it here. # Leave empty for root mount. OPENPROJECT_RAILS__RELATIVE__URL__ROOT= # Edition: "standard" (community) or "bim" OPENPROJECT_EDITION=standard # --------------------------------------------------------------------------- # Database – PostgreSQL # --------------------------------------------------------------------------- # Password for the postgres superuser created by the db container. # Must match the :password segment in DATABASE_URL below. POSTGRES_PASSWORD=Chu929qw4Nf67r # Full connection string. Edit only if you point at an external database. DATABASE_URL=postgres://postgres:Chu929qw4Nf67r@db/openproject?pool=20&encoding=unicode&reconnect=true # Where Docker stores the PostgreSQL data volume. # Use a named volume (default) or an absolute host path. PGDATA=pgdata # --------------------------------------------------------------------------- # Attachments / assets volume # --------------------------------------------------------------------------- # Use a named volume (default) or an absolute host path, e.g. # OPDATA=/var/openproject/assets # If using an absolute path, run: # sudo mkdir -p /var/openproject/assets # sudo chown 1000:1000 -R /var/openproject/assets OPDATA=opdata # --------------------------------------------------------------------------- # Networking # --------------------------------------------------------------------------- # Port exposed by the Caddy proxy to the host. # Bind to 0.0.0.0 (public) or 127.0.0.1 (localhost-only). PORT=8080 # --------------------------------------------------------------------------- # Threads # --------------------------------------------------------------------------- RAILS_MIN_THREADS=4 RAILS_MAX_THREADS=16 # --------------------------------------------------------------------------- # Collaborative editing – Hocuspocus # --------------------------------------------------------------------------- # URL where the browser connects for real-time collaboration. # Leave empty to use the auto-generated value: wss:///hocuspocus COLLABORATIVE_SERVER_URL= # ⚠️ CHANGE THIS in production – it protects the WebSocket endpoint. COLLABORATIVE_SERVER_SECRET=replace_with_a_long_random_string # --------------------------------------------------------------------------- # Inbound email (IMAP) – optional # --------------------------------------------------------------------------- IMAP_ENABLED=false # =========================================================================== # SMTP – Outbound e-mail ← fill these in to enable notification mails # =========================================================================== # Docs: # /docs/installation-and-operations/configuration/outbound-emails/ # /docs/installation-and-operations/configuration/environment/ # # These variables are forwarded to *every* OpenProject container that may # need to send mail (web, worker). Setting them here disables the manual # SMTP form inside Administration → Emails and notifications. # =========================================================================== # Delivery method – keep as "smtp". EMAIL_DELIVERY_METHOD=smtp # Hostname of your SMTP relay. # Examples: # Gmail → smtp.gmail.com # Outlook/O365 → smtp-mail.outlook.com (or smtp.office365.com) # SendGrid → smtp.sendgrid.net # Mailgun → smtp.mailgun.org # Custom/on-prem → smtp.yourdomain.com SMTP_ADDRESS=smtp.purelymail.com # Port – 587 (STARTTLS, recommended) | 465 (implicit SSL) | 25 (plain, avoid) SMTP_PORT=587 # HELO / EHLO domain sent to the SMTP server. # Usually the public domain of your OpenProject instance. SMTP_DOMAIN=smtp.purelymail.com # Authentication method. # plain – most cloud providers (Gmail, O365, SendGrid, Mailgun …) # login – some on-premises / legacy servers # cram_md5 – rarely used SMTP_AUTHENTICATION=plain # SMTP user name. # Gmail → your full Gmail address # SendGrid → apikey (literal string) # Mailgun → postmaster@your-sandbox.mailgun.org # On-premises → usually an e-mail address SMTP_USER_NAME=projects@martinhakl.tech # SMTP password / API key. # ⚠️ Never commit this file after editing – use .gitignore on .env. # Gmail → App Password (not your Google password) # SendGrid → API key starting with SG.xxxxx # Mailgun → API key from Mailgun dashboard SMTP_PASSWORD=Chu929qw4Nf67r # STARTTLS – upgrade a plain connection to encrypted mid-session. # Set to "true" when SMTP_PORT=587 (the common case). # Set to "false" when SMTP_PORT=465 (implicit SSL) or 25. SMTP_ENABLE_STARTTLS_AUTO=true # Implicit SSL – set to "true" only when SMTP_PORT=465. SMTP_SSL=false # Connection timeout in seconds. Increase if your SMTP relay is slow. SMTP_TIMEOUT=5 # --------------------------------------------------------------------------- # Envelope sender ("From" address in outgoing mails) # --------------------------------------------------------------------------- # Must be a valid address on the SMTP account, unless your provider # allows arbitrary sender addresses. MAILER_FROM_ADDRESS=projects@martinhakl.tech