Set-OPS-Public/roles/serveur_forgejo/templates/app.ini.j2
Daniel Allaire 203f7c5436 courriel du site : chiffre de bout en bout, et le relais verifie qui il joint
La forge exige STARTTLS et verifie le certificat du relais. Le relais du site
exige le TLS en entree, verifie le serveur joint en sortie (autorites
publiques, lues avant le chroot), et journalise chaque session TLS.

Mesure sur un envoi reel : TLS 1.3 sur les deux troncons, remis.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:30:50 -04:00

101 lines
4.1 KiB
Django/Jinja

; 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' if serveur_forgejo_smtp else 'false' }}
{# STARTTLS EXIGE, CERTIFICAT VERIFIE (2026-10-12). `smtp` seul remettait en clair :
Forgejo le signalait (« insecure SMTP protocol to non-local address »). Le relais
porte un certificat de l'autorite de l'ecosysteme, que la machine reconnait. #}
PROTOCOL = smtp+starttls
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 %}