# Auto-Deploy statt „Pull and redeploy" Bisher: pushen, in Portainer einloggen, Stack suchen, *Pull and redeploy* klicken. Das geht automatisch — zwei Wege, je nachdem wie viel du willst. ## Weg 1: Portainer-Webhook (2 Minuten, kein Runner nötig) ← empfohlen Portainer kann einen Stack per HTTP-Aufruf neu ausrollen. Gitea ruft diese Adresse nach jedem Push auf, fertig. **In Portainer:** 1. Stack `ecobot` öffnen → Reiter **Editor** 2. **Automatic updates** einschalten, Methode **Webhook** 3. Die erzeugte Webhook-URL kopieren (Form: `https://portainer.../api/stacks/webhooks/`) **In Gitea:** 1. Repo `d4rkbot` → **Einstellungen → Webhooks → Webhook hinzufügen → Gitea** 2. Ziel-URL: die kopierte Portainer-Adresse 3. HTTP-Methode `POST`, Inhaltstyp `application/json` 4. Trigger: **Push-Ereignisse**, Branch-Filter `main` 5. Speichern, dann **Zustellung testen** — Portainer sollte den Stack neu bauen > Der Stack muss aus dem Git-Repository deployed sein (nicht aus einem > hochgeladenen Compose-Text), damit Portainer den neuen Stand ziehen kann. > „Re-pull image" bleibt **aus** — das Image wird ja lokal gebaut. ## Weg 2: Gitea Actions (prüft den Code vor dem Deploy) Der Workflow in `.gitea/workflows/deploy.yml` installiert die Abhängigkeiten, prüft alle Server-Dateien auf Syntaxfehler, baut das Frontend — und stößt erst dann das Redeploy an. Kaputter Code geht damit gar nicht erst live. **Voraussetzung: ein Act-Runner.** In deiner Instanz sind Actions aktiviert, aber ohne Runner passiert nichts. Einrichten als zusätzlicher Container: ```yaml # docker-compose.yml für den Runner services: runner: image: gitea/act_runner:latest restart: always environment: GITEA_INSTANCE_URL: https://git.d4rkst3r.de GITEA_RUNNER_REGISTRATION_TOKEN: GITEA_RUNNER_NAME: d4rk-runner GITEA_RUNNER_LABELS: ubuntu-latest:docker://node:22-bookworm volumes: - /var/run/docker.sock:/var/run/docker.sock - ./runner-data:/data ``` Den Registrierungs-Token findest du unter **Site-Administration → Actions → Runner → Runner erstellen** (oder pro Repo unter *Einstellungen → Actions*). **Secret hinterlegen:** Repo → *Einstellungen → Actions → Secrets* → `PORTAINER_WEBHOOK` mit der Portainer-Adresse. Fehlt das Secret, läuft nur die Prüfung und der Deploy-Schritt wird übersprungen. ## Welchen nehmen? | | Weg 1 (Webhook) | Weg 2 (Actions) | |---|---|---| | Aufwand | 2 Minuten | Runner-Container aufsetzen | | Prüft den Code | nein | ja (Syntax + Frontend-Build) | | Läuft ohne Zusatzdienst | ja | nein | Fang mit Weg 1 an. Weg 2 lohnt sich, sobald du Tests hast oder mehrere Leute pushen — dann verhindert er, dass ein kaputter Stand live geht.