kirche-einfach/.env.example
Jonas Miederer 0b03399c1a
Some checks failed
/ test (push) Has been cancelled
/ build (push) Has been cancelled
/ validate (push) Has been cancelled
chore: LLM provider env for Langflow, persistent sessions, Fernet key doc
2026-09-27 09:14:57 +02:00

76 lines
No EOL
3.3 KiB
Text

# Copy to `.env` and fill in values. `.env` is gitignored.
# Generate secrets with: openssl rand -hex 32
# Validate before deploying: uv run python scripts/check_prod.py --env ../.env
# Dev defaults live in docker-compose.yml (APP_ENV=dev, FORGEJO_USERNAME=jonas).
# Prod overrides via this .env file (e.g. APP_ENV=prod).
# Paths resolve from the repo root in code.
FORGEJO_TOKEN=
# --- langflow (authoring UI) + lfx (flow runtime): pinned in lockstep ---
# LFX contract: major.minor of Langflow and LFX must match (patches are
# independent). Bump deliberately on both sides together (compose image pin
# below + Dockerfile.lfx ARG + backend dev dep `lfx~=`), then re-check
# backend/flows/*.json with `lfx upgrade --upgrade-flow=safe`.
LANGFLOW_VERSION=1.12.0
LANGFLOW_URL=http://langflow:7860
LANGFLOW_SUPERUSER=langflow
# Long random values (check_prod.py enforces length). Never leave the
# placeholders: the authoring UI is internet-facing.
LANGFLOW_SUPERUSER_PASSWORD=
# MUST be a valid Fernet key (44 chars, urlsafe-base64, 32 bytes) — any
# other value breaks variable decryption ("Fernet key must be 32
# url-safe base64-encoded bytes") and provider keys cannot be saved.
# Generate with:
# python -c "import base64,os;print(base64.urlsafe_b64encode(os.urandom(32)).decode())"
LANGFLOW_SECRET_KEY=
# Single static key; validated against env (LANGFLOW_API_KEY_SOURCE=env), superuser scope.
LANGFLOW_API_KEY=sk-
# Langflow stores flows in its own SQLite file when unset.
# --- lfx (flow runtime) ---
LFX_URL=http://lfx:6004
LFX_API_KEY=lfx-
# --- API self-reference for flow callbacks (must be reachable FROM lfx) ---
CALLBACK_BASE_URL=http://api:8000
# Shared secret for flow callbacks (POST /api/approvals carries it as
# X-Callback-Token). Long random value; empty disables callbacks.
CALLBACK_TOKEN=
# --- frontend mode: unset/preview serves the production bundle ---
# Dev sets FRONTEND_MODE=dev (HMR); .devcontainer/setup.sh provisions it.
# Never set `dev` in prod: the Vite dev server must not face the internet.
# FRONTEND_MODE=dev
# --- access management (request + approval, invite via email) ---
# Public frontend URL (magic links point here).
FRONTEND_URL=http://localhost:3000
# Comma-separated emails that become admins (role assignment + bootstrap).
ADMIN_EMAILS=
# Reply-To on outgoing mail; also receives new access-request notifications.
CONTACT_TO=
MAIL_FROM=
SMTP_HOST=
SMTP_PORT=587
SMTP_USERNAME=
SMTP_PASSWORD=
# --- LLM (optional; tests mock the provider without it) ---
# LLM_API_KEY=
# --- LLM provider für Langflow (Authoring-UI + LFX-Runtime) ---
# Langflow erzeugt daraus automatisch Global Variables (Credential-Typ);
# LFX liest dieselben Werte zur Laufzeit. Eine in der UI angelegte Global
# Variable mit gleichem Namen hat Vorrang, die Env-Variable ist Fallback.
# OpenAI-kompatibler Endpoint (auch selbst gehostet); ohne eigenen Provider
# leer lassen. Beispiel: https://openrouter.ai/api/v1
OPENAI_API_KEY=
OPENAI_BASE_URL=
# --- Langflow-Login-Sitzung ---
# Refresh-Token-Gültigkeit in Sekunden (Default 604800 = 7 Tage).
# 7776000 = 90 Tage: einmal einloggen, Container-Restarts übersteht die
# Session, solange LANGFLOW_SECRET_KEY stabil bleibt. In Prod kürzer wählen.
# LANGFLOW_REFRESH_TOKEN_EXPIRE_SECONDS=7776000
# Erstellt Global Variables aus Env (Credential-Typ), restart-fest:
# LANGFLOW_VARIABLES_TO_GET_FROM_ENVIRONMENT=OPENAI_API_KEY,OPENAI_BASE_URL