From 9c0efcd89b3de028bad033839539879f491c31d7 Mon Sep 17 00:00:00 2001 From: Nirodan Date: Wed, 6 May 2026 14:04:55 +0200 Subject: [PATCH] Add Gitea Actions CI/CD workflow and production deployment files Co-Authored-By: Claude Sonnet 4.6 --- .gitea/workflows/deploy.yaml | 24 ++++++++++ DEPLOY.md | 88 ++++++++++++++++++++++++++++++++++++ docker-compose.prod.yml | 15 ++++++ 3 files changed, 127 insertions(+) create mode 100644 .gitea/workflows/deploy.yaml create mode 100644 DEPLOY.md create mode 100644 docker-compose.prod.yml diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml new file mode 100644 index 0000000..6209fa0 --- /dev/null +++ b/.gitea/workflows/deploy.yaml @@ -0,0 +1,24 @@ +name: Build & Deploy + +on: + release: + types: [published] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Login to Gitea Registry + run: | + echo "${{ secrets.REGISTRY_TOKEN }}" | docker login git.nirodan.de \ + -u ${{ secrets.REGISTRY_USER }} --password-stdin + + - name: Build & Push latest + version tag + run: | + docker build -t git.nirodan.de/${{ gitea.repository_owner }}/tools-app:latest . + docker build -t git.nirodan.de/${{ gitea.repository_owner }}/tools-app:${{ gitea.ref_name }} . + docker push git.nirodan.de/${{ gitea.repository_owner }}/tools-app:latest + docker push git.nirodan.de/${{ gitea.repository_owner }}/tools-app:${{ gitea.ref_name }} diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 0000000..54d0460 --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,88 @@ +# Deployment Guide + +## Voraussetzungen auf Unraid +- Docker installiert +- Gitea Act Runner läuft als Container +- Watchtower läuft als Container + +## Einmalige Einrichtung + +### 1. Gitea Secrets setzen +Im Repository unter Settings → Secrets folgende Secrets anlegen: +- `REGISTRY_USER` – dein Gitea Benutzername +- `REGISTRY_TOKEN` – ein Gitea Access Token mit `packages` Berechtigung + (Gitea → Einstellungen → Applications → Token erstellen) + +### 2. Repository Actions aktivieren +Im Repository unter Settings → "Enable Repository Actions" aktivieren. + +### 3. Act Runner auf Unraid starten +Token holen unter: https://git.nirodan.de/-/admin/actions/runners + +```bash +docker run -d \ + --restart always \ + --name gitea-runner \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /mnt/user/appdata/gitea-runner:/data \ + -e GITEA_INSTANCE_URL=https://git.nirodan.de/ \ + -e GITEA_RUNNER_REGISTRATION_TOKEN=DEIN_TOKEN \ + -e GITEA_RUNNER_NAME=unraid-runner \ + gitea/act_runner:latest +``` + +### 4. Watchtower auf Unraid starten +Einmalig in der Registry einloggen damit Credentials gespeichert werden: +```bash +docker login git.nirodan.de +``` + +Watchtower starten: +```bash +docker run -d \ + --name watchtower \ + --restart always \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /root/.docker/config.json:/config.json \ + containrrr/watchtower \ + --interval 300 \ + --cleanup \ + tools-app +``` + +### 5. App Container auf Unraid starten +```bash +docker run -d \ + --name tools-app \ + --restart unless-stopped \ + -p 5000:5000 \ + --env-file .env \ + git.nirodan.de/Nirodan/tools-app:latest +``` + +## Release erstellen = Deployment auslösen + +```bash +# Tag erstellen und pushen +git tag v1.0.0 +git push origin v1.0.0 +``` + +Dann in Gitea: +Repository → Releases → "New Release" → Tag auswählen → Publish + +Der Runner baut automatisch das Image und pusht es. +Watchtower erkennt das neue Image innerhalb von 5 Minuten und startet den Container neu. + +## Rollback auf alte Version + +In Unraid den Container stoppen und mit altem Tag neu starten: +```bash +docker stop tools-app +docker run -d \ + --name tools-app \ + --restart unless-stopped \ + -p 5000:5000 \ + --env-file .env \ + git.nirodan.de/Nirodan/tools-app:v0.9.0 +``` diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..9dd3bcf --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,15 @@ +services: + tools-app: + image: git.nirodan.de/Nirodan/tools-app:latest + container_name: tools-app + restart: unless-stopped + ports: + - "5000:5000" + env_file: + - .env + networks: + - tools-net + +networks: + tools-net: + driver: bridge