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
|
# Optional: nach .env kopieren, wenn Port 3000 auf dem Server schon belegt ist
|
||||||
# (herausfinden mit: docker inspect <npm-container> --format '{{range $k, $v := .NetworkSettings.Networks}}{{$k}} {{end}}')
|
HCRB_PORT=3000
|
||||||
PROXY_NETWORK=npm_default
|
|
||||||
@@ -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`.
|
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
|
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.
|
Die Daten (`data/`) liegen außerhalb des Containers auf dem Server und bleiben bei Updates erhalten.
|
||||||
|
|
||||||
## 1. Git-Repository ✓
|
## 1. Git-Repository ✓
|
||||||
@@ -42,22 +42,26 @@ chmod +x deploy/*.sh
|
|||||||
mkdir -p data && sudo chown 1000:1000 data
|
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.
|
Der Container ist auf dem Server über **Port 3000** erreichbar. Prüfen, ob der Port noch frei ist
|
||||||
|
(keine Ausgabe = frei):
|
||||||
Name des NPM-Containers und seines Netzes herausfinden:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker ps --format '{{.Names}}\t{{.Image}}' | grep -i nginx-proxy-manager
|
sudo ss -ltnp | grep ':3000 '
|
||||||
docker inspect NAME-DES-NPM-CONTAINERS --format '{{range $k, $v := .NetworkSettings.Networks}}{{$k}} {{end}}'
|
|
||||||
```
|
```
|
||||||
|
|
||||||
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
|
```bash
|
||||||
cp .env.example .env
|
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)
|
## 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
|
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
|
```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`).
|
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` |
|
| Domain Names | `hcrb.dbks.eu` |
|
||||||
| Scheme | `http` |
|
| Scheme | `http` |
|
||||||
| Forward Hostname / IP | `hcrb` |
|
| 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` |
|
| Forward Port | `3000` (bzw. der Port aus `.env`) |
|
||||||
| Cache Assets | aus |
|
| Cache Assets | aus |
|
||||||
| Block Common Exploits | an |
|
| Block Common Exploits | an |
|
||||||
| Websockets Support | aus (wird nicht gebraucht) |
|
| 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.
|
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.
|
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.
|
Die NPM-Oberfläche (Port 81) sollte ebenfalls nicht offen im Internet stehen.
|
||||||
|
|
||||||
## 8. Backups
|
## 8. Backups
|
||||||
@@ -177,7 +182,7 @@ Alle im Ordner `~/festplatte/dockercontainer/hcrb` ausführen:
|
|||||||
|
|
||||||
| Problem | Ursache / Lösung |
|
| Problem | Ursache / Lösung |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| `network … declared as external, but could not be found` | Netzwerkname in `.env` stimmt nicht – Schritt 4 wiederholen. |
|
| `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 hängt nicht im NPM-Netz (Schritt 4). |
|
| 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` |
|
| 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. |
|
| 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
|
## Auf einem Server betreiben
|
||||||
|
|
||||||
Per Docker hinter dem Nginx Proxy Manager: `docker compose up -d --build` (Daten liegen in `./data`,
|
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/`.
|
[DEPLOY.md](DEPLOY.md). Skripte für Updates und Backups liegen in `deploy/`.
|
||||||
+5
-10
@@ -4,19 +4,14 @@ services:
|
|||||||
image: hcrb
|
image: hcrb
|
||||||
container_name: hcrb
|
container_name: hcrb
|
||||||
restart: unless-stopped
|
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:
|
environment:
|
||||||
TZ: Europe/Berlin
|
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"
|
TRUST_PROXY: "loopback, uniquelocal"
|
||||||
volumes:
|
volumes:
|
||||||
# Mitglieder, Termine, Logins – bleiben bei Updates und Neubau des Containers erhalten
|
# Mitglieder, Termine, Logins – bleiben bei Updates und Neubau des Containers erhalten
|
||||||
- ./data:/app/data
|
- ./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