Timer-App unter Versionsverwaltung stellen

Stand der laufenden Anwendung von 192.168.1.5:/opt/timer-app (systemd-Dienst
timer-app, Port 3003). Zeiterfassung mit Kostenberechnung: Node/Express,
SQLite, Anmeldung ausschliesslich ueber Authentik (OIDC, PKCE, RP-Logout) -
der frueher vorhandene Passwort-Login ist entfernt.

Nicht im Repo, bewusst:
- backend/.env und die .env-Sicherung: enthalten Session-Secret und die
  Authentik-Zugangsdaten. Vorlage ist backend/.env.example.
- data/: die Datenbank mit den echten Zeiterfassungen.
- node_modules/.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-04 17:47:07 +02:00
co-authored by Claude Opus 5
commit a7e77793a8
16 changed files with 5192 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
# ===========================================================================
# Timer App - Konfiguration
# Diese Datei nach ".env" kopieren und ausfuellen. Die .env gehoert NICHT
# in die Versionsverwaltung.
# ===========================================================================
# --- Netzwerk --------------------------------------------------------------
PORT=3003
# Auf welcher Adresse gelauscht wird.
# 127.0.0.1 = nur lokal erreichbar -> RICHTIG, wenn ein Reverse Proxy
# (nginx, Caddy, Traefik) davorsteht
# 0.0.0.0 = im ganzen Netz erreichbar -> nur ohne Reverse Proxy, und dann
# bitte COOKIE_SECURE=false beachten (siehe unten)
HOST=127.0.0.1
# Anzahl der Proxy-Ebenen davor. Bei genau einem Reverse Proxy: 1.
# Ohne Reverse Proxy: false
TRUST_PROXY=1
# --- Sicherheit ------------------------------------------------------------
# ACHTUNG, haeufigste Fehlerquelle beim Deployment:
# true -> Cookie wird NUR ueber HTTPS gesetzt. Laeuft die App ueber http://,
# scheitert der Login STUMM (Passwort wird akzeptiert, aber die
# Sitzung kommt nie zustande).
# false -> auch ueber http:// nutzbar. Nur im internen Netz vertretbar.
COOKIE_SECURE=true
# Zufaelliger Wert, unterschreibt die Sitzungs-Cookies.
# Erzeugen mit: npm run gen-secret
SESSION_SECRET=HIER_EINEN_ZUFALLSWERT_EINSETZEN
# Passwort fuer die Anmeldung. ZWEI Wege - bitte den ersten waehlen:
#
# 1) EMPFOHLEN: bcrypt-Hash. Erzeugen mit:
# npm run hash-password -- "MeinPasswort"
PASSWORD_HASH=
# 2) Notfalls Klartext. Wird beim Start gehasht, steht aber lesbar in dieser
# Datei. Der Server warnt beim Start. Nur eins von beiden setzen.
#PASSWORD=
# Anmeldeversuche pro Zeitfenster (Schutz gegen Durchprobieren)
LOGIN_MAX_ATTEMPTS=20
LOGIN_WINDOW_MIN=15
# --- Daten -----------------------------------------------------------------
# Pfad zur SQLite-Datei. Standard: ../data/timer.db relativ zum backend/.
# Das Verzeichnis muss existieren und fuer den Dienst-Benutzer schreibbar sein.
#DB_PATH=/var/lib/timer-app/timer.db
# Nur beim allerersten Start relevant: setzt den Anfangstarif.
# Danach wird der Tarif in der Datenbank gepflegt (Menue "Einstellungen").
RATE_PER_10MIN=10