ci: use external Nginx Proxy Manager instead of Caddy

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
JannisandClaude Sonnet 5.5 committed 2026-10-17 09:09:48 +02:00
1 parent aa37b44e00
commit bdf47d0f01
4 files changed
+6 -59

No files matched your search

+3 -7
View File
@@ -2,7 +2,7 @@
# push auf main -> Images bauen, in die Gitea-Registry pushen, Test-Stack aktualisieren
# Tag v* -> dieselben (bereits getesteten) Images als Release taggen, Prod-Stack aktualisieren
# Konfiguration/Secrets liegen auf dem Host in /opt/familyplanner/{test,prod}.env (siehe deploy/env.*.example).
# Runner läuft als Container: Job-Container brauchen Docker-Socket und /opt/familyplanner (rw) – siehe docs/deploy-runner.md.
# Runner läuft als Container: Job-Container brauchen Docker-Socket und /opt/familyplanner – siehe docs/deploy-runner.md.
name: Deploy
on:
@@ -71,15 +71,11 @@ jobs:
docker compose -p familyplanner-prod ps sql --status running -q | grep -q . && COMPOSE_PROJECT_NAME=familyplanner-prod sh scripts/backup.sh || echo "Erster Start, kein Backup"
rm -f .env
- name: Caddyfile auf den Host legen (Bind-Mounts löst der Host-Docker auf)
run: cp deploy/Caddyfile "$CONFIG_DIR/Caddyfile"
- name: Prod-Stack aktualisieren
working-directory: deploy
env:
TAG: ${{ github.ref_name }}
CADDYFILE: /opt/familyplanner/Caddyfile
run: |
docker network inspect edge >/dev/null 2>&1 || docker network create edge
docker compose -p familyplanner-prod --env-file "$CONFIG_DIR/prod.env" --profile proxy pull $SERVICES
docker compose -p familyplanner-prod --env-file "$CONFIG_DIR/prod.env" --profile proxy up -d --remove-orphans --wait
docker compose -p familyplanner-prod --env-file "$CONFIG_DIR/prod.env" pull $SERVICES
docker compose -p familyplanner-prod --env-file "$CONFIG_DIR/prod.env" up -d --remove-orphans --wait
-22
View File
@@ -1,22 +0,0 @@
# Reverse Proxy mit automatischem HTTPS (Let's Encrypt) für Prod und Test auf demselben Host.
# Caddy läuft nur im Prod-Stack (Profil "proxy") und erreicht beide Stacks über das externe Docker-Netz "edge"
# (Alias <STACK_NAME>-web). Ist der Test-Stack aus, liefert die Test-Domain einfach 502.
(common) {
encode zstd gzip
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
-Server
}
}
{$DOMAIN} {
import common
# WebSockets (SignalR) werden automatisch durchgereicht.
reverse_proxy prod-web:8080
}
{$TEST_DOMAIN} {
import common
reverse_proxy test-web:8080
}
+2 -27
View File
@@ -2,9 +2,8 @@
#
# cp .env.example .env # Werte anpassen!
# docker compose up -d --build
# docker compose --profile proxy up -d --build # inkl. Caddy (HTTPS mit Let's Encrypt)
#
# Die Anwendung verlangt HTTPS (Secure-Cookies). Ohne Caddy entweder einen eigenen Reverse Proxy
# Die Anwendung verlangt HTTPS (Secure-Cookies). Davor einen Reverse Proxy (z. B. Nginx Proxy Manager)
# mit TLS davor setzen oder nur über http://localhost testen.
name: familyplanner
@@ -101,7 +100,7 @@ services:
services__api__http__0: http://api:8080
ports:
- "${WEB_BIND:-127.0.0.1}:${WEB_PORT:-8080}:8080"
# Gemeinsames Netz mit dem Reverse Proxy (Test + Prod auf einem Host): einmalig `docker network create edge`
# Gemeinsames Netz mit dem Reverse Proxy (z. B. Nginx Proxy Manager; Test + Prod auf einem Host): einmalig `docker network create edge`
networks:
default:
edge:
@@ -118,28 +117,6 @@ services:
start_period: 15s
restart: unless-stopped
caddy:
profiles: ["proxy"]
image: caddy:2
environment:
DOMAIN: ${DOMAIN:-localhost}
TEST_DOMAIN: ${TEST_DOMAIN:-test.localhost}
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ${CADDYFILE:-./Caddyfile}:/etc/caddy/Caddyfile:ro
- caddy-data:/data
- caddy-config:/config
networks:
default:
edge:
depends_on:
web:
condition: service_healthy
restart: unless-stopped
networks:
edge:
external: true
@@ -147,5 +124,3 @@ networks:
volumes:
sql-data:
sql-backup:
caddy-data:
caddy-config:
+1 -3
View File
@@ -6,9 +6,7 @@ REGISTRY=gitea.example.com/owner/
WEB_PORT=8080
WEB_BIND=127.0.0.1
# Caddy (Profil "proxy" – nur im Prod-Stack, bedient beide Domains)
DOMAIN=planner.example.com
TEST_DOMAIN=test.planner.example.com
# HTTPS/Domains: Nginx Proxy Manager im Netz "edge" -> Ziel prod-web:8080 (Websockets Support an)
SQL_SA_PASSWORD=
MSSQL_PID=Express