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) <noreply@anthropic.com>
This commit is contained in:
unknown
2026-09-07 00:56:38 +02:00
co-authored by Claude Opus 5
parent b1fc502d55
commit f42cd31673
4 changed files with 29 additions and 19 deletions
+6
View File
@@ -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=
+17 -16
View File
@@ -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.
---
+2
View File
@@ -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
+4 -3
View File
@@ -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.