- caddy/entrypoint.sh generiert Caddyfile jetzt dynamisch: sind DOMAIN und LETSENCRYPT_EMAIL gesetzt, holt Caddy automatisch ein Let's-Encrypt-Zertifikat; sonst Fallback auf das bisherige selbstsignierte 100-Jahres-Zertifikat. - .env.example um DOMAIN/LETSENCRYPT_EMAIL ergaenzt (auskommentiert), inkl. Erklaerung. - Caddy /data und /config (ACME-Cache) jetzt unter ./daten gebind-mounted statt Named Volumes, damit ein einzelner Ordner fuer Backup/Umzug reicht. - statische Caddyfile entfernt (wird zur Laufzeit erzeugt), README entsprechend um beide Zertifikats-Modi erweitert.
86 lines
2.1 KiB
Bash
Executable File
86 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
CERT_DIR="/certs"
|
|
CERT_FILE="$CERT_DIR/baikal.crt"
|
|
KEY_FILE="$CERT_DIR/baikal.key"
|
|
CADDYFILE="/etc/caddy/Caddyfile"
|
|
|
|
DOMAIN="${DOMAIN:-}"
|
|
LETSENCRYPT_EMAIL="${LETSENCRYPT_EMAIL:-}"
|
|
CN="${CADDY_CERT_CN:-baikal.local}"
|
|
|
|
mkdir -p "$CERT_DIR"
|
|
|
|
if [ -n "$DOMAIN" ] && [ -n "$LETSENCRYPT_EMAIL" ]; then
|
|
# DOMAIN + LETSENCRYPT_EMAIL gesetzt -> echtes, oeffentlich vertrauenswuerdiges
|
|
# Zertifikat ueber Caddys eingebautes automatisches HTTPS (Let's Encrypt).
|
|
# Voraussetzung: DOMAIN zeigt per DNS auf diesen Host, Port 80+443 sind von
|
|
# aussen erreichbar (HTTP-01 Challenge).
|
|
echo "[entrypoint] DOMAIN=$DOMAIN und LETSENCRYPT_EMAIL=$LETSENCRYPT_EMAIL gesetzt - hole/verwalte Zertifikat automatisch ueber Let's Encrypt."
|
|
|
|
cat > "$CADDYFILE" <<EOF
|
|
{
|
|
email ${LETSENCRYPT_EMAIL}
|
|
}
|
|
|
|
${DOMAIN} {
|
|
reverse_proxy baikal:80
|
|
|
|
encode gzip
|
|
log {
|
|
output stdout
|
|
}
|
|
}
|
|
EOF
|
|
|
|
else
|
|
# DOMAIN/LETSENCRYPT_EMAIL nicht (vollstaendig) gesetzt -> Fallback auf
|
|
# selbstsigniertes Langzeit-Zertifikat (100 Jahre), einmalig erzeugt und
|
|
# danach unter daten/caddy_certs persistiert/weiterverwendet.
|
|
echo "[entrypoint] DOMAIN/LETSENCRYPT_EMAIL nicht gesetzt - nutze selbstsigniertes 100-Jahres-Zertifikat (CN=$CN)."
|
|
|
|
if [ ! -f "$CERT_FILE" ] || [ ! -f "$KEY_FILE" ]; then
|
|
echo "[entrypoint] Kein Zertifikat unter $CERT_DIR gefunden - erstelle neues, 100 Jahre gueltiges Zertifikat fuer CN=$CN ..."
|
|
|
|
openssl req -x509 -nodes -newkey rsa:4096 -sha256 \
|
|
-days 36500 \
|
|
-keyout "$KEY_FILE" \
|
|
-out "$CERT_FILE" \
|
|
-subj "/C=DE/ST=Niedersachsen/L=Oldenburg/O=HackerSoft/CN=${CN}" \
|
|
-addext "subjectAltName=DNS:${CN},DNS:localhost,IP:127.0.0.1"
|
|
|
|
chmod 600 "$KEY_FILE"
|
|
chmod 644 "$CERT_FILE"
|
|
|
|
echo "[entrypoint] Zertifikat erstellt (gueltig fuer 36500 Tage / 100 Jahre)."
|
|
else
|
|
echo "[entrypoint] Bestehendes Zertifikat in $CERT_DIR gefunden, wird weiterverwendet."
|
|
fi
|
|
|
|
cat > "$CADDYFILE" <<EOF
|
|
{
|
|
auto_https off
|
|
}
|
|
|
|
:443 {
|
|
tls ${CERT_FILE} ${KEY_FILE}
|
|
|
|
reverse_proxy baikal:80
|
|
|
|
encode gzip
|
|
log {
|
|
output stdout
|
|
}
|
|
}
|
|
|
|
:80 {
|
|
# Reiner HTTP->HTTPS Redirect
|
|
redir https://{host}{uri} permanent
|
|
}
|
|
EOF
|
|
|
|
fi
|
|
|
|
exec caddy run --config "$CADDYFILE" --adapter caddyfile
|