From 3f1d2341ce91a100d2f6ef4d31e1a05b2b057456 Mon Sep 17 00:00:00 2001 From: domverse Date: Sat, 20 Jun 2026 12:16:56 +0200 Subject: [PATCH] ci: migrate to Portainer Git stack + registry-pushed image MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Compose: build → image:latest from Gitea registry (ci namespace) - Workflow: build + push image + POST Portainer webhook (vs. host docker compose up) - Drop transient .env write — secrets now live in Portainer stack Env - Add crowdsec@file middleware (defense-in-depth project rule) Repo secrets required: REGISTRY_TOKEN, PORTAINER_WEBHOOK_URL. Rollback branch: pre-portainer-migration. --- .gitea/workflows/deploy.yml | 46 ++++++++++++------------------------- docker-compose.yml | 6 ++--- 2 files changed, 17 insertions(+), 35 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 8dcd106..bba43dd 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -1,21 +1,13 @@ # ────────────────────────────────────────────────────────────────────────────── # CrowdSec Admin — Gitea Actions CI/CD # -# Triggers on push to main. Runner builds image + brings stack up via docker -# compose on the host. Image stays local (no registry push), same pattern as -# flight-radar. +# Build image, push to Gitea registry, trigger Portainer redeploy via webhook. +# Stack itself is managed by Portainer (type=git). Env vars (LAPI creds) live +# in the Portainer stack — NOT in repo secrets — so rotation is one place. # -# PREREQUISITES (one-time): -# 1. Host LAPI machine registered (for DELETE auth): -# sudo cscli machines add crowdsec-admin --password '' -f - -# 2. Host LAPI bouncer registered (for GET auth): -# sudo cscli bouncers add crowdsec-admin -# 3. Repo secrets set in Gitea → Settings → Secrets: -# LAPI_MACHINE_ID=crowdsec-admin -# LAPI_MACHINE_PASSWORD= -# LAPI_BOUNCER_KEY= -# 4. DNS: crowdsec.domverse-berlin.eu → host IP. -# 5. Authentik wildcard forward_domain already covers *.domverse-berlin.eu. +# Repo secrets required: +# REGISTRY_TOKEN token for ci user, scope write:package +# PORTAINER_WEBHOOK_URL POST URL from Portainer stack auto-update setting # ────────────────────────────────────────────────────────────────────────────── name: Deploy @@ -27,8 +19,7 @@ on: workflow_dispatch: env: - COMPOSE_PROJECT: crowdsec-admin - COMPOSE_FILE: docker-compose.yml + IMAGE: git.domverse-berlin.eu/ci/crowdsec-admin/app jobs: deploy: @@ -37,25 +28,18 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Write .env for compose - run: | - cat > .env <