; Gere par Set-OPS (role serveur_forgejo). Ne pas editer a la main. APP_NAME = {{ serveur_forgejo_app_name }} RUN_USER = {{ serveur_forgejo_utilisateur }} RUN_MODE = prod WORK_PATH = {{ serveur_forgejo_data }} [server] DOMAIN = {{ serveur_forgejo_hostname }} {# ROOT_URL EST GRAVEE DANS LES URL DE CLONAGE, les webhooks et les courriels. Un port qui n'est pas celui du schema y reste pour toujours : chaque ecosysteme descendant porterait `:3000` dans son `origin`. On ne l'ecrit donc que s'il est vraiment atypique. #} ROOT_URL = https://{{ serveur_forgejo_hostname }}{{ (':' ~ serveur_forgejo_http_port | string) if (serveur_forgejo_tls and serveur_forgejo_http_port | int != 443) else '' }}/ HTTP_ADDR = {{ serveur_forgejo_http_addr }} HTTP_PORT = {{ serveur_forgejo_http_port }} {% if serveur_forgejo_tls %} ; TLS SERVI PAR LA FORGE ELLE-MEME : il n'y a pas d'edge devant elle. Le certificat est ; celui de la MACHINE, pose et renouvele par `client_pki` depuis l'AC interne. PROTOCOL = https CERT_FILE = {{ serveur_forgejo_tls_cert }} KEY_FILE = {{ serveur_forgejo_tls_cle }} {% endif %} SSH_DOMAIN = {{ serveur_forgejo_hostname }} [database] {% if serveur_forgejo_bd == 'sqlite' %} ; Un FICHIER, pas un serveur. Il vit dans les donnees de Forgejo, donc la sauvegarde ; existante l'emporte deja — rien de special a prevoir. DB_TYPE = sqlite3 PATH = {{ serveur_forgejo_db_chemin }} {% else %} DB_TYPE = postgres HOST = {{ serveur_forgejo_db_host }}:{{ serveur_forgejo_db_port | default(5432) }} NAME = {{ serveur_forgejo_entree.base }} USER = {{ serveur_forgejo_entree.proprietaire }} PASSWD = {{ serveur_forgejo_db_password }} SSL_MODE = {{ serveur_forgejo_db_sslmode | default('disable') }} {% endif %} [security] INSTALL_LOCK = true SECRET_KEY = {{ serveur_forgejo_secret_key }} INTERNAL_TOKEN = {{ serveur_forgejo_internal_token }} [service] {% if serveur_forgejo_oidc_actif %} ; Identites depuis l'annuaire via le SSO uniquement : pas d'inscription locale, ; mais auto-enregistrement des utilisateurs OIDC. DISABLE_REGISTRATION = false ALLOW_ONLY_EXTERNAL_REGISTRATION = true {# `| bool` obligatoire : sans lui, une valeur transmise en CHAINE (« false » via `-e`, ou un group_vars non typé) est vraie au sens Jinja et le bloc ne sort JAMAIS — la connexion locale resterait ouverte en silence. Verifie par rendu reel. #} {% if not serveur_forgejo_connexion_locale | bool %} ; Connexion interne fermee : le SSO est le seul chemin. Le compte local ; survit et se rattrape par `forgejo admin user change-password` (sudo). ENABLE_INTERNAL_SIGNIN = false ENABLE_BASIC_AUTHENTICATION = false {% endif %} {% else %} DISABLE_REGISTRATION = true {% endif %} {% if serveur_forgejo_oidc_actif %} [oauth2_client] ENABLE_AUTO_REGISTRATION = true USERNAME = preferred_username ACCOUNT_LINKING = auto {% endif %} [mailer] ENABLED = true PROTOCOL = smtp SMTP_ADDR = {{ serveur_forgejo_smtp }} SMTP_PORT = 25 FROM = forge@{{ domaine_interne }} [ui] DEFAULT_THEME = {{ serveur_forgejo_theme }} [ui.meta] DESCRIPTION = {{ serveur_forgejo_meta_description }} ; --- Secret JWT : appartient au SERVICE, relu par le role ------------------------- ; Forgejo genere ce secret au premier demarrage et l'ajoute lui-meme a la fin du ; fichier. Le gabarit ne le portait pas : chaque rendu l'EFFACAIT donc, Forgejo en ; generait un nouveau au redemarrage, et le passage suivant recommencait — autrement dit, ; chaque deploiement faisait tourner le secret JWT de la forge et invalidait les jetons ; qu'elle avait emis. Trouve par le passage d'idempotence du 2026-08-09 : seule ligne ; differente entre deux rendus. ; ; Le role le RELIT avant de rendre (tache « Relire le secret JWT ») et le repose ici. ; Vide au premier deploiement : Forgejo le genere alors, et les rendus suivants le ; conservent. [oauth2] {% if serveur_forgejo_jwt_secret | default("") %} JWT_SECRET = {{ serveur_forgejo_jwt_secret }} {% endif %}