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. # Zeitzone des Containers.
TZ=Europe/Berlin 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. # Optional (ab Phase 2): Rebrickable-API-Key fuer den Lego-Import.
# Ohne Key funktioniert alles manuell weiter. # Ohne Key funktioniert alles manuell weiter.
# REBRICKABLE_API_KEY= # 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 `client_max_body_size` muss mindestens so groß sein wie `MAX_UPLOAD_MB` in
deiner `.env` (Standard 25 MB); 64m gibt Luft. deiner `.env` (Standard 25 MB); 64m gibt Luft.
> **Läuft NPM im selben Docker-Netz?** Dann in `docker-compose.yml` das > **Wo lauscht der Container?** Voreinstellung ist `127.0.0.1:3000` – die App
> Port-Mapping auf `- "3000:3000"` ändern oder ganz entfernen und beide > ist dann ausschließlich über einen Proxy auf demselben Host erreichbar.
> Container in ein gemeinsames Netzwerk hängen. Als Forward Hostname trägst du > Zwei Fälle brauchen eine Anpassung in der `.env`:
> dann `bricktrack` ein (den Container-Namen), Port `3000`.
> >
> Die Voreinstellung `127.0.0.1:3000:3000` bindet den Port nur an localhost – > - **NPM läuft auf einem anderen Host:** `BIND_ADDRESS=0.0.0.0` setzen und
> die App ist dann ausschließlich über den Proxy erreichbar. Sitzt NPM auf > den Zugriff per Firewall auf die Proxy-IP beschränken.
> einem **anderen** Host, muss das Mapping auf `3000:3000` geändert und der > - **Port 3000 ist schon belegt:** `HOST_PORT=3001` (o. ä.) setzen und im
> Zugriff per Firewall beschränkt werden. > 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 ## 6. Ersten Nutzer anlegen
@@ -155,15 +159,12 @@ eigener Passkey – Handy, Tablet, Laptop.
**„Zur Wunschliste hinzufügen"**. **„Zur Wunschliste hinzufügen"**.
7. **Wunschlisten → Liste öffnen → Link kopieren** und verschicken. 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 > Beispieldaten (`pnpm db:seed`) gibt es nur in der Entwicklungsumgebung – das
docker compose exec app node -e "process.exit(0)" # laeuft der Container? > Produktions-Image bringt sie bewusst nicht mit, damit in deiner Sammlung
docker compose exec app sh -c 'echo "Seed nur in der Entwicklung"' > nichts steht, was dir nicht gehört.
```
Das Seed-Skript ist bewusst nicht im Produktions-Image. Zum Ausprobieren
lokal: `pnpm db:seed`.
--- ---
+2
View File
@@ -79,6 +79,8 @@ Alle Werte kommen aus `.env` (Vorlage: `.env.example`).
| `DATA_DIR` | nein | `/data` | Datenverzeichnis im Container. Nicht ändern. | | `DATA_DIR` | nein | `/data` | Datenverzeichnis im Container. Nicht ändern. |
| `MAX_UPLOAD_MB` | nein | `25` | Größenlimit je Datei. Muss zum Proxy passen. | | `MAX_UPLOAD_MB` | nein | `25` | Größenlimit je Datei. Muss zum Proxy passen. |
| `TZ` | nein | `Europe/Berlin` | Zeitzone des Containers. | | `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. | | `REBRICKABLE_API_KEY` | nein | – | Ab Version 0.2.0: Lego-Import. Ohne Key läuft alles manuell. |
### Reverse Proxy ### Reverse Proxy
+4 -3
View File
@@ -24,9 +24,10 @@ services:
PORT: 3000 PORT: 3000
ports: ports:
# Nur an localhost binden: erreichbar wird die App ueber den Reverse # Standardmaessig nur an localhost gebunden: erreichbar wird die App
# Proxy. Laeuft der Proxy in einem anderen Docker-Netz, siehe README. # ueber den Reverse Proxy. Sitzt der Proxy auf einem anderen Host, in
- "127.0.0.1:3000:3000" # der .env BIND_ADDRESS=0.0.0.0 setzen (und die Firewall zuziehen).
- "${BIND_ADDRESS:-127.0.0.1}:${HOST_PORT:-3000}:3000"
volumes: volumes:
# Das eine Verzeichnis, das gesichert werden muss. # Das eine Verzeichnis, das gesichert werden muss.