Docker: festen Port statt gemeinsamem Netz mit dem Proxy Manager

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
guyg1474andClaude Opus 5.5 committed 2026-10-10 14:40:26 +02:00
1 parent 6824ca90cd
commit 43356a120c
4 files changed
+29 -30

No files matched your search

+2 -3
View File
@@ -1,3 +1,2 @@
# Nach .env kopieren und den Netzwerknamen des Nginx Proxy Managers eintragen
# (herausfinden mit: docker inspect <npm-container> --format '{{range $k, $v := .NetworkSettings.Networks}}{{$k}} {{end}}')
PROXY_NETWORK=npm_default
# Optional: nach .env kopieren, wenn Port 3000 auf dem Server schon belegt ist
HCRB_PORT=3000
+21 -16
View File
@@ -4,7 +4,7 @@ Annahme: ein Linux-Server mit SSH-Zugang und Docker, auf dem der **Nginx Proxy M
und die Domains verwaltet. Dazu eine (Sub-)Domain, z. B. `hcrb.dbks.eu`.
Der Ablauf: Code liegt in einem Git-Repository → Server holt ihn per `git pull` → `docker compose` baut und startet
den Container → der Container hängt im selben Docker-Netz wie NPM → NPM leitet die Domain per HTTPS an `hcrb:3000`.
den Container auf Port 3000 → NPM leitet die Domain per HTTPS an `Server-IP:3000`.
Die Daten (`data/`) liegen außerhalb des Containers auf dem Server und bleiben bei Updates erhalten.
## 1. Git-Repository ✓
@@ -42,22 +42,26 @@ chmod +x deploy/*.sh
mkdir -p data && sudo chown 1000:1000 data
```
## 4. Mit dem Netz des Nginx Proxy Managers verbinden
## 4. Port und Server-IP
Der HCRB-Container wird in das Docker-Netz gehängt, in dem NPM schon läuft. Am NPM selbst muss nichts geändert werden.
Name des NPM-Containers und seines Netzes herausfinden:
Der Container ist auf dem Server über **Port 3000** erreichbar. Prüfen, ob der Port noch frei ist
(keine Ausgabe = frei):
```bash
docker ps --format '{{.Names}}\t{{.Image}}' | grep -i nginx-proxy-manager
docker inspect NAME-DES-NPM-CONTAINERS --format '{{range $k, $v := .NetworkSettings.Networks}}{{$k}} {{end}}'
sudo ss -ltnp | grep ':3000 '
```
Die zweite Zeile gibt den Netzwerknamen aus, z. B. `npm_default`. Diesen in die Datei `.env` eintragen:
Ist er belegt, einen anderen freien Port wählen (z. B. 3010) und in die Datei `.env` schreiben:
```bash
cp .env.example .env
nano .env # PROXY_NETWORK=npm_default (durch den ausgegebenen Namen ersetzen)
nano .env # HCRB_PORT=3010
```
Lokale IP des Servers herausfinden (die erste Adresse, meist `192.168.…`) – die kommt später in den Proxy Manager:
```bash
hostname -I
```
## 5. Daten übernehmen (optional)
@@ -86,10 +90,10 @@ Ohne übernommene Daten jetzt den ersten Login anlegen (Passwort wird verdeckt a
docker compose exec hcrb npm run user -- add elias
```
Prüfen, ob NPM den Container erreicht (sollte `{"user":null}` ausgeben):
Prüfen, ob die Seite läuft (sollte `{"user":null}` ausgeben – Server-IP und ggf. Port anpassen):
```bash
docker exec NAME-DES-NPM-CONTAINERS curl -s http://hcrb:3000/api/me
curl -s http://192.168.178.20:3000/api/me
```
Der Container startet automatisch neu – nach Abstürzen und nach einem Server-Neustart (`restart: unless-stopped`).
@@ -104,8 +108,8 @@ Reiter **Details**
| --- | --- |
| Domain Names | `hcrb.dbks.eu` |
| Scheme | `http` |
| Forward Hostname / IP | `hcrb` |
| Forward Port | `3000` |
| Forward Hostname / IP | lokale IP des Servers aus Schritt 4, z. B. `192.168.178.20` (**nicht** `127.0.0.1`/`localhost` – das wäre der Proxy-Manager-Container selbst) |
| Forward Port | `3000` (bzw. der Port aus `.env`) |
| Cache Assets | aus |
| Block Common Exploits | an |
| Websockets Support | aus (wird nicht gebraucht) |
@@ -127,7 +131,8 @@ NPM gibt die echte Besucher-IP und das Protokoll (`X-Forwarded-For`, `X-Forwarde
das braucht die Seite für die Sperre nach 10 falschen Passwörtern und für das sichere Login-Cookie.
Unter *Advanced* muss dafür nichts eingetragen werden.
**Hinweis:** Port 3000 wird bewusst **nicht** nach außen freigegeben – die Seite ist nur über NPM erreichbar.
**Hinweis:** Port 3000 im Router **nicht** freigeben – von außen soll die Seite nur über NPM (Port 443) erreichbar sein.
Im Heimnetz ist sie unter `http://Server-IP:3000` direkt erreichbar, das ist unkritisch.
Die NPM-Oberfläche (Port 81) sollte ebenfalls nicht offen im Internet stehen.
## 8. Backups
@@ -177,7 +182,7 @@ Alle im Ordner `~/festplatte/dockercontainer/hcrb` ausführen:
| Problem | Ursache / Lösung |
| --- | --- |
| `network … declared as external, but could not be found` | Netzwerkname in `.env` stimmt nicht – Schritt 4 wiederholen. |
| NPM zeigt „502 Bad Gateway“ | Container läuft nicht (`docker compose ps`, `docker compose logs`) oder hängt nicht im NPM-Netz (Schritt 4). |
| `port is already allocated` beim Start | Port belegt – in `.env` einen anderen `HCRB_PORT` setzen (Schritt 4) und in NPM nachziehen. |
| NPM zeigt „502 Bad Gateway“ | Container läuft nicht (`docker compose ps`, `docker compose logs`), oder in NPM steht `127.0.0.1` bzw. ein falscher Port – dort die lokale Server-IP eintragen. |
| Container startet neu mit `EACCES … data` | Rechte am Datenordner: `sudo chown -R 1000:1000 ~/festplatte/dockercontainer/hcrb/data` |
| Nach 10 falschen Passwörtern ist der Login für **alle** gesperrt | Die Seite erkennt die echte Besucher-IP nicht – prüfen, ob `TRUST_PROXY` in `docker-compose.yml` gesetzt ist und der Zugriff über NPM erfolgt. |
+1 -1
View File
@@ -74,5 +74,5 @@ private/ nur angemeldet: Kalender, Fahrtplaner, Gruppe
## Auf einem Server betreiben
Per Docker hinter dem Nginx Proxy Manager: `docker compose up -d --build` (Daten liegen in `./data`,
das Docker-Netz des Proxys steht in `.env`). Schritt-für-Schritt-Anleitung inkl. Domain, HTTPS, Updates und Backups:
die Seite läuft auf Port 3000, änderbar per `HCRB_PORT` in `.env`). Schritt-für-Schritt-Anleitung inkl. Domain, HTTPS, Updates und Backups:
[DEPLOY.md](DEPLOY.md). Skripte für Updates und Backups liegen in `deploy/`.
+5 -10
View File
@@ -4,19 +4,14 @@ services:
image: hcrb
container_name: hcrb
restart: unless-stopped
# Kein Port nach außen – der Nginx Proxy Manager erreicht den Container über das gemeinsame Netz als hcrb:3000
ports:
# Port auf dem Server – im Nginx Proxy Manager als Ziel eintragen (Server-IP + dieser Port).
# Anderer Port: in der Datei .env HCRB_PORT=... setzen.
- "${HCRB_PORT:-3000}:3000"
environment:
TZ: Europe/Berlin
# Anfragen kommen vom Proxy-Container aus dem Docker-Netz (172.x.x.x)
# Anfragen kommen vom Proxy Manager aus dem lokalen bzw. Docker-Netz
TRUST_PROXY: "loopback, uniquelocal"
volumes:
# Mitglieder, Termine, Logins – bleiben bei Updates und Neubau des Containers erhalten
- ./data:/app/data
networks:
- proxy
networks:
proxy:
# Netz des Nginx Proxy Managers – Name steht in der Datei .env (PROXY_NETWORK=...)
external: true
name: ${PROXY_NETWORK:-proxy}