arcodangeandClaude Opus 5 93e7abfc57 fix(ci,crowdsec): écarter le runner de pi1, figer la résolution de la forge, couper le cache Redis du bouncer
Trois correctifs issus d'une même soirée de panne.

1. Runner hors du control-plane (03_cicd.yml)

`capacity: 1` ne borne que CHAQUE runner, pas le cluster : avec deux runners,
deux builds lourds tournent en parallèle. Le 2026-08-26 ils ont saturé pi1
(charge 7,38 sur 15 min, 5,7 Go/8), le démon Docker a cessé de répondre et les
DEUX jobs sont morts à la même seconde — 19:49:27, runs #152 et #154,
`context deadline exceeded` sur docker.sock. pi1 porte l'apiserver et
l'ingress. Même famille que 2026-07-23 et 2026-08-15.

Le parallélisme tombe à 1 (pi3 seul), assumé : le runner du Mac (label
`laptop`) absorbe les jobs lourds et va ~10× plus vite — mesuré sur kadans,
184 s contre 1 065 s sur pi3 et 1 915 s sur pi1.

2. Résolution de la forge figée (03_cicd.yml, group_vars/all/gitea.yml)

Les hôtes à runner résolvent `.lab` via un Pi-hole, puis retombent sur les
nameservers IPv6 du routeur, qui répondent NXDOMAIN — réponse valide, donc
retenue. D'où des pulls qui échouent par intermittence pendant que
`getent hosts` réussit. `extra_hosts` + `--add-host` court-circuitent le DNS.

L'IP est dérivée de l'inventaire (premier hôte du groupe `gitea`) plutôt
qu'écrite en dur. Vérifié que c'est équivalent : le registre répond 401 sur
/v2/ via .202 comme via .201, le svclb Traefik écoutant sur 443 de chaque nœud.

⚠ Ça ne couvre PAS le namespace réseau de buildkit, qui n'hérite d'aucun des
deux — corrigé séparément côté cms (pull côté démon, build sans `--pull`).

3. Cache Redis du bouncer coupé (roles/crowdsec)

`redisCacheUnreachableBlock: false` n'est pas honoré par le plugin : redis-0
étant 0/1, TOUTES les requêtes externes prenaient un 403 alors que
`cscli decisions list` était vide. Logs Traefik : `isBanned:false
redis:unreachable` → 403. Le cache mémoire suffit — en mode `stream` les
décisions viennent de la LAPI de toute façon.

⚠ NE PAS « réparer » Redis en `--save ""` : il sert aussi kadans-jobs (DB 1,
file de jobs) et telegram-gateway (DB 0, sessions d'auth 24 h).

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-26 22:55:38 +02:00

Arcodange Factory

%%{init: { 'logLevel': 'debug', 'theme': 'base', 'rough':true } }%%
flowchart

    prepare_hd>HD setup]
    prepare_pg>PG Setup]
    prepare_gitea>Gitea Setup]

    origin_repo[[original repositories]]
    github_repo_m[[gitea mirrors]]
    gitlab_repo_m[[gitea mirrors]]

    origin_repo -. mirrored .->gitlab_repo_m
    origin_repo -. mirrored .->github_repo_m

    tofu.state -. manages providers/go-gitea .- origin_repo
    tofu.state -. manages providers/gitlabhq/gitlab .- gitlab_repo_m
    tofu.state -. manages providers/integrations/github .- github_repo_m

    subgraph Home
        subgraph pi1
            runner[/gitea runners\]
            subgraph small HD
                backup_data
            end
        end
        subgraph pi2
            PG[(Postgres)]
            subgraph Gitea
                origin_repo
            end
            subgraph HD
                PG_data
                Gitea_data
            end
        end
        subgraph pi3
            subgraph ai
                ollama
            end
        end
        subgraph "master (macbook pro)"
            ansible{{ansible control-node}}
            tofu{{opentofu control-node}}
            subgraph ansible_scripts
                direction TB
                prepare_hd --> prepare_pg --> prepare_gitea
            end
        end
    end
    subgraph Internet
        subgraph Gitlab
            subgraph Group Arcodange
                gitlab_repo_m
            end
        end
        subgraph Github
            subgraph Organization Arcodange
                github_repo_m
            end
        end
        subgraph GCP
            subgraph project arcodange
                subgraph gs://arcodange-tf
                    tofu.state
                end
            end
        end
    end

    tofu == plan/apply ==> tofu.state
    ansible == deploy ==> HD
    ansible == deploy ==> PG
    ansible == deploy ==> Gitea
    ansible --- ansible_scripts

classDef done fill:gold,stroke:indigo,stroke-width:4px,color:blue;
class prepare_hd,nodeId2 done;

Documentation

🏹💻🪽

S
Description
No description provided
Readme
1.5 MiB
Languages
HCL 31.9%
Mermaid 28.4%
Python 15.5%
Dockerfile 9.4%
Jinja 6.8%
Other 8%