[Unit] Description=Forgejo (forge Git) Documentation=https://forgejo.org/docs/ After=network-online.target Wants=network-online.target [Service] Type=simple User={{ serveur_forgejo_utilisateur }} Group={{ serveur_forgejo_utilisateur }} WorkingDirectory={{ serveur_forgejo_data }} ExecStart={{ serveur_forgejo_binaire }} web --config {{ serveur_forgejo_config }} ; RELOAD GRACIEUX PAR SIGHUP (2026-08-25). ; ; Sans `ExecReload`, systemd repond « Job type reload is not applicable for unit ; forgejo.service » — et le handler qui recharge les consommateurs apres un ; renouvellement de certificat ECHOUE. Le cert serait renouvele sur disque et servi ; perime en memoire : la cicatrice est deja dans ce depot, on ne la refait pas. ; ; Forgejo traite SIGHUP comme un redemarrage gracieux : il reprend ses ecoutes, donc ; relit le certificat, sans couper les connexions en cours. {% if serveur_forgejo_http_port | int < 1024 %} ; SE LIER A UN PORT PRIVILEGIE SANS ETRE ROOT. ; ; Forgejo tourne en `{{ serveur_forgejo_utilisateur }}` des le demarrage — il ne peut donc ; pas ouvrir un port < 1024 sans y etre autorise. `CAP_NET_BIND_SERVICE` accorde ; exactement ce droit, et rien d'autre : pas de root, pas de setuid. ; ; Sans elle, le service echoue au `listen` avec « permission denied » sur le PORT, un ; message qui ressemble a s'y meprendre a celui d'un fichier illisible. AmbientCapabilities=CAP_NET_BIND_SERVICE CapabilityBoundingSet=CAP_NET_BIND_SERVICE {% endif %} ExecReload=/bin/kill -HUP $MAINPID Restart=always RestartSec=5 Environment=USER={{ serveur_forgejo_utilisateur }} Environment=HOME=/home/{{ serveur_forgejo_utilisateur }} Environment=GITEA_WORK_DIR={{ serveur_forgejo_data }} {% if serveur_forgejo_db_sslmode | default('disable') in ['verify-ca', 'verify-full'] %} Environment=PGSSLROOTCERT={{ serveur_forgejo_db_sslrootcert }} {% endif %} [Install] WantedBy=multi-user.target