mirror of
https://github.com/guyg1474/hcrb.git
synced 2026-10-15 23:13:28 +02:00
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:
1 parent
6824ca90cd
commit
43356a120c
4 files changed
+29
-30
No files matched your search
+2
-3
@@ -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
|
||||
@@ -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. |
|
||||
@@ -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
@@ -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}
|
||||
Reference in new issue
Block a user