Betrieb hinter einem vorhandenen Reverse Proxy
Die Adresse, auf der Docker Port 3000 veroeffentlicht, ist ueber LERNBAR_ADRESSE in .env einstellbar; Vorgabe bleibt 127.0.0.1. Noetig, wenn der Reverse Proxy - etwa ein Nginx Proxy Manager - auf einem anderen Rechner laeuft. Docker-Ports laufen an ufw vorbei. lernbar-portsperre setzt deshalb in DOCKER-USER eine Regel, die Port 3000 nur fuer den Proxy oeffnet, und laesst sich beliebig oft ausfuehren (in einem Debian-13-Container geprueft). Dazu ein systemd-Dienst, der sie nach Docker setzt. Abschnitt 6b der Betriebsanleitung beschreibt Einrichtung und Proxy-Host. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
3009c53b5c
commit
ead4cdf195
+50
-3
@@ -2,7 +2,8 @@
|
||||
|
||||
Diese Anleitung führt von einer leeren Proxmox-Umgebung zur laufenden Lern-Bar im
|
||||
Betriebsnetz: eine virtuelle Maschine mit Debian, darin Docker mit der Lern-Bar und Caddy
|
||||
als Reverse Proxy mit HTTPS. Rechne mit etwa zwei Stunden.
|
||||
als Reverse Proxy mit HTTPS – oder, wenn es schon einen Reverse Proxy wie den Nginx Proxy
|
||||
Manager gibt, dieser (Abschnitt 6b). Rechne mit etwa zwei Stunden.
|
||||
|
||||
> **HTTPS ist Pflicht, nicht Kür.** Die Lern-Bar setzt das Anmeldecookie im Betrieb mit dem
|
||||
> Merkmal `Secure`. Über `http://` nimmt der Browser es nicht an – die Anmeldung scheitert
|
||||
@@ -17,7 +18,7 @@ als Reverse Proxy mit HTTPS. Rechne mit etwa zwei Stunden.
|
||||
3. [Grundeinrichtung](#3-grundeinrichtung)
|
||||
4. [Docker installieren](#4-docker-installieren)
|
||||
5. [Die Lern-Bar holen und starten](#5-die-lern-bar-holen-und-starten)
|
||||
6. [HTTPS mit Caddy](#6-https-mit-caddy)
|
||||
6. [HTTPS mit Caddy](#6-https-mit-caddy) – oder [6b. hinter einem vorhandenen Nginx Proxy Manager](#6b-hinter-einem-vorhandenen-nginx-proxy-manager)
|
||||
7. [Das erste Konto](#7-das-erste-konto)
|
||||
8. [Sicherung](#8-sicherung)
|
||||
9. [Aktualisieren](#9-aktualisieren)
|
||||
@@ -97,7 +98,7 @@ sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin d
|
||||
sudo usermod -aG docker "$USER"
|
||||
```
|
||||
|
||||
Prüfen: `docker compose version` zeigt eine Fassung 2.x.
|
||||
Prüfen: `docker compose version` zeigt eine Fassung 2.x oder neuer.
|
||||
|
||||
## 5. Die Lern-Bar holen und starten
|
||||
|
||||
@@ -184,6 +185,52 @@ sudo systemctl reload caddy
|
||||
> Browser ein Zertifikat, dem das Gerät vertraut. Mit Variante B heißt das: Wurzelzertifikat
|
||||
> auch auf den Diensthandys installieren.
|
||||
|
||||
## 6b. Hinter einem vorhandenen Nginx Proxy Manager
|
||||
|
||||
Gibt es im Betrieb schon einen Reverse Proxy, der Zertifikate verwaltet – etwa den
|
||||
Nginx Proxy Manager –, entfällt Caddy auf der VM. Die Lern-Bar muss dann auf der
|
||||
Adresse der VM lauschen statt nur auf `127.0.0.1`, damit der Proxy sie erreicht.
|
||||
|
||||
**1. Lauschadresse einstellen.** In `/opt/lernbar/.env` (die Datei steht in der
|
||||
`.gitignore`, `update.sh` lässt sie in Ruhe):
|
||||
|
||||
```bash
|
||||
echo "LERNBAR_ADRESSE=10.10.13.200" > /opt/lernbar/.env # Adresse der VM
|
||||
cd /opt/lernbar && docker compose up -d
|
||||
```
|
||||
|
||||
**2. Port 3000 nur für den Proxy öffnen.** Ports, die Docker veröffentlicht,
|
||||
laufen an ufw vorbei – ohne diesen Schritt wäre die Lern-Bar für das ganze Netz
|
||||
unverschlüsselt erreichbar. Die Regel kommt deshalb in Dockers eigene Kette
|
||||
`DOCKER-USER`:
|
||||
|
||||
```bash
|
||||
sudo install -m 755 /opt/lernbar/scripts/betrieb/lernbar-portsperre.sh /usr/local/sbin/lernbar-portsperre
|
||||
sudo install -m 644 /opt/lernbar/scripts/betrieb/lernbar-portsperre.service /etc/systemd/system/
|
||||
sudo sed -i 's/10.10.13.5/<ADRESSE-DES-NPM>/' /etc/systemd/system/lernbar-portsperre.service
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now lernbar-portsperre
|
||||
sudo iptables -S DOCKER-USER # muss die DROP-Regel mit „! -s <ADRESSE-DES-NPM>" zeigen
|
||||
```
|
||||
|
||||
Prüfen: Vom NPM aus antwortet `curl http://10.10.13.200:3000/api/gesundheit`,
|
||||
von jedem anderen Rechner läuft derselbe Aufruf ins Leere.
|
||||
|
||||
**3. Proxy-Host im Nginx Proxy Manager anlegen:**
|
||||
|
||||
| Reiter | Einstellung |
|
||||
|---|---|
|
||||
| Details | Domain `lernbar.<eure-domäne>`, Scheme `http`, Forward Hostname `10.10.13.200`, Port `3000`, „Block Common Exploits" an |
|
||||
| SSL | Zertifikat wählen oder anfordern, „Force SSL" und „HTTP/2 Support" an |
|
||||
| Advanced | `client_max_body_size 30m;` – sonst scheitern Fotos als Anhang |
|
||||
|
||||
Der NPM gibt den Host-Namen der Anfrage unverändert weiter. Das ist wichtig: Next.js
|
||||
prüft bei jedem Formular, ob Herkunft und Host zusammenpassen, und lehnt das
|
||||
Absenden sonst ab.
|
||||
|
||||
Danach weiter mit Abschnitt 7. Abschnitt 6 (Caddy) entfällt, ebenso die Freigabe
|
||||
von Port 80 und 443 in ufw auf der VM.
|
||||
|
||||
## 7. Das erste Konto
|
||||
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user