-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy path.env.example
More file actions
151 lines (136 loc) · 7.78 KB
/
Copy path.env.example
File metadata and controls
151 lines (136 loc) · 7.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# =============================================================================
# Lumio — Minimal Environment
# =============================================================================
# Diese Datei nach `.env` kopieren und die mit "CHANGEME" markierten Werte
# ersetzen. Für alle weiteren Optionen siehe .env.example.full.
#
# Schnelle Secret-Generierung:
# sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -base64 24 | tr -d '/+=')|" .env
# sed -i "s|^JWT_SECRET=.*|JWT_SECRET=$(openssl rand -base64 32 | tr -d '/+=')|" .env
# sed -i "s|^SESSION_SECRET=.*|SESSION_SECRET=$(openssl rand -base64 32 | tr -d '/+=')|" .env
# sed -i "s|^S3_ACCESS_KEY=.*|S3_ACCESS_KEY=$(openssl rand -hex 12)|" .env
# sed -i "s|^S3_SECRET_KEY=.*|S3_SECRET_KEY=$(openssl rand -base64 32 | tr -d '/+=')|" .env
# =============================================================================
# ---- Mode ------------------------------------------------------------------
# single = ein Studio | multi = SaaS mit mehreren Tenants (siehe SAAS_MODE.md)
DEPLOYMENT_MODE=single
# ---- Domain ----------------------------------------------------------------
# Leer = lokales Setup auf http://localhost
# Production: hier deine Domain rein, dann holt Caddy automatisch HTTPS
LUMIO_HOST=
PUBLIC_URL=http://localhost
# Optional: cookieloses Umami-Analytics (Stack unter infra/umami). Leer
# lassen = aus. Zum Aktivieren Domain setzen (A-Record + Umami-Stack nötig):
# LUMIO_UMAMI_HOST=stats.deine-domain.de
# Optional: Marketing-Sites neben dem App-Stack (eigene Repos/Container am
# selben Docker-Netz, siehe Caddyfile). Ohne diese Variablen sind die
# Blöcke tot und Caddy holt keine Certs dafür.
# LUMIO_MARKETING_CLOUD_DE_HOST=lumio-cloud.de
# LUMIO_MARKETING_APP_DE_HOST=lumio-app.de
# LUMIO_MARKETING_CLOUD_COM_HOST=lumio-cloud.com
# LUMIO_MARKETING_CLOUD_COM_WWW_HOST=www.lumio-cloud.com
# ---- Feature-Flags (optional) ----------------------------------------------
# Beta-/Experimental-Features global aktivieren (kommasepariert). Im
# Multi-Mode kann der Super-Admin pro Tenant überschreiben. Verfügbar:
# print_shop — Endkunden bestellen Prints aus Galerien (Beta)
# lightroom_plugin — Upload aus Lightroom Classic via API-Token (Beta)
# advanced_analytics — Heatmaps, Conversion-Tracking (Experimental)
# ai_tagging — KI-Auto-Tagging, braucht ML-Worker (docker-compose.ml.yml)
# video_streaming_4k — HLS bis 2160p (mehr Storage/Bandbreite)
# FEATURES_ENABLED=print_shop
# Print-Provider global aktivieren (Self-Hosting; im Multi-Mode gewinnt der
# Super-Admin-Toggle unter /super/print-providers). Self-Print (Bestellungen
# gehen direkt ans Studio) ist immer verfügbar. Beide Labs brauchen eigene
# API-Zugangsdaten, die das Studio unter Print-Shop → Provider hinterlegt:
# prodigi — Prodigi Print API v4 (Beta)
# gelato — Gelato Order Flow API v4 (Beta)
# PRINT_PROVIDERS_ENABLED=prodigi,gelato
# ---- Worker-Tuning (optional) ----------------------------------------------
# Der Worker faehrt zwei Lanes: eine schnelle fuer Bild-Renditions/ZIPs
# (WORKER_FAST_CONCURRENCY, Default 2) und eine schwere fuer Video/RAW/
# KI-Tagging (WORKER_CONCURRENCY, Default 4). So koennen lange Video-Jobs
# die Bildverarbeitung nicht aufhalten. Wer WORKER_QUEUES explizit setzt
# (Multi-Node), bekommt wie bisher EINEN Prozess mit genau diesen Queues.
# WORKER_CONCURRENCY=4
# WORKER_FAST_CONCURRENCY=2
# ---- Rechtliche Links (Impressum / Datenschutz) ---------------------------
# Werden als Footer-Links auf Login-, Galerie- und Studio-Seiten angezeigt.
# Pflicht in DE für oeffentlich erreichbare Seiten. Trage hier die URLs
# deiner eigenen Impressum-/Datenschutz-Seite ein (absolute URL empfohlen).
# Bleiben sie leer, wird kein Link angezeigt.
LUMIO_LEGAL_IMPRINT_URL=
LUMIO_LEGAL_PRIVACY_URL=
# ---- Passwords & Secrets (CHANGEME!) --------------------------------------
# Datenbank: User/DB-Name sind interne Defaults (Docker-Netz). Passwort
# zwingend ersetzen.
POSTGRES_USER=lumio
POSTGRES_DB=lumio
POSTGRES_PASSWORD=CHANGEME_use_openssl_rand_base64_24
JWT_SECRET=CHANGEME_use_openssl_rand_base64_32
SESSION_SECRET=CHANGEME_use_openssl_rand_base64_32
# ---- Storage (MinIO als Default) -------------------------------------------
# Für externes S3 (Hetzner, R2, B2, etc.) siehe docs/STORAGE.md
# Endpoint + Bucket zeigen auf den mitgelieferten MinIO-Container.
S3_ENDPOINT=http://minio:9000
# Öffentliche Basis-URL für presigned Upload-/Download-URLs (das, was der
# BROWSER erreichen können muss). Leer lassen = automatisch: die API
# signiert dann auf http://<aufgerufener-host>:9000 (funktioniert für
# localhost, Server-IP und Domain ohne TLS). Mit eigener Domain + HTTPS
# hier die S3-Domain setzen, z.B. https://s3.deine-domain.de (siehe
# docs/SELFHOSTING.md und LUMIO_S3_HOST im Caddyfile).
# S3_PUBLIC_URL=
S3_BUCKET=lumio
S3_ACCESS_KEY=CHANGEME_random_string
S3_SECRET_KEY=CHANGEME_random_string
# ---- Mail (optional, aber empfohlen) ---------------------------------------
# Wenn leer: Einladungs- und Reset-Mails werden NICHT versendet.
# DACH-Empfehlung: Brevo (smtp-relay.brevo.com, 300 Mails/Tag gratis)
SMTP_HOST=
SMTP_PORT=587
SMTP_USER=
SMTP_PASSWORD=
SMTP_FROM="Lumio <noreply@example.com>"
# Optional: Antwortadresse (Reply-To). Empfohlen wenn SMTP_FROM eine
# noreply-Adresse ist — Antworten der Empfänger landen dann hier.
# SMTP_REPLY_TO="Lumio Support <support@example.com>"
# Optional: Kontaktadresse, die in System-Mails genannt wird (Willkommen,
# Löschbestätigung, Sicherheitshinweise). Ohne Wert fällt Lumio auf die
# Adresse aus SMTP_REPLY_TO zurück; ist auch die leer, nennen die Mails
# gar keine Kontaktadresse.
# SUPPORT_EMAIL="support@example.com"
# Optional: separate Adresse für Produkt-Feedback. Ohne Wert = SUPPORT_EMAIL.
# FEEDBACK_EMAIL="feedback@example.com"
# Sprache der ausgehenden E-Mails, wenn am Studio bzw. am einzelnen Nutzer
# keine hinterlegt ist ("de" oder "en"). Betrifft ausschließlich Mails; die
# Sprache der Oberfläche richtet sich weiterhin nach dem Browser.
# Studios setzen ihre Kundensprache im Studio unter Einstellungen.
# DEFAULT_MAIL_LOCALE="de"
# Fusszeile der Mails. Leer gelassen steht dort "Verschickt von Lumio" in der
# Sprache des Empfaengers, verlinkt aufs Projekt-Repository.
#
# Ein eigener Text ersetzt das woertlich — z.B. fuer eine gehostete Instanz,
# die dort ihre eigene Adresse nennen will. {link} wird durch den verlinkten
# Produktnamen ersetzt.
#
# Achtung: eigener Text wird NICHT uebersetzt und erscheint so in jeder Mail,
# unabhaengig von der Sprache des Empfaengers. Bei mehreren Sprachen auf einer
# Instanz ist der Standard meist die bessere Wahl.
# MAIL_FOOTER_TEXT="Verschickt von {link} — Foto-Galerien für Profis, gehostet in Deutschland."
# MAIL_FOOTER_URL="https://lumio-cloud.de"
# =============================================================================
# Für erweiterte Konfiguration (Storage-Provider, Billing, ML-Features,
# Custom-Ports, Limits, Observability):
#
# cp .env.example.full .env.example.full.local
# # ... oder einzelne Werte aus .env.example.full hierher kopieren
# =============================================================================
# ---------------------------------------------------------------------------
# Billing (nur relevant für kommerzielle SaaS-Nutzung mit Stripe).
# Self-Hoster für das eigene Studio lassen das auf "false" — dann sind
# Trial-/Read-only-Lifecycle und Stripe-Endpoints komplett inaktiv.
# WICHTIG: Diese Variable wird von API UND Worker gelesen. Der Worker
# (consumer.py) triggert den Trial-/Read-only-Lifecycle (enforce_limits)
# nur, wenn sie "true" ist. Bei Multi-Node genügt es, wenn der Worker auf
# dem Hauptserver sie bekommt; auf Worker-Nodes optional in .env.worker.
# ---------------------------------------------------------------------------
# BILLING_ENABLED=false