From ad6230c3350492b7ab91884e2ef4521d9c0832e8 Mon Sep 17 00:00:00 2001 From: Kimi Work Date: Sat, 10 Oct 2026 16:38:08 +0200 Subject: [PATCH] CI: Gitea-Action baut und deployt bei Push auf main (Runner-Whitelist, dist-Laufzeitmount) --- .gitea/workflows/deploy.yml | 40 +++++++++++++++++++++++++++++++++++++ README.md | 8 +++++++- server/docker-compose.yml | 4 +++- 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 .gitea/workflows/deploy.yml diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..e894941 --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,40 @@ +name: Build & Deploy + +# Fährt automatisch bei jedem Push auf main aus: +# Abhängigkeiten → Build → dist/ auf den VPS kopieren → Health-Check. +# Das dist/-Verzeichnis ist auf dem Web-Container als Laufzeit-Mount +# eingebunden (/opt/1bis8/web/dist), nginx pickt neue Dateien sofort auf. + +on: + push: + branches: [main] + +jobs: + deploy: + runs-on: docker + container: + image: node:22-alpine + # /opt/1bis8 des Hosts steht im Job als /deploy bereit (Whitelist im Runner) + options: -v /opt/1bis8:/deploy + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Abhängigkeiten installieren + run: cd app && npm ci + + - name: Build + run: cd app && npm run build + + - name: Deploy auf 1bis.hocks.eu + run: | + rm -rf /deploy/web/dist/* + cp -a app/dist/. /deploy/web/dist/ + + - name: Health-Check + run: | + apk add --no-cache curl + sleep 3 + curl -sf https://1bis.hocks.eu/ > /dev/null + curl -sf https://1bis8.hocks.eu/ > /dev/null + echo "1 bis 8 Party antwortet – Deploy erfolgreich" diff --git a/README.md b/README.md index cd9b876..db50a84 100644 --- a/README.md +++ b/README.md @@ -28,10 +28,16 @@ npm run build # Produktions-Build → app/dist/ ## Deployment (VPS 82.165.218.97, /opt/1bis8) +**Automatisch:** Bei jedem Push auf `main` baut die Gitea-Action +(`.gitea/workflows/deploy.yml`) die App und kopiert `dist/` auf den Server – +der Web-Container nutzt das Verzeichnis als Laufzeit-Mount und nimmt die +Änderungen sofort an. Anschließend läuft ein Health-Check gegen beide Domains. + +**Manuell:** + ```bash cd app && npm run build scp -P 38592 -r dist root@82.165.218.97:/opt/1bis8/web/ -ssh -p 38592 root@82.165.218.97 "cd /opt/1bis8 && docker compose up -d --build" ``` - TLS, Subdomains und Routing: Nginx Proxy Manager (`npm_default`-Netz) diff --git a/server/docker-compose.yml b/server/docker-compose.yml index 991b792..e0f0c21 100644 --- a/server/docker-compose.yml +++ b/server/docker-compose.yml @@ -20,7 +20,9 @@ services: restart: unless-stopped volumes: - ./web/docker/templates/default.conf.template:/etc/nginx/templates/default.conf.template:ro - # envsubst ersetzt ${MAIL_API_TOKEN} beim Start aus app.env + # dist/ als Laufzeit-Mount: CI ersetzt die Dateien und nginx pickt sie + # sofort auf – kein Image-Rebuild noetig (Build im Image bleibt Fallback) + - ./web/dist:/usr/share/nginx/html:ro env_file: - app.env depends_on: