Gitea Common — Configuration applicative partagée
Gitea_Common est la couche applicative partagée de Gitea. Elle n'est pas déployée seule ; elle fournit la configuration propre à Gitea sur laquelle reposent les variantes GKE et Gitea_CloudRun, de sorte que les deux variantes de plateforme se comportent de manière identique là où cela compte. Les utilisateurs finaux ne configurent jamais directement cette couche — elle n'a pas d'entrées propres dans l'interface de déploiement — mais comprendre ce qu'elle fournit explique les valeurs par défaut que vous voyez dans la documentation des plateformes.
Pour l'infrastructure qui provisionne et exécute réellement Gitea, consultez le guide de la plateforme (Gitea_CloudRun) et les guides du socle (App_CloudRun, App_GKE, App_Common).
1. Ce que fournit cette couche
| Domaine | Fourni par Gitea_Common | Où cela apparaît |
|---|---|---|
| Image de conteneur | Build personnalisé léger au-dessus de l'image officielle gitea/gitea:<version> (Cloud Build) avec un point d'entrée de plateforme | Sortie container_image du déploiement de la plateforme |
| Point d'entrée de plateforme | Compose GITEA__database__{HOST,NAME,USER,SSL_MODE} à partir des variables d'environnement DB_* injectées par le socle au démarrage du conteneur, puis exécute le point d'entrée standard de Gitea | Comportement de l'application dans le guide de la plateforme |
| Moteur de base de données | Fixe PostgreSQL (GITEA__database__DB_TYPE = "postgres") | §Base de données dans le guide de la plateforme |
| Amorçage de la base de données | Définit le job db-init (postgres:15-alpine) qui crée de façon idempotente le rôle et la base préfixés par le tenant | Sortie initialization_jobs |
| Secrets de l'application | Génère SECRET_KEY et INTERNAL_TOKEN dans Secret Manager ; réutilise le mot de passe de base de données du socle comme GITEA__database__PASSWD | Sortie secret_ids |
| Valeurs d'environnement de base | INSTALL_LOCK=true, DISABLE_REGISTRATION=false, domaine/URL racine/port du serveur, APP_DATA_PATH sur NFS | Environnement d'exécution du service |
| Contrôles de santé | Sondes par défaut de démarrage (/api/healthz, délai de 30 s) et de vivacité (/api/healthz, délai de 15 s) | §Observabilité dans le guide de la plateforme |
2. Secrets dans Secret Manager
Deux secrets propres à Gitea sont générés une seule fois (valeurs aléatoires de 64 caractères) et stockés dans Secret Manager, car tous deux doivent rester stables entre les redémarrages :
secret-<prefix>-gitea-secret-key— laSECRET_KEYde Gitea, utilisée pour chiffrer les données sensibles stockées (secrets 2FA, jetons OAuth2). La faire tourner invalide ces données chiffrées.secret-<prefix>-gitea-internal-token— l'INTERNAL_TOKENde Gitea, qui authentifie les appels internes à l'API de Gitea.
Le mot de passe de la base de données n'est pas créé ici — il s'agit du secret DB_PASSWORD géré par le socle, repris dans la variable d'environnement GITEA__database__PASSWD par la variante de plateforme. Une attente de propagation de 30 secondes s'exécute après la création des secrets, avant que les ressources dépendantes ne les lisent.
Sur Cloud Run, les secrets sont injectés directement sous leurs noms d'environnement GITEA__security__*. Sur GKE, la CRD SecretSync interdit les tirets bas consécutifs dans les clés des secrets synchronisés : ils sont donc matérialisés sous des clés simples (SECRET_KEY, INTERNAL_TOKEN) et lus depuis des fichiers montés par CSI via la convention native GITEA__section__KEY__FILE de Gitea.
gcloud secrets list --project "$PROJECT" --filter="name~gitea"
gcloud secrets versions access latest --secret=<secret-name> --project "$PROJECT"
3. Image de conteneur et point d'entrée de plateforme
L'image est un build quasi standard : FROM gitea/gitea:<application_version> plus un script copié (/platform-entrypoint.sh), construit par Cloud Build et poussé dans Artifact Registry. Le socle injecte APP_VERSION comme argument de build qui sélectionne le tag amont.
Le point d'entrée existe parce que Cloud Run n'interpole pas les références d'environnement $(VAR) comme le fait Kubernetes. À chaque démarrage du conteneur, il :
- Résout l'hôte de la base de données à partir de
DB_HOST(avec repli surDB_IP, puis sur le loopback). - Choisit le mode SSL Postgres pour chaque saut de connexion — socket Unix du Cloud SQL Auth Proxy ou loopback du proxy →
disable; TCP direct vers l'IP privée →require(Cloud SQL refuse le TCP non chiffré). - Exporte
GITEA__database__HOST,GITEA__database__NAME,GITEA__database__USERetGITEA__database__SSL_MODEà partir des valeursDB_*injectées (préfixées par le tenant), en journalisant une ligneGitea DB wired: …. - Exécute le
/usr/bin/entrypointstandard de Gitea, qui écrit toutes les variables d'environnementGITEA__*dansapp.iniet lance le serveur sous s6.
# Confirm the DB wiring the entrypoint chose
gcloud run services logs read <service-name> --project "$PROJECT" --region "$REGION" --limit 30 | grep "Gitea DB wired"
4. Initialisation de la base de données
Le job db-init par défaut (image postgres:15-alpine, execute_on_apply = true, jusqu'à 3 nouvelles tentatives) s'exécute à chaque apply et est idempotent :
- Il attend que l'instance Cloud SQL accepte les connexions.
- Il crée le rôle applicatif préfixé par le tenant s'il est absent (ou réinitialise son mot de passe), lui accorde
CREATEDBet l'accorde àpostgres. - Il crée la base Gitea dont ce rôle est propriétaire si elle est absente (ou corrige la propriété), puis accorde tous les privilèges.
Gitea exécute lui-même ses migrations de schéma automatiquement au démarrage, de sorte que les mises à niveau de version ne nécessitent aucune étape de migration manuelle.
gcloud run jobs executions list --job=<service-name>-db-init --project "$PROJECT" --region "$REGION"
5. Valeurs par défaut de l'environnement de base
GITEA__database__DB_TYPE = "postgres"— le seul moteur pris en charge par cette couche.GITEA__server__DOMAIN/GITEA__server__ROOT_URL— issus depublic_domain/public_url(ils déterminent les URL de clonage ; indiquez l'hôte réel en production).GITEA__server__HTTP_PORT = 3000,GITEA__server__PROTOCOL = "http"— TLS se termine à la périphérie de la plateforme.GITEA__security__INSTALL_LOCK = "true"— l'installateur web du premier lancement est ignoré ; la configuration est entièrement pilotée par l'environnement. Le premier utilisateur inscrit devient administrateur.GITEA__service__DISABLE_REGISTRATION = "false"— inscription en libre-service activée par défaut ; passez-la àtrueaprès avoir créé le compte administrateur sur les forges privées.GITEA__server__APP_DATA_PATH = <nfs_mount_path>— les dépôts, objets LFS et pièces jointes persistent sur le volume NFS partagé.
Les environment_variables fournies par l'utilisateur sont fusionnées par-dessus ces valeurs par défaut, de sorte que toute clé GITEA__<section>__<KEY> peut être surchargée par déploiement.
6. Stockage d'objets
Gitea_Common ne déclare aucun bucket propre (l'output storage_buckets est vide) — les données durables de la forge résident sur le volume NFS via APP_DATA_PATH. Le socle de la variante de plateforme provisionne néanmoins un bucket GCS data à usage général et le bucket des sauvegardes automatisées :
gcloud storage buckets list --project "$PROJECT" --filter="name~gitea"
7. Comportement des sondes de santé
Les deux sondes ciblent le point de terminaison de santé non authentifié de Gitea, /api/healthz, qui renvoie HTTP 200 dès que le serveur est opérationnel :
- Sonde de démarrage — HTTP
/api/healthz, délai initial de 30 s (la variante de plateforme applique une période de 20 s et un seuil d'échec de 10). - Sonde de vivacité — HTTP
/api/healthz, délai initial de 15 s, période de 30 s, seuil d'échec de 3.
Gitea démarre rapidement (binaire Go unique), mais le premier démarrage exécute aussi les migrations de schéma sur une base fraîchement créée — le délai initial de 30 secondes en tient compte.
Pour la configuration de Gitea visible par l'utilisateur (variables par groupe, outputs et manière d'explorer chaque service depuis la console et la CLI), consultez le guide de la plateforme : Gitea_CloudRun.
Guides associés
- Gitea sur Google Cloud Run — cette configuration déployée sur Cloud Run.
- Gitea sur GKE Autopilot — cette configuration déployée sur GKE.
Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.