- vault_forgejo_admin_password (compte local forgejo-admin, accès de secours) - doc : note DISABLE_REGISTRATION, section break-glass, su-exec git obligatoire Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6.7 KiB
Forgejo — Git self-host (miroir de GitHub)
Forge Git Forgejo dans le cluster, exposée dans le hub (git.funklab.online, SSO
Authentik) et configurée en miroir lecture seule du dépôt GitHub Funk-lab.
GitHub reste la source de vérité (ArgoCD continue d'y tirer, rien n'est modifié) ;
Forgejo en fournit une copie locale synchronisée + une UI + de la résilience.
Namespace : ai. Base PostgreSQL sur storage-01 (pattern Ghostfolio/n8n).
Vue d'ensemble
GitHub (Funk-lab, source de vérité)
│ pull-mirror (toutes les ~10 min, HTTPS + PAT lecture)
▼
Forgejo (cluster, ns ai) ──HTTPS──▶ git.funklab.online (SSO Authentik) / git.lab.local (LAN)
│
└─ dépôts sur PVC nfs `forgejo-data` ; métadonnées sur PostgreSQL s01 (base `forgejo`)
- Sens de synchro : GitHub → Forgejo uniquement (miroir). On ne pousse pas depuis
Forgejo. ArgoCD n'est pas touché (il tire toujours
git@github.com:...Funk-lab). - Clone HTTPS uniquement (
DISABLE_SSH=true) — pas de port 22 supplémentaire exposé.
Composants
- Deployment
forgejo(k8s/apps/forgejo/) : imagecodeberg.org/forgejo/forgejo:11, config par variables d'envFORGEJO__section__CLE(pas d'app.ini versionné). - PVC
forgejo-data(RWO, nfs, 10Gi) monté sur/data: dépôts git +app.inigénéré (dontINTERNAL_TOKENpersistant). - PostgreSQL sur storage-01 : base + user
forgejo(rôle Ansiblepostgresql). - IngressRoutes :
git.lab.local(interne, web) +git.funklab.online(websecure, Let's Encrypt, + middlewaressecurity-headers/ratelimit).
Secrets
Vault Ansible (make vault-view) :
| Variable | Usage |
|---|---|
vault_pg_forgejo_password |
Base PG forgejo (= clé pg-password du secret k8s) |
vault_forgejo_oauth_client_secret |
Client secret OIDC Forgejo côté Authentik |
vault_forgejo_admin_password |
Mot de passe de l'admin local break-glass forgejo-admin |
Secret k8s (créé à la main, hors git, comme les autres apps) :
kubectl -n ai create secret generic forgejo-secret \
--from-literal=pg-password='<vault_pg_forgejo_password>' \
--from-literal=secret-key="$(openssl rand -base64 32)"
secret-keychiffre les données sensibles internes de Forgejo — le fixer via le secret (plutôt que le laisser régénérer) garde les sessions stables entre redéploiements.
Déploiement (ordre)
- Base :
ansible-playbook -i inventory.yml playbooks/storage-01.yml --tags postgresql(crée la base + userforgejo). - Secret k8s ci-dessus (avant le 1er sync, sinon
CreateContainerConfigError). - Merge sur
main→ ArgoCD crée l'Applicationforgejo(~3 min). - OIDC + admin + miroir : étapes ci-dessous (config en base, hors IaC).
Configuration OIDC (Authentik + Forgejo)
Côté Authentik (UI)
- Providers → Create → OAuth2/OpenID Provider :
- Name
forgejo, flowimplicit-consent, Client type : Confidential - Client ID
forgejo· Client Secret =vault_forgejo_oauth_client_secret - Redirect URI (Strict) :
https://git.funklab.online/user/oauth2/authentik/callback - Signing Key : le certificat self-signed
- Name
- Applications → Create : Name
Forgejo, slugforgejo, providerforgejo, Launch URLhttps://git.funklab.online - Bindings → lier un groupe (ou ouvert). Membres de
lab-admins→ admin Forgejo.
Côté Forgejo (CLI, une fois)
La source d'auth OIDC s'ajoute par commande (config en base — pas d'admin préalable requis) :
kubectl -n ai exec deploy/forgejo -- forgejo admin auth add-oauth \
--name authentik \
--provider openidConnect \
--key forgejo \
--secret '<vault_forgejo_oauth_client_secret>' \
--auto-discover-url https://auth.funklab.online/application/o/forgejo/.well-known/openid-configuration \
--group-claim-name groups \
--admin-group lab-admins \
--scopes openid --scopes profile --scopes email
Ensuite : https://git.funklab.online → bouton « Se connecter avec authentik ».
Le premier utilisateur créé devient admin ; via --admin-group lab-admins, tout
membre du groupe est admin.
⚠️
DISABLE_REGISTRATIONdoit resterfalse(avecALLOW_ONLY_EXTERNAL_REGISTRATION=true) : àtrueil bloque aussi l'auto-provisioning OIDC → écran « inscriptions désactivées » après un login pourtant réussi.
Admin local break-glass
Accès de secours si Authentik est HS (Forgejo n'a aucun admin par défaut). Compte
forgejo-admin déjà créé, mot de passe dans le vault (vault_forgejo_admin_password) :
# login local : https://git.funklab.online/user/login (formulaire en bas)
# (re)créer / réinitialiser si besoin :
kubectl -n ai exec deploy/forgejo -- su-exec git forgejo admin user create \
--username forgejo-admin --email forgejo-admin@funklab.online \
--password '<vault_forgejo_admin_password>' --admin --must-change-password=false
Le CLI
forgejorefuse de tourner en root → toujours le préfixer desu-exec git.
Créer le miroir de Funk-lab
Une fois connecté (admin) : + → New Migration → GitHub :
- Clone Address :
https://github.com/Alkatrazz24/Funk-lab.git - Cocher « This repository will be a mirror »
- Le dépôt étant privé, renseigner un PAT GitHub en lecture seule
(Settings GitHub → Developer settings → Fine-grained token, scope
Contents: readsurFunk-lab) - Owner : ton compte · Intervalle de synchro :
10m(défaut modifiable)
Forgejo re-tire alors GitHub automatiquement. Forcer une synchro : page du dépôt → Settings → Mirror Settings → Synchronize Now.
Alternative API (au lieu de l'UI) :
POST /api/v1/repos/migrateavec"mirror": trueet"auth_token": "<PAT>"(jeton Forgejo perso en en-tête).
Pièges / notes
- Miroir = lecture seule : ne pas committer dans Forgejo, les changements seraient écrasés au prochain pull. Le workflow reste GitHub (PR) → ArgoCD.
- Repo privé → PAT GitHub obligatoire à la création du miroir (sinon
authentication required). Le PAT est stocké chiffré par Forgejo en base. - Config en base (source OIDC, miroir) hors IaC — comme Authentik/Guacamole. Backup PG = gap connu.
git.funklab.onlinedéjà résolu par le wildcard OVH + dnsmasq split-horizon — aucun ajout DNS. Le cert Let's Encrypt s'émet au 1er accès (HTTP-01).- PVC RWO +
strategy: Recreate: un seul pod monte/data. Ne pas passer en plusieurs réplicas sans stockage RWX + config HA. - Dépannage OIDC :
kubectl -n ai logs deploy/forgejo | grep -i oauth. Redirect URI au caractère près et slug Authentik =forgejo(sinon discovery 404, cf. auth-portal).