Caddy: Zertifikat wird automatisch im Container erzeugt statt manuell per openssl auf dem Host
Entrypoint im caddy-Service prueft beim Start ob /certs/dashboard.{crt,key}
schon existiert und erzeugt es sonst selbst (apk add openssl + req -x509,
100 Jahre). Persistent im Volume, kein manueller Schritt mehr noetig.
Manuelle Erzeugung bleibt als Fallback in der README dokumentiert (z.B.
fuer eigenes /CN).
This commit is contained in:
@@ -5,10 +5,11 @@
|
|||||||
#
|
#
|
||||||
# TLS: bewusst kein "tls internal" (Caddys eigene interne CA, Zertifikate nur
|
# TLS: bewusst kein "tls internal" (Caddys eigene interne CA, Zertifikate nur
|
||||||
# ~12h gueltig, auto-rotiert) und kein Let's Encrypt (braucht oeffentliche
|
# ~12h gueltig, auto-rotiert) und kein Let's Encrypt (braucht oeffentliche
|
||||||
# Domain + Port 80). Stattdessen ein manuell erzeugtes selbstsigniertes
|
# Domain + Port 80). Stattdessen ein selbstsigniertes Zertifikat mit 100
|
||||||
# Zertifikat mit 100 Jahren Laufzeit, siehe README fuer den openssl-Befehl.
|
# Jahren Laufzeit — wird beim allerersten Container-Start automatisch vom
|
||||||
# Einmalig im Browser als Sicherheits-Ausnahme akzeptieren, danach nie wieder
|
# Entrypoint in docker-compose.yml erzeugt (kein manueller openssl-Befehl
|
||||||
# Renewal-Aerger.
|
# noetig), landet persistent im /certs-Volume. Einmalig im Browser als
|
||||||
|
# Sicherheits-Ausnahme akzeptieren, danach nie wieder Renewal-Aerger.
|
||||||
:443 {
|
:443 {
|
||||||
tls /certs/dashboard.crt /certs/dashboard.key
|
tls /certs/dashboard.crt /certs/dashboard.key
|
||||||
|
|
||||||
|
|||||||
@@ -156,9 +156,20 @@ aussen — kein anderer Rechner kommt mehr direkt ran.
|
|||||||
5. **TLS-Reverse-Proxy (Caddy) einrichten — macht Port 443 von aussen
|
5. **TLS-Reverse-Proxy (Caddy) einrichten — macht Port 443 von aussen
|
||||||
erreichbar, Dashboard bleibt intern auf `127.0.0.1`:**
|
erreichbar, Dashboard bleibt intern auf `127.0.0.1`:**
|
||||||
|
|
||||||
a. Selbstsigniertes Zertifikat erzeugen, 100 Jahre gueltig (bewusst kein
|
a. Selbstsigniertes Zertifikat, 100 Jahre gueltig (bewusst kein Let's
|
||||||
Let's Encrypt — kein Domain-/Port-80-Zwang, kein Renewal je wieder
|
Encrypt — kein Domain-/Port-80-Zwang, kein Renewal je wieder noetig).
|
||||||
noetig). Einmalig auf der Maschine:
|
**Erzeugt sich automatisch** — kein manueller Schritt mehr noetig: der
|
||||||
|
`caddy`-Container prueft beim Start, ob in `hermes-data/caddy-certs/`
|
||||||
|
schon ein Zertifikat liegt, und wenn nicht, installiert er sich kurz
|
||||||
|
`openssl` (per `apk`) und erzeugt es selbst (siehe `command:`-Block im
|
||||||
|
`caddy`-Service in `docker-compose.yml`). Einmalig generiert, danach
|
||||||
|
persistent im Volume — ueberlebt `docker compose up`/Neustarts, wird
|
||||||
|
nicht bei jedem Start neu gebaut.
|
||||||
|
|
||||||
|
Falls Du's doch manuell/mit eigenem `/CN` (z.B. Server-IP) erzeugen
|
||||||
|
willst, geht das weiterhin von Hand — dann einfach VOR dem ersten
|
||||||
|
Hochziehen selbst nach `hermes-data/caddy-certs/dashboard.{crt,key}`
|
||||||
|
legen, der Auto-Generate-Check ueberspringt die Erzeugung dann:
|
||||||
```bash
|
```bash
|
||||||
mkdir -p hermes-data/caddy-certs
|
mkdir -p hermes-data/caddy-certs
|
||||||
openssl req -x509 -nodes -newkey rsa:4096 \
|
openssl req -x509 -nodes -newkey rsa:4096 \
|
||||||
@@ -167,8 +178,6 @@ aussen — kein anderer Rechner kommt mehr direkt ran.
|
|||||||
-days 36500 \
|
-days 36500 \
|
||||||
-subj "/CN=hermes-dashboard"
|
-subj "/CN=hermes-dashboard"
|
||||||
```
|
```
|
||||||
`-days 36500` ≈ 100 Jahre. `/CN` ist egal (kein Public-DNS-Zwang), kann
|
|
||||||
auch die Server-IP sein wenn Du magst.
|
|
||||||
|
|
||||||
b. Caddy-Basic-Auth-Hash erzeugen (EIGENER Hash, nicht derselbe wie bei
|
b. Caddy-Basic-Auth-Hash erzeugen (EIGENER Hash, nicht derselbe wie bei
|
||||||
Schritt 4 — Caddy will bcrypt, Hermes' Hash ist pbkdf2):
|
Schritt 4 — Caddy will bcrypt, Hermes' Hash ist pbkdf2):
|
||||||
|
|||||||
+22
-1
@@ -234,12 +234,33 @@ services:
|
|||||||
- hermes-agent-dashboard
|
- hermes-agent-dashboard
|
||||||
volumes:
|
volumes:
|
||||||
- ./Caddyfile:/etc/caddy/Caddyfile:ro
|
- ./Caddyfile:/etc/caddy/Caddyfile:ro
|
||||||
- ./hermes-data/caddy-certs:/certs:ro
|
# kein :ro mehr -- der Entrypoint unten schreibt das Zertifikat selbst
|
||||||
|
# ins Volume, wenn noch keins da ist.
|
||||||
|
- ./hermes-data/caddy-certs:/certs
|
||||||
- ./hermes-data/caddy-data:/data
|
- ./hermes-data/caddy-data:/data
|
||||||
- ./hermes-data/caddy-config:/config
|
- ./hermes-data/caddy-config:/config
|
||||||
environment:
|
environment:
|
||||||
- HERMES_DASHBOARD_USER=${HERMES_DASHBOARD_USER:-admin}
|
- HERMES_DASHBOARD_USER=${HERMES_DASHBOARD_USER:-admin}
|
||||||
- CADDY_BASIC_AUTH_HASH=${CADDY_BASIC_AUTH_HASH:?CADDY_BASIC_AUTH_HASH muss in .env gesetzt sein - siehe .env.example}
|
- CADDY_BASIC_AUTH_HASH=${CADDY_BASIC_AUTH_HASH:?CADDY_BASIC_AUTH_HASH muss in .env gesetzt sein - siehe .env.example}
|
||||||
|
# Erzeugt beim allerersten Start automatisch ein selbstsigniertes
|
||||||
|
# 100-Jahre-Zertifikat im /certs-Volume (persistent, ueberlebt Neustarts),
|
||||||
|
# kein manueller openssl-Befehl auf dem Host mehr noetig. apk add ist
|
||||||
|
# noetig, weil das caddy:2-alpine-Image openssl nicht mitbringt.
|
||||||
|
entrypoint: ["/bin/sh", "-c"]
|
||||||
|
command:
|
||||||
|
- |
|
||||||
|
set -e
|
||||||
|
if [ ! -f /certs/dashboard.crt ] || [ ! -f /certs/dashboard.key ]; then
|
||||||
|
echo "[caddy-init] Kein Zertifikat in /certs gefunden -- erzeuge selbstsigniertes 100-Jahre-Zertifikat..."
|
||||||
|
apk add --no-cache openssl >/dev/null
|
||||||
|
openssl req -x509 -nodes -newkey rsa:4096 \
|
||||||
|
-keyout /certs/dashboard.key -out /certs/dashboard.crt \
|
||||||
|
-days 36500 -subj "/CN=hermes-dashboard"
|
||||||
|
echo "[caddy-init] Zertifikat erzeugt."
|
||||||
|
else
|
||||||
|
echo "[caddy-init] Zertifikat bereits vorhanden, ueberspringe Erzeugung."
|
||||||
|
fi
|
||||||
|
exec caddy run --config /etc/caddy/Caddyfile --adapter caddyfile
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
hermes-net:
|
hermes-net:
|
||||||
|
|||||||
Reference in New Issue
Block a user