Zwei Wege in den Betrieb, beide so weit gefahren, wie es hier moeglich war. deploy/install.sh richtet Debian 13 in neun Schritten ein: PostgreSQL 17 hoert nur am Unix-Socket, der Dienstnutzer hat kein Login, die Geheimnisse entstehen im Zielsystem und liegen 0600 bei root. Die Umgebungsdatei wird nie ueberschrieben -- auch nicht beim Aktualisieren, sonst enden alle Sitzungen und die verschluesselten Bind-Passwoerter waeren unlesbar. deploy/proxmox/laufzettel.sh legt den Container an und ruft install.sh darin auf. Der pct-Teil ist ungetestet, weil kein PVE-Host zur Verfuegung stand; die Gegenprobe steht als Pruefliste in docs/betrieb/proxmox.md, das Folge-Issue ist #024. Die Abnahme gegen alle 61 Kriterien hat drei Zusagen ohne Deckung gefunden, alle behoben: der Healthcheck des Webdienstes konnte nie bestehen (busybox loest localhost nach ::1 auf, Next lauscht nur auf IPv4), die CI-Pipeline konnte in keinem Job gruen werden (kein LDAP-Dienst, kein gestarteter Server, kein shellcheck), und der README nannte fuer die Entwicklungsdatenbank den falschen Port. Closes #19
93 lines
3.6 KiB
Bash
93 lines
3.6 KiB
Bash
# Laufzettel – Umgebungsvariablen.
|
||
# Kopieren nach .env und ausfuellen. Die .env gehoert nie ins Repo.
|
||
|
||
# ---------- Pflicht ----------
|
||
|
||
# Oeffentliche Adresse der Anwendung. Steckt in den QR-Codes und in der
|
||
# OIDC-Rueckruf-Adresse, muss also stimmen, wenn ein Reverse Proxy davor haengt.
|
||
APP_URL=https://laufzettel.example.de
|
||
|
||
# Geheimnis fuer Sitzungs-Cookies und die Verschluesselung des LDAP-Bind-Passworts.
|
||
# Mindestens 32 Zeichen. Erzeugen mit: openssl rand -base64 48
|
||
APP_SECRET=
|
||
|
||
# Zugang zur Datenbank.
|
||
#
|
||
# Im Compose-Stand baut sich die Adresse aus den drei POSTGRES_*-Werten zusammen:
|
||
# die Datenbank heisst dort `postgres` (Dienstname im internen Netz) und ist von
|
||
# aussen nicht erreichbar. DATABASE_URL wird dafuer **nicht** gelesen.
|
||
#
|
||
# DATABASE_URL gilt fuer alles, was ausserhalb der Container laeuft: `pnpm dev`,
|
||
# `pnpm prisma …`, `pnpm db:seed` von der Werkbank aus. Standard ist die
|
||
# Entwicklungsdatenbank aus docker-compose.dev.yml (Port 5434, umstellbar ueber DEV_DB_PORT).
|
||
POSTGRES_USER=laufzettel
|
||
POSTGRES_PASSWORD=
|
||
POSTGRES_DB=laufzettel
|
||
DATABASE_URL=postgresql://laufzettel:laufzettel@localhost:5434/laufzettel?schema=public
|
||
|
||
# ---------- Anmeldung ----------
|
||
|
||
# Lokaler Login mit E-Mail und Passwort. Fuer die Entwicklung und als Notfallzugang.
|
||
# Im Betrieb mit OIDC auf false setzen.
|
||
AUTH_LOCAL_ENABLED=false
|
||
|
||
# Generischer OIDC-Anbieter, Ziel ist authentik. Leer lassen, um OIDC abzuschalten.
|
||
OIDC_ISSUER=
|
||
OIDC_CLIENT_ID=
|
||
OIDC_CLIENT_SECRET=
|
||
OIDC_NAME=authentik
|
||
# Angeforderte Bereiche. Der Standard reicht fuer authentik mit dem
|
||
# Gruppen-Mapping aus docs/betrieb/authentik.md. Nur aendern, wenn der Anbieter
|
||
# die Gruppen unter einem anderen Bereich liefert.
|
||
OIDC_SCOPE=openid profile email groups
|
||
|
||
# Zuordnung der Rollen ueber den groups-Claim. Wird bei jedem Login neu ausgewertet.
|
||
OIDC_GROUP_ADMIN=lz-admin
|
||
OIDC_GROUP_EDITOR=lz-redakteur
|
||
OIDC_GROUP_TECHNICIAN=lz-techniker
|
||
OIDC_GROUP_VIEWER=lz-leser
|
||
|
||
# Optional, nur im Betriebsmodus Dienstleistung: Gruppen wie lz-kunde-MUS binden
|
||
# Benutzer an Kunden. TECHNIKER und LESER sehen dann nur ihre Kunden.
|
||
# Leer lassen heisst: keine Einschraenkung.
|
||
OIDC_CUSTOMER_GROUP_PREFIX=
|
||
|
||
# ---------- Betrieb ----------
|
||
|
||
# Adresse, auf die der Webdienst gebunden wird. Standard ist nur localhost,
|
||
# davor gehoert ein Reverse Proxy. Fuer direkten Zugriff im LAN: 0.0.0.0
|
||
BIND_ADDR=127.0.0.1
|
||
APP_PORT=3000
|
||
|
||
# Wird beim Bauen in die Anzeige unten links uebernommen.
|
||
APP_VERSION=0.1.0
|
||
GIT_SHA=
|
||
|
||
# ---------- Seed ----------
|
||
|
||
SEED_ADMIN_EMAIL=admin@firma.example
|
||
SEED_ADMIN_PASSWORD=
|
||
# INTERN (Standard) oder DIENSTLEISTUNG. SERVICE wird als Alias akzeptiert.
|
||
SEED_MODE=INTERN
|
||
|
||
# Name der eigenen Organisation. Im Modus INTERN taucht er nirgends in der
|
||
# Oberflaeche auf, wird aber beim Wechsel zu DIENSTLEISTUNG zum ersten Kunden.
|
||
SEED_ORG_NAME=Eigene Organisation
|
||
# 2 bis 6 Grossbuchstaben oder Ziffern. Im Modus INTERN unsichtbar; im Modus
|
||
# DIENSTLEISTUNG steht das Kuerzel auf Etiketten und in der Hostname-Regel.
|
||
SEED_ORG_KUERZEL=EIGEN
|
||
|
||
# ---------- Verzeichnis-Abgleich ----------
|
||
|
||
# Der Zeitplan laeuft im selben Prozess wie die Anwendung und sieht jede Minute
|
||
# nach, welche Verzeichnisquelle faellig ist; das Intervall steht je Quelle in
|
||
# der Datenbank. `false` schaltet ihn ab — fuer Einmal-Container, die nur
|
||
# Migrationen fahren, und fuer Testlaeufe.
|
||
ZEITPLAN_AKTIV=true
|
||
|
||
# ---------- Tests ----------
|
||
|
||
# Datenbank fuer Vitest. Ohne diese Variable ueberspringen sich die Datenbanktests.
|
||
# Passend zu docker-compose.dev.yml (Port 5434, umstellbar ueber DEV_DB_PORT):
|
||
TEST_DATABASE_URL=postgresql://laufzettel:laufzettel@localhost:5434/laufzettel_test?schema=public
|