#!/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" < 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" <HTTPS Redirect redir https://{host}{uri} permanent } EOF fi exec caddy run --config "$CADDYFILE" --adapter caddyfile