76 lines
No EOL
3.3 KiB
Text
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 |