diff --git a/.env.example b/.env.example index d64b232..ac2f645 100644 --- a/.env.example +++ b/.env.example @@ -19,15 +19,31 @@ AUTH_URL=http://localhost:3000 # Hinter einem Reverse Proxy auf true setzen. AUTH_TRUST_HOST=true -# --- Erreichbarkeit --------------------------------------------------------- -# Auf welcher Adresse und welchem Port horcht die Anwendung? +# --- Erreichbarkeit: HIER MUSST DU DICH ENTSCHEIDEN ------------------------- # -# Proxy auf DEMSELBEN Server: 127.0.0.1 (Standard, nichts zu tun) -# Proxy auf einem ANDEREN: die Adresse des privaten Netzes bzw. des -# WireGuard-Tunnels, z.B. 10.0.0.5 +# Auf welcher Adresse soll die Anwendung erreichbar sein? Das haengt davon +# ab, WO dein Reverse Proxy laeuft. Waehl genau eine Zeile aus: # -# 0.0.0.0 nur, wenn eine Firewall den Port ausschliesslich fuer die IP des -# Proxy-Servers oeffnet. Die Anwendung beendet kein TLS. +# Proxy auf DEMSELBEN Server +# APP_BIND=127.0.0.1 +# Von aussen kommt niemand heran, nur der Proxy nebenan. Sicherste +# Variante - aber ein Proxy auf einem anderen Rechner erreicht die +# Anwendung damit NICHT. +# +# Proxy auf einem ANDEREN Server, privates Netz oder WireGuard vorhanden +# APP_BIND=10.0.0.5 <- die Adresse DIESES Servers in dem Netz +# Erste Wahl, wenn der Proxy woanders steht. +# +# Proxy auf einem ANDEREN Server, kein privates Netz +# APP_BIND=0.0.0.0 +# Nur zusammen mit einer Firewallregel, die den Port ausschliesslich +# fuer die IP des Proxy-Servers oeffnet: +# ufw allow from to any port 3000 proto tcp +# ufw deny 3000/tcp +# +# Zwischen Proxy und Anwendung laeuft unverschluesseltes HTTP - die +# Anwendung beendet kein TLS. Dieser Weg darf nie durchs offene Netz gehen. +# Einzelheiten: docs/INSTALLATION.md, Schritt 7. APP_BIND=127.0.0.1 APP_PORT=3000 diff --git a/CHANGELOG.md b/CHANGELOG.md index a6f1f0b..995fa4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,38 @@ Wiederherstellung*. _Noch nichts._ +## [1.0.3] – 2026-08-22 + +Keine Änderung am Programm — nur an der Konfigurationsvorlage und der +Anleitung. Ein Neubau des Abbilds ist nicht nötig. + +### Behoben + +- **`.env.example` band die Anwendung stillschweigend an `127.0.0.1`.** + Der Wert stand dort als fertig ausgefüllte Zeile zwischen lauter anderen + fertigen Zeilen. Wer die Datei kopiert hat und seinen Reverse Proxy auf + einem **anderen** Server betreibt, kam nicht an die Anwendung heran — + und der Fehler sah aus, als läge es am Proxy. + + Jetzt steht dort eine Entscheidung mit drei benannten Fällen statt eines + Vorgabewerts. Der sichere Standard bleibt `127.0.0.1`; er wird nur nicht + mehr als „schon erledigt" präsentiert. + + Für bestehende Installationen genügt eine Zeile in der `.env`: + + ```bash + APP_BIND=10.0.0.5 # Adresse, über die der Proxy diesen Server erreicht + docker compose up -d + ``` + +### Geändert + +- **`docs/INSTALLATION.md`** nennt `APP_BIND` jetzt schon in Schritt 3, wo + die `.env` ausgefüllt wird — nicht erst in Schritt 7, wo der Proxy + drankommt. Dazu ein eigener Abschnitt in der Fehlersuche: „Der Proxy + erreicht die Anwendung nicht", mit den zwei `curl`-Proben, die den + Unterschied zwischen falscher Bindeadresse und Firewall zeigen. + ## [1.0.2] – 2026-08-22 ### Behoben @@ -264,7 +296,8 @@ Was davon wann angegangen wird, steht in [`docs/ROADMAP.md`](docs/ROADMAP.md). --- -[Unveröffentlicht]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.0.2...HEAD +[Unveröffentlicht]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.0.3...HEAD +[1.0.3]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.0.2...v1.0.3 [1.0.2]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.0.1...v1.0.2 [1.0.1]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.0.0...v1.0.1 [1.0.0]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/releases/tag/v1.0.0 diff --git a/docs/INSTALLATION.md b/docs/INSTALLATION.md index d46648b..785eed7 100644 --- a/docs/INSTALLATION.md +++ b/docs/INSTALLATION.md @@ -205,6 +205,14 @@ S3_SECRET_ACCESS_KEY= # --- Sicherung --- SICHERUNG_PASSWORT= + +# --- Erreichbarkeit --- +# Steht dein Proxy auf einem ANDEREN Server, muss hier die Adresse hinein, +# ueber die er diesen Server erreicht. Bleibt es bei 127.0.0.1, kommt er +# NICHT heran - und der Fehler sieht aus, als sei der Proxy schuld. +# Welcher Wert der richtige ist, steht in Schritt 7a. +APP_BIND=127.0.0.1 +APP_PORT=3000 ``` > **`AUTH_URL` muss exakt der Adresse entsprechen**, unter der du die @@ -875,6 +883,41 @@ Fehlt eine Umgebungsvariable, sagt die Anwendung beim Start, welche. Die `.env` liegt nicht neben der `docker-compose.yml`, oder die Zeile ist leer. Prüf mit dem Befehl aus Schritt 3. +### Der Proxy erreicht die Anwendung nicht („502", „Connection refused") + +Fast immer steht in der `.env` noch `APP_BIND=127.0.0.1`, während der +Proxy auf einem anderen Server läuft. Dann horcht die Anwendung nur auf +der Loopback-Adresse — erreichbar ausschließlich vom Anwendungsserver +selbst. + +Prüf, worauf sie tatsächlich horcht: + +```bash +docker compose ps +# unter PORTS muss die Adresse stehen, die der Proxy erreicht, +# NICHT 127.0.0.1 +``` + +Und ob sie überhaupt antwortet — erst lokal, dann vom Proxy-Server aus: + +```bash +# auf dem Anwendungsserver +curl -s http://127.0.0.1:3000/api/gesundheit + +# auf dem Proxy-Server +curl -s http://:3000/api/gesundheit +``` + +Antwortet der erste, aber nicht der zweite, ist `APP_BIND` falsch oder +eine Firewall dazwischen. Setz den richtigen Wert (Schritt 7a) und + +```bash +docker compose up -d +``` + +Ein Neubau des Abbilds ist dafür **nicht** nötig — es ist nur eine +Umgebungsänderung, der Behälter wird neu erzeugt. + ### Port 3000 ist schon belegt ```bash diff --git a/package.json b/package.json index 03d3189..bcf3982 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "betreuungs-cockpit", - "version": "1.0.2", + "version": "1.0.3", "private": true, "description": "Arbeits- und Dokumentationswerkzeug fuer die ehrenamtliche rechtliche Betreuung", "engines": { diff --git a/src/lib/version.ts b/src/lib/version.ts index b349249..cc67e17 100644 --- a/src/lib/version.ts +++ b/src/lib/version.ts @@ -17,7 +17,7 @@ */ /** Muss zur "version" in der package.json passen. */ -export const VERSION = '1.0.2' +export const VERSION = '1.0.3' /** * Kurzer Git-Stand, beim Bauen hineingereicht: