From f42cd3167394d64ffcd26c3d53dbac6b273d5b90 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 7 Sep 2026 00:56:38 +0200 Subject: [PATCH] feat(docker): host-adresse und port konfigurierbar machen BIND_ADDRESS und HOST_PORT statt eines fest verdrahteten 127.0.0.1:3000. Die Voreinstellung bleibt localhost - wer den Reverse Proxy auf einem anderen Host betreibt oder Port 3000 schon belegt hat, aendert jetzt zwei Zeilen in der .env statt der compose-Datei. Der komplette Stack wurde damit einmal durchgespielt: docker compose up laeuft, Container wird healthy, Migrationen greifen und /data landet mit Datenbank und Dateiverzeichnis auf dem Host. Co-Authored-By: Claude Opus 5 (1M context) --- .env.example | 6 ++++++ QUICKSTART.md | 33 +++++++++++++++++---------------- README.md | 2 ++ docker-compose.yml | 7 ++++--- 4 files changed, 29 insertions(+), 19 deletions(-) diff --git a/.env.example b/.env.example index 9e7b007..1306964 100644 --- a/.env.example +++ b/.env.example @@ -21,6 +21,12 @@ MAX_UPLOAD_MB=25 # Zeitzone des Containers. TZ=Europe/Berlin +# Wo der Container auf dem Host lauscht. Voreinstellung: nur localhost, weil +# der Reverse Proxy auf demselben Host laeuft. Sitzt der Proxy woanders: +# BIND_ADDRESS=0.0.0.0 (und dann unbedingt die Firewall zuziehen). +# BIND_ADDRESS=127.0.0.1 +# HOST_PORT=3000 + # Optional (ab Phase 2): Rebrickable-API-Key fuer den Lego-Import. # Ohne Key funktioniert alles manuell weiter. # REBRICKABLE_API_KEY= diff --git a/QUICKSTART.md b/QUICKSTART.md index 3c544f2..ac6e172 100644 --- a/QUICKSTART.md +++ b/QUICKSTART.md @@ -116,15 +116,19 @@ proxy_set_header X-Real-IP $remote_addr; `client_max_body_size` muss mindestens so groß sein wie `MAX_UPLOAD_MB` in deiner `.env` (Standard 25 MB); 64m gibt Luft. -> **Läuft NPM im selben Docker-Netz?** Dann in `docker-compose.yml` das -> Port-Mapping auf `- "3000:3000"` ändern oder ganz entfernen und beide -> Container in ein gemeinsames Netzwerk hängen. Als Forward Hostname trägst du -> dann `bricktrack` ein (den Container-Namen), Port `3000`. +> **Wo lauscht der Container?** Voreinstellung ist `127.0.0.1:3000` – die App +> ist dann ausschließlich über einen Proxy auf demselben Host erreichbar. +> Zwei Fälle brauchen eine Anpassung in der `.env`: > -> Die Voreinstellung `127.0.0.1:3000:3000` bindet den Port nur an localhost – -> die App ist dann ausschließlich über den Proxy erreichbar. Sitzt NPM auf -> einem **anderen** Host, muss das Mapping auf `3000:3000` geändert und der -> Zugriff per Firewall beschränkt werden. +> - **NPM läuft auf einem anderen Host:** `BIND_ADDRESS=0.0.0.0` setzen und +> den Zugriff per Firewall auf die Proxy-IP beschränken. +> - **Port 3000 ist schon belegt:** `HOST_PORT=3001` (o. ä.) setzen und im +> Proxy denselben Port eintragen. +> +> **Läuft NPM im selben Docker-Netz?** Dann brauchst du gar kein +> Port-Mapping: die `ports`-Zeile in `docker-compose.yml` entfernen, beide +> Container in ein gemeinsames Netzwerk hängen und als Forward Hostname den +> Container-Namen `bricktrack` mit Port `3000` eintragen. ## 6. Ersten Nutzer anlegen @@ -155,15 +159,12 @@ eigener Passkey – Handy, Tablet, Laptop. **„Zur Wunschliste hinzufügen"**. 7. **Wunschlisten → Liste öffnen → Link kopieren** und verschicken. -Zum Ausprobieren gibt es Beispieldaten: +Wie das im Einzelnen aussieht, zeigt die [bebilderte +Anleitung](docs/ANLEITUNG.md). -```bash -docker compose exec app node -e "process.exit(0)" # laeuft der Container? -docker compose exec app sh -c 'echo "Seed nur in der Entwicklung"' -``` - -Das Seed-Skript ist bewusst nicht im Produktions-Image. Zum Ausprobieren -lokal: `pnpm db:seed`. +> Beispieldaten (`pnpm db:seed`) gibt es nur in der Entwicklungsumgebung – das +> Produktions-Image bringt sie bewusst nicht mit, damit in deiner Sammlung +> nichts steht, was dir nicht gehört. --- diff --git a/README.md b/README.md index f12075f..409040a 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,8 @@ Alle Werte kommen aus `.env` (Vorlage: `.env.example`). | `DATA_DIR` | nein | `/data` | Datenverzeichnis im Container. Nicht ändern. | | `MAX_UPLOAD_MB` | nein | `25` | Größenlimit je Datei. Muss zum Proxy passen. | | `TZ` | nein | `Europe/Berlin` | Zeitzone des Containers. | +| `BIND_ADDRESS` | nein | `127.0.0.1` | Auf welcher Host-Adresse der Container lauscht. `0.0.0.0`, wenn der Proxy auf einem anderen Host läuft. | +| `HOST_PORT` | nein | `3000` | Port auf dem Host, falls 3000 belegt ist. | | `REBRICKABLE_API_KEY` | nein | – | Ab Version 0.2.0: Lego-Import. Ohne Key läuft alles manuell. | ### Reverse Proxy diff --git a/docker-compose.yml b/docker-compose.yml index a07102c..1b0ebb8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,9 +24,10 @@ services: PORT: 3000 ports: - # Nur an localhost binden: erreichbar wird die App ueber den Reverse - # Proxy. Laeuft der Proxy in einem anderen Docker-Netz, siehe README. - - "127.0.0.1:3000:3000" + # Standardmaessig nur an localhost gebunden: erreichbar wird die App + # ueber den Reverse Proxy. Sitzt der Proxy auf einem anderen Host, in + # der .env BIND_ADDRESS=0.0.0.0 setzen (und die Firewall zuziehen). + - "${BIND_ADDRESS:-127.0.0.1}:${HOST_PORT:-3000}:3000" volumes: # Das eine Verzeichnis, das gesichert werden muss.