diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..4b734f8 --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,31 @@ +name: Build & Deploy + +on: + push: + branches: [main] + +jobs: + deploy: + runs-on: self-hosted + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Build image + run: docker build -t 3d-pricing:latest . + + - name: Redeploy + run: | + docker rm -f 3d-pricing 2>/dev/null || true + docker run -d \ + --name 3d-pricing \ + --restart unless-stopped \ + -p 5010:5000 \ + -v /opt/3d-pricing-data:/data \ + -e DATABASE_PATH=/data/pricing.db \ + 3d-pricing:latest + + - name: Healthcheck + run: | + sleep 5 + curl -f http://localhost:5010/ || (echo "App not responding!" && exit 1) diff --git a/act-runner/README-SETUP.md b/act-runner/README-SETUP.md new file mode 100644 index 0000000..6d84973 --- /dev/null +++ b/act-runner/README-SETUP.md @@ -0,0 +1,124 @@ +# Setup CI/CD — Gitea Actions + Act Runner + +## Architecture + +``` +Serveur A : Gitea (192.168.5.171:3000) +Serveur B : Portainer + Docker + 3d-pricing +``` + +Le runner tourne sur le Serveur B. Il se connecte *vers* Gitea (outbound uniquement). +Pas de registry : l'image est buildée et gardée localement sur le Serveur B. + +--- + +## Étape 1 — Activer Gitea Actions (Serveur A) + +Trouver `app.ini` : +```bash +docker exec gitea cat /etc/gitea/app.ini | grep -A5 "\[actions\]" +# ou +docker exec gitea find / -name app.ini 2>/dev/null +``` + +Ajouter dans `app.ini` : +```ini +[actions] +ENABLED = true +``` + +Redémarrer Gitea : +```bash +docker restart gitea +``` + +--- + +## Étape 2 — Récupérer le token runner (Serveur A, interface web) + +Gitea → Site Administration → Actions → Runners → Create new Runner + +Copier le **Registration Token**. + +--- + +## Étape 3 — Déployer le runner (Serveur B) + +```bash +# Créer le dossier +mkdir -p /opt/gitea-act-runner +cd /opt/gitea-act-runner + +# Copier le docker-compose.yml (celui de ce dossier) +cp /chemin/vers/act-runner/docker-compose.yml . + +# Créer le fichier .env avec le token +echo "RUNNER_TOKEN=COLLER_LE_TOKEN_ICI" > .env + +# Démarrer +docker compose up -d + +# Vérifier que le runner s'est bien enregistré +docker logs -f gitea-act-runner +# Tu dois voir : "Runner registered successfully" +``` + +--- + +## Étape 4 — Migrer les données existantes (une seule fois) + +Si tu avais déjà un `./data/pricing.db` sur le serveur : +```bash +mkdir -p /opt/3d-pricing-data +cp /chemin/ancien/data/pricing.db /opt/3d-pricing-data/ +``` + +> Le workflow déploie avec `-v /opt/3d-pricing-data:/data` — c'est le dossier permanent de la BDD. + +--- + +## Étape 5 — Activer Actions sur le repo + +Dans Gitea → ton repo → Settings → General → activer "Actions" + +--- + +## Étape 6 — Push et tester + +```bash +cd /mnt/c/Users/jbper/Claude/3d-pricing +git add -A +git commit -m "ci: add Gitea Actions deploy workflow" +git push +``` + +Surveiller dans Gitea → ton repo → Actions — le job doit passer en vert. + +--- + +## Troubleshooting + +**Runner ne s'enregistre pas** +```bash +docker logs gitea-act-runner +# Vérifier que 192.168.5.171:3000 est joignable depuis le Serveur B +ping 192.168.5.171 +curl http://192.168.5.171:3000/api/v1/version +``` + +**`docker: command not found` dans le workflow** +Le binaire docker du host doit être accessible dans le runner. Vérifier le volume dans docker-compose.yml : +```yaml +- /usr/local/bin/docker:/usr/local/bin/docker:ro +``` +Adapter le chemin si docker est ailleurs (`which docker` sur le host). + +**Healthcheck échoue** +```bash +docker logs 3d-pricing +``` + +**Workflow ne se déclenche pas** +- Vérifier que Actions est activé sur le repo (Settings → General) +- Vérifier que `[actions] ENABLED = true` est dans app.ini et que Gitea a redémarré +- Vérifier que le runner apparaît dans Site Admin → Actions → Runners (statut "Online") diff --git a/act-runner/docker-compose.yml b/act-runner/docker-compose.yml new file mode 100644 index 0000000..9980a97 --- /dev/null +++ b/act-runner/docker-compose.yml @@ -0,0 +1,15 @@ +services: + runner: + image: gitea/act_runner:latest + container_name: gitea-act-runner + restart: unless-stopped + environment: + - GITEA_INSTANCE_URL=http://192.168.5.171:3000 + - GITEA_RUNNER_REGISTRATION_TOKEN=${RUNNER_TOKEN} + - GITEA_RUNNER_NAME=portainer-server + - GITEA_RUNNER_LABELS=self-hosted,linux,docker + volumes: + - ./data:/data + - /var/run/docker.sock:/var/run/docker.sock + # Le runner a besoin de docker compose v2 + - /usr/local/bin/docker:/usr/local/bin/docker:ro