Files
anouma/.env.example
T
maro 7edeafe7c3
CI / test (push) Canceled after 0s
Release / promote-and-deploy (push) Canceled after 0s
CI / build-image (push) Canceled after 0s
Improve email branding and SMTP envelope
2026-09-18 12:51:40 +02:00

118 lines
6.4 KiB
Bash

# This file documents every variable the app/deployment actually reads.
# In production, setup.sh generates the real file at /opt/anouma/.env for
# you - you shouldn't need to hand-edit this. For local development, copy
# this to .env at the repo root and fill in DATABASE_URI/PAYLOAD_SECRET
# (see README.md → "Lokale Entwicklung").
# ── Database ────────────────────────────────────────────────────────────
# PostgreSQL connection string used by Payload. setup.sh fills this in
# automatically (host "postgres" when running the full stack via Docker
# Compose, matching POSTGRES_USER/PASSWORD/DB below). For a host-only Next
# dev server against the Dockerized Postgres, use "127.0.0.1" instead.
DATABASE_URI=postgresql://postgres:postgres@postgres:5432/anouma
# Only used by the "postgres" service in docker-compose.yml - keep these in
# sync with DATABASE_URI above (setup.sh does this for you).
POSTGRES_USER=postgres
POSTGRES_PASSWORD=replace-with-a-long-random-secret
POSTGRES_DB=anouma
# ── Core secrets ────────────────────────────────────────────────────────
# Signs Payload's auth tokens/cookies. Generate with: openssl rand -hex 32
PAYLOAD_SECRET=replace-with-a-long-random-secret
# Signs meeting join tokens (kept separate from PAYLOAD_SECRET on purpose).
# Generate with: openssl rand -hex 32
MEETING_SESSION_SECRET=replace-with-a-long-random-secret
# Salts the daily-rotating, non-reversible visitor hash used for Analytics
# session grouping (kept separate from PAYLOAD_SECRET on purpose, see
# lib/analytics/salt.ts). Generate with: openssl rand -hex 32
ANALYTICS_SALT_SECRET=replace-with-a-long-random-secret
# Sent as "Authorization: Bearer <value>" by the external cron job that
# triggers /api/cron/event-reminders. Generate with: openssl rand -hex 32
CRON_SECRET=replace-with-a-long-random-secret
# ── Public URL ──────────────────────────────────────────────────────────
# Used by Payload for absolute admin/media links, and to build meeting join
# links inside emails. Set this to the real domain in production.
NEXT_PUBLIC_SERVER_URL=http://localhost:3000
# Cloudflare Turnstile. The site key is public and is passed to the client
# from the server; the secret is used only by the server-side Siteverify call.
TURNSTILE_SITE_KEY=0x4AAAAAAE7AqgHiQF9DffQO
TURNSTILE_SECRET_KEY=
# Local development value. Production must contain only the public hostname:
# TURNSTILE_HOSTNAMES=anouma.org
TURNSTILE_HOSTNAMES=localhost,127.0.0.1
# Port the app container publishes on the host (behind a reverse proxy this
# usually doesn't need to be reachable directly - see DEPLOYMENT.md).
APP_PORT=3000
# ── Email (SMTP) ────────────────────────────────────────────────────────
# The existing ANOUMA mail system - no external newsletter service.
SMTP_HOST=
SMTP_PORT=587
SMTP_USER=
SMTP_PASSWORD=
# Mailbox address used by the SMTP relay. The app displays ANOUMA as the name.
SMTP_FROM=support@anouma.org
# Keep true for publicly trusted SMTP certificates. Set false only when the
# configured SMTP proxy intentionally uses a private/self-signed certificate.
SMTP_TLS_REJECT_UNAUTHORIZED=true
# Address used as Reply-To for CMS replies. Configure this mailbox with an
# inbound provider/webhook that POSTs replies to /api/email/inbound.
INBOUND_REPLY_TO=reply-to@anouma.org
# Shared secret sent as x-inbound-secret (or Authorization: Bearer ...) by the
# inbound email provider. Generate with: openssl rand -hex 32
INBOUND_EMAIL_SECRET=
# ── LiveKit SFU / embedded TURN ─────────────────────────────────────────
# Public HTTPS endpoint of the self-hosted LiveKit server. The app converts
# https:// to wss:// for browsers and uses the same endpoint for its API.
# Put a trusted TLS reverse proxy in front of LiveKit (normally on :7880).
LIVEKIT_URL=https://livekit.example.com
# Keep these values private. setup.sh generates them automatically.
LIVEKIT_API_KEY=LKreplace-with-setup-secret
LIVEKIT_API_SECRET=replace-with-setup-secret
# ── SEO ──────────────────────────────────────────────────────────────────
# Optional Google Search Console domain-verification token (Search Console →
# Settings → Ownership verification → HTML tag → the "content" value only).
# Leave empty if not verifying with Google. Never commit a real value here.
GOOGLE_SITE_VERIFICATION=
# ── Docker networking ───────────────────────────────────────────────────
# Internal network name for ANOUMA's own containers.
DOCKER_NETWORK=anouma-network
# Name of an existing external Docker network to join (e.g. Nginx Proxy
# Manager's network) so a reverse proxy can reach the app container
# directly. Leave empty if you don't use one - setup.sh auto-detects this.
NPM_NETWORK=
# ── Backups (used by deploy.sh) ─────────────────────────────────────────
# How long (days) to keep database backups created before every deployment.
BACKUP_RETENTION_DAYS=14
# ── Container registry & deployment (used by deploy.sh) ────────────────
# GitHub Container Registry. deploy.sh builds nothing - it only ever pulls
# the image that GitHub Actions built and pushed.
REGISTRY=ghcr.io
REGISTRY_REPO=whitehai11/anouma
# Only needed if the registry/repository requires authentication to pull.
# Use a GitHub token with at least read:packages as the password, not your
# account password.
REGISTRY_USERNAME=
REGISTRY_PASSWORD=
# Set automatically by deploy.sh on every successful deploy - do not edit
# by hand. Empty until the first release has been deployed.
ANOUMA_IMAGE=
# Informational only (shown in the setup summary) - actual automatic
# deployment is controlled by whether release.yml + its GitHub secrets are
# configured, not by this flag.
AUTO_DEPLOY=true