Outils pour utilisateurs

Outils du site


services:forge.chapril.org

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
services:forge.chapril.org [2026/04/11 17:40] – supprimée - modification externe (Date inconnue) 127.0.0.1services:forge.chapril.org [2026/04/11 17:40] (Version actuelle) – ↷ Page déplacée de admin:services:forge.chapril.org à services:forge.chapril.org pitchum
Ligne 1: Ligne 1:
 +====== Service forge.chapril.org ======
  
 +<note tip>
 +Cette version est adaptée de [[https://admin.april.org/doku.php?id=sysadm:services:forge.april.org|celle du SI April]].
 +</note>
 +
 +===== Introduction =====
 +
 +Cette documentation explique comment installer un service, en l’occurrence la forge, sur une nouvelle machine virtuelle de l'infrastructure du Chapril.
 +Ce service fait parti d'un ensemble de services du Chapril.
 +Une partie de sa mise en place est donc similaire aux autres services.
 +Même si l'ensemble de la procédure est traitée, c'est la partie plus spécifique à ce service qui sera la plus détaillée.
 +Par exemple, la création d'une machine virtuelle renvoie sur une autre page et n'est pas détaillée ici.
 +Cette documentation est technique mais se veut accessible avec de bonnes connaissances notamment en ce qui concerne la ligne de commande, elle est suivie d'une documentation concernant l'utilisation, la modération et l'animation.
 +
 +Ce service de forge est basé sur Gitea, distribué sous licence MIT.
 +
 +Les dépôts sont publics ou privés au choix. 
 +
 +===== Installation =====
 +
 +Procédure d'installation inspirée de https://docs.gitea.io/en-us/install-from-binary/ où Gitea consiste en un unique binaire.
 +
 +À noter l'absence de paquet DEB dans Debian : https://docs.gitea.io/en-us/install-from-package/#debian.
 +
 +À noter l'absence de paquet DEB pertinent :
 +> Although there is a package of Gitea in Debian’s contrib, it is not supported directly by us.
 +> Unfortunately, the package is not maintained anymore and broken because of missing sources. Please follow the deployment from binary guide instead.
 +
 +<note warning>
 +La documentation est traduite en Français mais pas complètement.
 +La consultation en version française peut vous faire perdre beaucoup d'informations utiles.
 +Voir par exemple entre https://docs.gitea.io/en-us/install-from-binary/ et https://docs.gitea.io/fr-fr/install-from-binary/.
 +</note>
 +
 +==== Déploiement du domaine sur la VM DNS =====
 +
 +Suivre la [[admin:procedures:ajout-record-dns|procédure d'ajout d'un domaine]].
 +
 +==== Déploiement du domaine sur la VM Bastion ====
 +
 +Sur la VM Bastion, configurer un nouveau site :
 +<code bash>
 +cd /etc/nginx/sites-enabled/
 +cat forge.chapril.org 
 +</code>
 +<code nginx>
 +server {
 +    listen 80;
 +    listen [::]:80;
 +
 +    server_name forge.chapril.org; 
 +
 +    access_log /var/log/nginx/forge.chapril.org/forge.chapril.org-access.log;
 +    error_log /var/log/nginx/forge.chapril.org/forge.chapril.org-error.log;
 +
 +    include /etc/nginx/acme-challenge;
 +    include /etc/nginx/sexy-chapril;
 +    include /etc/nginx/force-ssl.conf;
 +}
 +
 +server {
 +    listen 443 ssl;
 +    listen [::]:443 ssl;
 +
 +    server_name forge.chapril.org;
 +    include /etc/nginx/sexy-chapril;
 +
 +    access_log /var/log/nginx/forge.chapril.org/forge.chapril.org-access.log;
 +    error_log /var/log/nginx/forge.chapril.org/forge.chapril.org-error.log;
 +
 +    ssl_certificate     /var/lib/dehydrated/certs/forge.chapril.org/fullchain.pem;
 +    ssl_certificate_key /var/lib/dehydrated/certs/forge.chapril.org/privkey.pem;
 +
 +    include /etc/nginx/acme-challenge;
 +    include /etc/nginx/chapril-banner-location;
 +
 +    client_max_body_size 100M;
 +
 +    location / {
 +        include /etc/nginx/chapril-banner;
 +        proxy_pass http://grof.cluster.chapril.org;
 +    }
 +}
 +</code>
 +
 +Afin d'autoriser des téléversements de fichiers de plus d'1 Mo,
 +s'assurer de la présence d'une ligne dédiée dans la configuration Nginx du site :
 +<code nginx>
 +client_max_body_size 100M;
 +</code>
 +
 +==== Installation d'un serveur HTTP sur la VM Grof =====
 +
 +Sur la VM Grof, installer Apache 2 :
 +<code bash>
 +apt-get install apache2
 +</code>
 +
 +Configuration de la propagation proxy :
 +<code bash>
 +cd /etc/apache2/
 +cat conf-available/reverse-proxy.conf
 +</code>
 +<code apache>
 +<IfModule !remoteip_module>
 +        LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so
 +</IfModule>
 +
 +<IfModule remoteip_module>
 +        RemoteIPHeader X-Forwarded-For
 +        RemoteIPInternalProxy 192.168.1.93 2a01:4f8:10b:c42::93 2a01:4f8:10b:c41::93
 +        LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined-proxy
 +</IfModule>
 +</code>
 +<code bash>
 +cd /etc/apache2/conf-enable/
 +ln -s ../conf-available/reverse-proxy.conf
 +</code>
 +
 +==== Déploiement du domaine sur la VM Grof =====
 +
 +Sur la VM Grof, activer les modules ''proxy'' et ''proxy_http'' :
 +<code bash>
 +a2enmod proxy
 +a2enmod proxy_http
 +systemctl restart apache2
 +</code>
 +
 +La documentation officielle pour Apache : https://docs.gitea.io/en-us/reverse-proxies/.
 +
 +Application :
 +<code bash>
 +cd /etc/apache2/sites-enabled/
 +cat forge.chapril.org.conf
 +</code>
 +<code apache>
 +<VirtualHost *:80>
 +    ServerName forge.chapril.org
 +    ServerAdmin admins@chapril.org
 +
 +    ErrorLog ${APACHE_LOG_DIR}/forge.chapril.org/forge.april.org-error.log
 +    CustomLog ${APACHE_LOG_DIR}/forge.chapril.org/forge.april.org-access.log combined-proxy
 +
 +    ProxyPreserveHost On
 +    ProxyRequests off
 +    AllowEncodedSlashes NoDecode
 +    ProxyPass / http://localhost:3000/ nocanon
 +    ProxyPassReverse / http://localhost:3000/
 +</VirtualHost>
 +</code>
 +
 +==== Configuration SMTP ====
 +
 +Configuration de Postfix dans la VM Grof pour que les courriels de Gitea partent correctement :
 +<code bash>
 +cd ~/
 +grep smtpd_use_tls /etc/postfix/main.cf
 +smtpd_use_tls=no
 +</code>
 +
 +==== Installation de PostgreSQL ====
 +
 +Installer le paquet serveur de la base de données:
 +<code bash>
 +apt install postgresql postgresql-contrib
 +</code>
 +
 +D'après la documentation d'installation de Gitea :
 +<code>
 +PostgreSQL uses md5 challenge-response encryption scheme for password authentication by default.
 +Nowadays this scheme is not considered secure anymore. Use SCRAM-SHA-256 scheme instead by editing
 +the postgresql.conf configuration file on the database server to:
 +
 +password_encryption = scram-sha-256
 +
 +Restart PostgreSQL to apply the setting.
 +</code>
 +
 +Le conseil semble judicieux donc éditer le fichier ''/etc/postgresql/11/main/postgresql.conf'' :
 +<code>
 +#password_encryption = md5              # md5 or scram-sha-256
 +password_encryption = scram-sha-256
 +</code>
 +
 +Et redémarrer le service :
 +<code bash>
 +systemctl restart postgresql.service
 +</code>
 +
 +==== Préparation de la base de données ====
 +
 +Note : Gitea semble insister pour mettre un mot de passe pour l'accès à la base de données.
 +
 +Créer un utilisateur (« role » en langage Pgsql) :
 +<code bash>
 +su -c "psql" - postgres
 +</code>
 +<code sql>
 +CREATE ROLE giteadbadmin WITH LOGIN PASSWORD 'xxxxxxxxxxxxx';
 +</code>
 +
 +Créer une base de données :
 +<code sql>
 +CREATE DATABASE giteadb WITH OWNER gitea-dbadmin TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'fr_FR.UTF-8' LC_CTYPE 'fr_FR.UTF-8';
 +</code>
 +
 +Donner l'accès en éditant le ficher ''/etc/postgresql/11/main/pg_hba.conf'' :
 +<code>
 +local    giteadb    gitea    scram-sha-256
 +</code>
 +
 +Redémarrer le service :
 +<code bash>
 +restart postgresql.service
 +</code>
 +
 +==== Création d'une partition dédiée ====
 +
 +Afin que les données (dépôts…) de Gitea soient isolées de la partition système, utilisation d'un second disque.
 +
 +Via ''virt-manager'', créer une partition ''qcow2'' de 30 Go puis l'ajouter à la VM Grof.
 +Le reste se fait sur la VM Grof.
 +
 +Création de la partition de stockage :
 +<code bash>
 +fdisk  /dev/vdb
 +</code>
 +
 +Choisir ''n'' puis les choix par défaut.
 +Écrire la table des partitions.
 +
 +Création du //Volume Group// et //Logic Volume//  :
 +<code bash>
 +pvcreate  /dev/vdb1
 +vgcreate grof-data-vg /dev/vdb1
 +lvcreate -l 100%FREE -n gitea grof-data-vg
 +</code>
 +
 +Création du FS et du dossier de montage :
 +<code bash>
 +mke2fs -L gitea -e remount-ro -m 0 /dev/mapper/grof--data--vg-gitea
 +mkdir /srv/gitea
 +</code>
 +
 +Définition dans ''/etc/fstab'' :
 +<code>
 +/dev/mapper/grof--data--vg-gitea  /srv/gitea              ext4    defaults        0       2
 +</code>
 +
 +Premier montage :
 +<code bash>
 +mkdir /srv/gitea
 +mount
 +chown gitea.gitea /srv/gitea
 +</code>
 +
 +==== Création d'un utilisateur système dédié ====
 +
 +Créer un utilisateur système dédié :
 +<code bash>
 +adduser \
 +   --system \
 +   --shell /bin/bash \
 +   --gecos 'Git Version Control' \
 +   --group \
 +   --disabled-password \
 +   --home /srv/gitea/ \
 +   gitea
 +</code>
 +
 +==== Préparation des fichiers ====
 +
 +Création de l'arborescence dédiée :
 +<code bash>
 +export GITEA_WORK_DIR=/srv/gitea
 +mkdir -p $GITEA_WORK_DIR/{backups,bin,custom,data,repositories}
 +
 +chown root:gitea $GITEA_WORK_DIR
 +chown root:root $GITEA_WORK_DIR/{bin,custom}
 +chown gitea:gitea $GITEA_WORK_DIR/{backups,data,repositories}
 +
 +chmod u=rwx,g=rx,o= $GITEA_WORK_DIR
 +chmod u=rwx,g=rx,o=rx $GITEA_WORK_DIR/{bin,custom}
 +chmod u=rwx,g=rx,o= $GITEA_WORK_DIR/{backups,data,repositories}
 +
 +mkdir /etc/gitea
 +chown root:gitea /etc/gitea
 +chmod ug=rwx /etc/gitea
 +chmod o= /etc/gitea
 +
 +mkdir /var/log/gitea
 +chown gitea.gitea /var/log/gitea
 +</code>
 +
 +==== Récupération du binaire ====
 +
 +Gitea consiste en un seul fichier binaire :
 +<code bash>
 +mkdir /srv/gitea/bin
 +cd /srv/gitea/bin/
 +
 +wget -O gitea https://dl.gitea.io/gitea/1.11.1/gitea-1.11.1-linux-amd64
 +chown root.gitea . gitea
 +chmod g=rx . gitea
 +</code>
 +
 +Vérification signature :
 +<code bash>
 +wget https://dl.gitea.io/gitea/1.11.1/gitea-1.11.1-linux-amd64.asc
 +gpg --keyserver pgp.mit.edu --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
 +gpg --verify gitea-1.11.1-linux-amd64.asc gitea
 +</code>
 +
 +==== Intégration du service dans Systemd ====
 +
 +La documentation de Gitea contient une page dédiée : https://docs.gitea.io/en-us/linux-service/.
 +
 +Gitea propose un fichier prêt à l'emploi dont il faut modifier manuellement quelques paramètres : https://github.com/go-gitea/gitea/blob/master/contrib/systemd/gitea.service.
 +
 +Fichier personnalisé pour la forge April à mettre dans ''/etc/systemd/system/gitea.service'' :
 +<code ini>
 +[Unit]
 +Description=Gitea (Git with a cup of tea)
 +After=syslog.target
 +After=network.target
 +Requires=postgresql.service
 +
 +[Service]
 +# Modify these two values and uncomment them if you have
 +# repos with lots of files and get an HTTP error 500 because
 +# of that
 +###
 +#LimitMEMLOCK=infinity
 +#LimitNOFILE=65535
 +RestartSec=2s
 +Type=simple
 +User=gitea
 +Group=gitea
 +WorkingDirectory=/srv/gitea
 +ExecStart=/srv/gitea/bin/gitea --config /etc/gitea/gitea.ini web
 +ExecStop=/srv/gitea/bin/gitea --config /etc/gitea/gitea.ini manager flush-queues
 +ExecStop=/srv/gitea/bin/gitea --config /etc/gitea/gitea.ini manager shutdown
 +Restart=always
 +Environment=USER=gitea HOME=/srv/gitea/
 +
 +[Install]
 +WantedBy=multi-user.target
 +</code>
 +
 +Démarrage et activation du service :
 +<code bash>
 +systemctl start gitea.service
 +systemctl enable gitea.service
 +</code>
 +
 +==== Premier démarrage ====
 +
 +Suite au premier démarrage, ouvrir un navigateur Web sur le site et cliquer sur //Connexion//.
 +Alors une page de configuration générale s'ouvre.
 +La remplir comme suit :
 +  * Base de données :
 +    * Type de base de données : ''Postgresql'',
 +    * Hôte : ''127.0.0.1:5432'',
 +    * Nom d'utilisateur : ''giteadbadmin'',
 +    * Mot de passe : ''xxxxxxxxxxxx'',
 +    * Nom de la base : ''giteadb'' ;
 +  * Configuration générale :
 +    * Titre du site : ''La forge Chapril'',
 +    * Emplacement racine des dépôts : ''/srv/gitea/repositories'',
 +    * Domaine du serveur SSH : ''forge.chapril.org'',
 +    * URL de base de Gitea : ''https://forge.chapril.org/'',
 +    * Chemin des fichiers log : ''/var/log/gitea/'',
 +    * Laisser les autres valeurs par défaut ;
 +  * Paramètres facultatifs :
 +    * paramètres //emails// :
 +      * Hôte SMTP : ''localhost:25'',
 +      * Envoyer les //mails// en tant que : ''admins@chapril.org'',
 +      * Exiger la confirmation de l'//email// lors de l'inscription : oui,
 +      * Activer les notifications par //email// : oui,
 +    * Paramètres serveurs et tierces parties :
 +      * Activer le mode hors-ligne : oui (servira toutes les ressources localement),
 +      * Désactiver Gravatar : oui,
 +      * Activer les avatars unifiés : non,
 +      * Activer l'inscription OpenID : non,
 +      * Désactiver le formulaire d'inscription : non,
 +      * N'autoriser l'inscription qu'à partir des services externes : non,
 +      * Activer l'inscription OpenID : non,
 +      * Activer le CAPTCHA : oui,
 +      * Exiger la connexion à un compte pour afficher les pages : non,
 +      * Masquer les adresses //e-mail// par défaut : non,
 +      * Autoriser la création d'organisation par défaut : oui,
 +      * Activer le suivi de temps par défaut : non,
 +    * Paramètres de compte administrateur :
 +      * Nom : ''chapriladmin'' (''admin'' est refusé par le formulaire),
 +      * Mot de passe : ''xxxxxxxxxxx'',
 +      * Adresse //email// : ''admins@chapril.org''.
 +
 +Puis cliquer sur //Installer Gitea//.
 +
 +Un fichier de configuration a été créé dans ''/etc/gitea/gitea.ini''.
 +Par la suite, les valeurs pourront être modifiées dans ''/etc/gitea/gitea.ini''.
 +Précaution de protection du fichier de configuration :
 +<code bash>
 +chown -R root:gitea /etc/gitea
 +chmod g=rx /etc/gitea
 +chmod g=r /etc/gitea/gitea.ini
 +</code>
 +
 +===== Paramétrages complémentaires =====
 +
 +Dans la page ''https://docs.gitea.io/en-us/config-cheat-sheet/'', des paramétrages affinés sont trouvables à faire dans ''/etc/gitea/gitea.ini''.
 +
 +==== Section par défaut ===
 +
 +<code ini>
 +APP_NAME = La forge Chapril
 +RUN_USER = gitea
 +RUN_MODE = prod
 +WORK_PATH = /srv/gitea
 +</code>
 +
 +==== Base de données ====
 +
 +<code ini>
 +[database]
 +DB_TYPE  = postgres
 +HOST     = /run/postgresql
 +NAME     = giteadb
 +USER     = giteadbadmin
 +PASSWD   = [REDACTED]
 +SCHEMA   
 +SSL_MODE = disable
 +CHARSET  = utf8
 +</code>
 +
 +==== Désactivation des appels aux services externes ====
 +
 +<code ini>
 +[picture]
 +DISABLE_GRAVATAR        = true
 +ENABLE_FEDERATED_AVATAR = false
 +
 +[openid]
 +ENABLE_OPENID_SIGNIN = false
 +ENABLE_OPENID_SIGNUP = false
 +</code>
 +
 +
 +
 +
 +==== Licences préférées ====
 +
 +Extrait de la documentation :
 +<code>
 +PREFERRED_LICENSES: Apache License 2.0,MIT License:
 +    Preferred Licenses to place at the top of the list.
 +    Name must match file name in conf/license or custom/conf/license.
 +</code>
 +
 +Les noms de fichiers à utiliser sont présents dans les sources : https://github.com/go-gitea/gitea/tree/master/options/license.
 +
 +Paramétrage dans ''/etc/gitea/gitea.ini'' :
 +<code ini>
 +[repository]
 +ROOT = /srv/gitea/repositories
 +PREFERRED_LICENSES=AGPL-3.0-or-later,GPL-3.0-or-later,CC-BY-SA-4.0
 +</code>
 +
 +==== LFS ====
 +
 +<code ini>
 +[lfs]
 +PATH = /srv/gitea/data/lfs
 +</code>
 +
 +==== Taille maximale de téléversement ====
 +
 +Par défaut, la taille maximale d'un téléversement est limité à 3 Mo.
 +Pour augmenter la taille (à 20 Mo pour la forge Chapril), ajouter une section dans ''/etc/gitea/gitea.ini'' :
 +<code ini>
 +[repository.upload]
 +; Whether repository file uploads are enabled. Defaults to `true`
 +; ENABLED = true
 +; Path for uploads. Defaults to `data/tmp/uploads` (tmp gets deleted on gitea restart)
 +; TEMP_PATH = data/tmp/uploads
 +; One or more allowed types, e.g. image/jpeg|image/png. Nothing means any file type
 +; ALLOWED_TYPES =
 +; Max size of each file in megabytes. Defaults to 3MB
 +FILE_MAX_SIZE = 20
 +; Max number of files per upload. Defaults to 5
 +; MAX_FILES = 5
 +</code>
 +
 +Pour les téléversements de version (//release//) :
 +<code ini>
 +[attachment]
 +; Max size of each file. Defaults to 4MB
 +MAX_SIZE = 50
 +</code>
 +
 +==== Sections session et log ====
 +
 +<code ini>
 +[session]
 +PROVIDER = file
 +
 +[log]
 +MODE      = file
 +LEVEL     = info
 +ROOT_PATH = /var/log/gitea/
 +</code>
 +
 +==== Désactiver l'ensemble des dépôts d'objets binaires ====
 +
 +<code ini>
 +[packages]
 +; Enable/Disable package registry capabilities
 +ENABLED = false
 +</code>
 +
 +===== Activer le flux SSH =====
 +
 +Pour les sous-commandes ''clone'', ''push'' et ''pull'' de Git, il est bien pratique de passer par SSH.
 +Sauf qu'en IPv4, le port 22 est déjà redirigé vers la VM Bastion qui //proxifie// les accès SSH aux VM.
 +
 +Du coup, choix architectural d'utiliser un port dédié à la forge :
 +<code>
 +user ---> vip:222 --nat-ipv4-> grof:222
 +</code>
 +
 +Configuration dans ''/etc/gitea/gitea.ini'' :
 +<code ini>
 +SSH_PORT = 222
 +</code>
 +
 +Configuration dédiée de FireHOL :
 +<code bash>
 +cd /etc/firehol/
 +cat services/gitea.conf
 +</code>
 +<code bash>
 +#FHVER: 1:213
 +# La premiere ligne ci dessus est nécessaire !!
 +server_gitea_ports="tcp/222"
 +client_gitea_ports="default"
 +</code>
 +<code bash>
 +cd /etc/firehol/
 +grep gitea firehol-ext2me.conf
 +</code>
 +<code bash>
 +server gitea accept
 +</code>
 +
 +Gestion du port 222 par SSH :
 +<code>
 +diff --git a/ssh/sshd_config b/ssh/sshd_config
 +-#Port 22
 ++Port 22
 ++Port 222
 +</code>
 +
 +Pour rappel, dans ''/etc/ssh/sshd_config'', est configuré ainsi :
 +<code sshconfig>
 +AuthorizedKeysFile /etc/ssh/authorized_keys/%u
 +</code>
 +
 +Afin que le fichier ''/srv/gitea/.ssh/authorized_keys'' soit pris en compte, il faut faire un lien :
 +<code bash>
 +ln -s /srv/gitea/.ssh/authorized_keys /etc/ssh/authorized_keys/gitea
 +</code>
 +
 +Redirection du port 222 depuis ''vip'' vers le port 22 de la VM Grof :
 +<code>
 +TODO
 +</code>
 +
 +===== Personnalisation =====
 +
 +Basée sur la page https://docs.gitea.io/en-us/customizing-gitea/.
 +
 +Le répertoire ''root@grof:/srv/gitea/custom/'' est un [[https://forge.april.org/Chapril/forge.chapril.org-custom|dépôt Git]].
 +
 +Le but est d'avoir un suivi des modifications.
 +
 +==== Page d'accueil ====
 +
 +La personnalisation aux couleurs de l'April du logo d'accueil est des 4 textes.
 +
 +{{:admin:services:logo-forgechaprilorg.png?nolink&200|Logotype de la forge du Chapril}}
 +
 +Récupérer l'image ci-dessus et la placer au bon endroit avec les bonnes permissions :
 +<code bash>
 +mkdir -p /srv/gitea/custom/public
 +cd /srv/gitea/custom/public/
 +wget https://admin.chapril.org/lib/exe/fetch.php?media=admin:services:logo-forgechaprilorg.png
 +chmod go+r *png
 +</code>
 +
 +Récupérer le fichier //template// :
 +<code bash>
 +mkdir -p /srv/gitea/custom/templates
 +cd /srv/gitea/custom/templates/
 +wget https://raw.githubusercontent.com/go-gitea/gitea/v1.14.0/templates/home.tmpl
 +</code>
 +
 +Appliquer dans la VM Grof les changements suivants :
 +<code bash>
 +cd /srv/gitea/custom/templates/
 +diff home.tmpl-1.14.0 home.tmpl
 +</code>
 +<code>
 +1a2,7
 +> <style type="text/css">
 +> .home .hero .svg {color: #1c79c5 !important;}
 +> .ui.icon.header svg {width: 40px !important; height: 40px !important; display: inline !important; vertical-align: middle !important; margin-right: 5px;}
 +> .hero {font-weight: bold !important;}
 +> .full.height {padding-bottom : 10px !important; }
 +> </style>
 +6c12
 +<                               <img class="logo" width="220" height="220" src="{{StaticUrlPrefix}}/img/logo.svg"/>
 +---
 +>                               <img class="logo" width="220" height="136" src="{{StaticUrlPrefix}}/logo-forgechaprilorg.png"/>
 +12c18
 +<                               <h2>{{.i18n.Tr "startpage.app_desc"}}</h2>
 +---
 +>                               <h2>Plateforme collaborative de contributions libres.</h2>
 +19c25
 +<                               {{svg "octicon-flame"}} {{.i18n.Tr "startpage.install"}}
 +---
 +>                               {{svg "octicon-flame"}} Qui peut avoir un compte ?
 +22c28
 +<                               {{.i18n.Tr "startpage.install_desc" | Str2html}}
 +---
 +>                               Tout le monde, cette instance est ouverte au public.
 +27c33
 +<                               {{svg "octicon-device-desktop"}} {{.i18n.Tr "startpage.platform"}}
 +---
 +>                               {{svg "octicon-device-desktop"}} Quels contenus sont acceptés ?
 +30c36
 +<                               {{.i18n.Tr "startpage.platform_desc" | Str2html}}
 +---
 +>                               La forge Chapril accueille tout type de contenu tel que code source, documentation, graphique, artistique, littéraire, etc.
 +37c43
 +<                               {{svg "octicon-rocket"}} {{.i18n.Tr "startpage.lightweight"}}
 +---
 +>                               {{svg "octicon-rocket"}} Comment créer un compte ?
 +40c46
 +<                               {{.i18n.Tr "startpage.lightweight_desc" | Str2html}}
 +---
 +>                               La création de compte se fait par une procédure d'inscription classique.
 +45c51
 +<                               {{svg "octicon-code"}} {{.i18n.Tr "startpage.license"}}
 +---
 +>                               {{svg "octicon-code"}} Licences libres
 +48c54,55
 +<                               {{.i18n.Tr "startpage.license_desc" | Str2html}}
 +---
 +>                               Tous les dépôts présents sur cette forge sont sous <b>licences libres</b>, au sens de la Free Software Foundation à l'exception des licences Creative Commons en ND ou NC qui sont exclues.<br/>
 +>                               <a href="https://www.chapril.org/cgu.html#forgechaprilorg-cpu">Consulter les Conditions particulières d'utilisation</a>.
 +</code>
 +
 +Redémarrer Gitea :
 +<code bash>
 +systemctl restart gitea
 +</code>
 +
 +==== Barre de navigation ====
 +
 +Personnalisation aux couleurs de l'April de l'icône sur la barre de navigation :
 +{{:admin:services:logo-forgechaprilorg-mini2.png?50|Favicon du Chapril}}
 +
 +Récupérer l'image ci-dessus et la placer au bon endroit avec les bonnes permissions :
 +<code bash>
 +mkdir -p /srv/gitea/custom/public/img
 +cd /srv/gitea/custom/public/img/
 +wget https://admin.chapril.org/lib/exe/fetch.php?media=admin:services:logo-forgechaprilorg-mini2.png
 +mv /root/april-logo-bluegitea.png gitea-sm.png
 +chmod go+r *png
 +systemctl restart gitea
 +</code>
 +
 +Télécharger la page de code au bon endroit :
 +<code bash>
 +mkdir -p /srv/gitea/custom/templates/base
 +cd /srv/gitea/custom/templates/base/
 +wget https://raw.githubusercontent.com/go-gitea/gitea/release/v1.14/templates/base/head_navbar.tmpl
 +</code>
 +
 +La personnaliser :
 +<code bash>
 +cd /srv/gitea/custom/templates/base/
 +diff head_navbar.tmpl-1.14.0 head_navbar.tmpl
 +</code>
 +<code>
 +4c4
 +<                       <img class="ui mini image" with="30" height="30" src="{{StaticUrlPrefix}}/img/logo.svg">
 +---
 +>                       <img class="ui mini image" with="30" height="30" src="{{StaticUrlPrefix}}/img/gitea-sm.png">
 +</code>
 +
 +==== Favicon ====
 +
 +Personnalisation aux couleurs de l'April du //favicon// :
 +{{:admin:services:favicon-forgechaprilorg.png?50|Favicon de la forge Chapril en PNG}}
 +{{:admin:services:favicon-forgechaprilorg.svg?50|Favicon de la forge Chapril en SVG}}
 +
 +
 +Récupérer les deux images ci-dessus et les placer au bon endroit avec les bonnes permissions :
 +<code bash>
 +mkdir -p /srv/gitea/custom/public/img
 +cd /srv/gitea/custom/public/img/
 +wget https://admin.chapril.org/lib/exe/fetch.php?media=admin:services:favicon-forgechaprilorg.png
 +mv favicon-forgechaprilorg.png favicon.png
 +wget https://admin.chapril.org/lib/exe/fetch.php?media=admin:services:favicon-forgechaprilorg.svg
 +mv favicon-forgechaprilorg.svg logo.svg
 +wget https://admin.chapril.org/lib/exe/fetch.php?media=admin:services:logo-forgechaprilorg02.png
 +mv logo-forgechaprilorg02.png gitea-lg.png
 +chmod go+r *png *svg
 +ln -s logo.svg favicon.svg
 +systemctl restart gitea
 +</code>
 +
 +==== Pages « S'inscrire » ====
 +
 +À la création de compte, il faut rappeler les CGU et les CPU.
 +
 +Possible en personnalisant le fichier ''signup.tmpl'' :
 +<code bash>
 +cd /srv/gitea/custom/templates/user/auth/
 +cat signup.tmpl
 +</code>
 +<code>
 +{{template "base/head" .}}
 +<div style="background: #ffc; border-radius: 20px; min-height: 40px; margin: 2em auto; padding: 15px 20px 15px 80px; border-collapse: collapse; min-width: 400px; max-width: 40%; background-image: url(https://forge.chapril.org/img/important.png); background-position: 20px 50%; background-repeat: no-repeat; text-align: center;">
 +En créant un compte, vous acceptez les <a href="https://www.chapril.org/cgu.html">conditions générales d'utilisation</a> du <a href="https://www.chapril.org/">Chapril</a> et les <a href="https://www.chapril.org/cgu.html#forgechaprilorg-cpu">conditions particulières d'utilisation</a> du service <i>forge.chapril.org</i>.<br/>
 +Notamment, vous vous engagez à ce que tous les contenus de vos dépôts soient sous <a href="https://www.gnu.org/licenses/license-list.fr.html">licence libre</a>, au sens de la Free Software Foundation.
 +</div>
 +<div class="page-content user signin{{if .LinkAccountMode}} icon{{end}}">
 +        <div class="ui middle very relaxed page grid">
 +                {{template "user/auth/signup_inner" .}}
 +        </div>
 +</div>
 +{{template "base/footer" .}}
 +</code>
 +
 +==== Pages internes ====
 +
 +À faire.
 +
 +==== Courriel d'activation d'un compte ====
 +
 +Les courriels sont par défaut en Anglais : https://github.com/go-gitea/gitea/blob/master/templates/mail/auth/activate.tmpl.
 +
 +Mais est prévu un système de //template// personnalisé : https://docs.gitea.io/en-us/mail-templates/.
 +
 +Copier le fichier depuis le dépôt source dans la bonne étiquette (//tag//) puis le modifier :
 +<code html>
 +<!DOCTYPE html>
 +<html>
 + <head>
 +  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +  <title>{{.DisplayName}}, veuillez activer votre compte</title>
 + </head>
 +
 + <body>
 +   <p>Bonjour <b>{{.DisplayName}}</b>, merci pour votre inscription à {{AppName}} !</p>
 +  <p>Veuillez cliquer sur le lien suivant pour activer votre compte avant <b>{{.ActiveCodeLives}}</b> :</p>
 +  <p><a href="{{AppUrl}}user/activate?code={{.Code}}">{{AppUrl}}user/activate?code={{.Code}}</a></p>
 +  <p>Un problème ? Essayez en copiant/collant le lien dans votre navigateur web.</p>
 +  <p>© <a target="_blank" rel="noopener noreferrer" href="{{AppUrl}}">{{AppName}}</a></p>
 + </body>
 +</html>
 +</code>
 +
 +===== Première utilisation =====
 +
 +Actions :
 +  * Création du compte ''chapriladmin'' ;
 +  * Création d'un dépôt bac à sable.
 +
 +===== Procédure de mise à jour =====
 +
 +Constat :
 +  * Gitea consiste en un seul fichier binaire, une base de données, une arborescence ;
 +  * La documentation officielle de Gitea contient une page sur les sauvegardes (//backups//) : ''https://docs.gitea.io/en-us/backup-and-restore/''.
 +
 +Ajouter une mise à jour planifiée sur https://status.chapril.org/dashboard/schedule en utilisant le modèle prévu à cet effet.
 +
 +Avant mise à jour, il est nécessaire de vérifier l'espace disque du montage /srv/gitea.
 +<code bash>
 +df -h
 +</code>
 +
 +Donc la procédure de mise à jour peut consister, en utilisant un multiplexeur de terminal, à :
 +  - Définir dans une variable le numéro de la nouvelle version que l'on souhaite installer ([[https://github.com/go-gitea/gitea/|trouver la dernière version]]) :<code bash>
 +export VERSION=1.X.Y
 +</code>
 +  - Vérifier l'existance d'une nouvelle version :<code bash>
 +/srv/forge.chapril.org/tools/upgrade.sh verify</code>
 +  - Lancer [[https://forge.april.org/Chapril/forge.chapril.org-tools/src/branch/master/upgrade.sh|le script de mise à jour]], en suivant les étapes suivantes :<code bash>
 +/srv/forge.chapril.org/tools/upgrade.sh download
 +/srv/forge.chapril.org/tools/upgrade.sh stop backup
 +/srv/forge.chapril.org/tools/upgrade.sh upgrade
 +# être attentif aux éventuels problèmes
 +/srv/forge.chapril.org/tools/upgrade.sh check
 +su - gitea -c "/srv/gitea/bin/gitea-${VERSION}-linux-amd64 --config /etc/gitea/gitea.ini admin regenerate keys"
 +/srv/forge.chapril.org/tools/upgrade.sh check
 +# corriger les éventuels problèmes
 +/srv/forge.chapril.org/tools/upgrade.sh start
 +</code>
 +  - Surveiller les logs :<code bash>
 +tail -f /var/log/gitea/gitea.log
 +tail -f /var/log/apache2/forge.chapril.org/forge.chapril.org-error.log
 +</code>
 +  - Vérifier que les personnalisations du Chapril ne sont pas cassées :
 +    - Accéder à la page https://forge.chapril.org/ sans être authentifié :
 +      * Vérifier la présence de la bannière Chapril avec notamment les liens ''Accueil Chapril'', ''CGU'', ''Mentions légales'' et le logo de l'April,
 +      * Logo (bleu, un profil de chat dans la tasse),
 +      * Chercher le texte ''La forge Chapril'' dans la page,
 +      * //Favicon// identique au logo,
 +      * Vérifier qu'il y a un lien ''Help''/''Aide'' dans le pied de page à gauche de la version de Go%%*%%,
 +      * Vérifier la présence des liens ''Help''/''Aide'' et ''support'' dans la barre de navigation supérieure, à droite de ''explore'',
 +    - Accéder à la page https://forge.chapril.org/user/sign_up puis vérifier la présence du :
 +      * Petit encart jaune ''En créant un compte, vous acceptez ...'',
 +      * Logo a gauche de la barre de navigation,
 +    - Enregistrer un compte pour vérifier que le courriel d'activation d'un compte est en Français :
 +      * Tout en étant authentifié, vérifier la présence des liens ''Help''/''Aide'' et ''support'' dans la barre de navigation supérieure, à droite de ''explore'',
 +    - Vérifier l'état des [[https://icinga.chapril.org/icingaweb2/monitoring/host/show?host=grof.cluster.chapril.org | checks concernant la machine Grof]],
 +  - Supprimer manuellement l'ancien dump, dans :''/srv/gitea/backups'' ;
 +  - Supprimer, éventuellement, les fichiers de l'antépénultième version : <code bash>rm /srv/gitea/bin/gitea-$(awk -F. '{print $1"."$2"."($3-2)}' <<< "$VERSION")-linux-amd64{,.asc,.sha256}</code>
 +
 +<note warning>
 +Cette dernière commande ne fonctionne que pour les versions mineures (valeur ''Y'' dans le numéro de version ''1.X.Y'').
 +</note>
 +
 +===== Procédure de restauration =====
 +
 +Il n'existe pas de commande ''gitea'' pour restaurer une sauvegarde ([[https://docs.gitea.io/en-us/backup-and-restore/#restore-command-restore|mais la documentation mentionne un ensemble de commandes]]), il faut décompresser la sauvegarde et copier les différents éléments :
 +  * Le fichier de configuration ''app.ini'' ;
 +  * Les données, les logs, les dépôts ;
 +  * La base de données.
 +
 +===== Tâches récurrentes et modération =====
 +
 +En plus de la mise à jour du service décrite précédemment, l'administration de la forge nécessite de réaliser deux autres [[https://agir.april.org/projects/forge-chapril-org/issues?f[]=tracker_id&op[tracker_id]=%3D&v[tracker_id][]=3|tâches récurrentes]] qui sont des actions de modération.
 +Il s'agit de supprimer sans préavis ni avertissement des comptes créés par des robots.
 +
 +Pour connaître l'IP utilisée lors de la création d'un compte :
 +  * Via l'interface d'administration, notez la date et l'heure de la création du compte ;
 +  * Puis recherchez la date et l'heure dans les logs :<code bash>
 +journalctl -u gitea -S -1w -g 'POST[^/]+/user/sign_up'
 +</code>
 +Pour les actions suivantes, il est nécessaire de [[https://forge.chapril.org/user/settings/applications|créer un jeton]] (//token//) depuis son compte Gitea :
 +  * Pour //Accès aux Organisations et Dépôts// sélectionner //Tout (public, privé et limité)// ;
 +  * Choisir les autorisations suivantes, sélectionner //Lecture et écriture// :
 +      * ''admin'',
 +      * ''user''.
 +
 +==== Méthode 1 ====
 +
 +Trouver les comptes récemment créés et actifs (afin de supprimer les nouvelles issues crées par les spammeurs) (pour [[https://forge.chapril.org/user/settings/applications|créer un jeton]]) :
 +<code bash>
 +for x in $(curl  -H "Authorization: token $token" https://forge.chapril.org/api/v1/admin/users | jq -r '.[] | select(.id > 3100) | select(.id | IN(3394, 3288, 3271, 3132) | not) | .login')
 +  do test $(curl  -sH "Authorization: token $token" https://forge.chapril.org/api/v1/users/$x/activities/feeds | jq 'map(select(.op_type | IN("comment_issue", "create_issue")))| length') -ne 0 && echo https://forge.chapril.org/$x?tab=activity
 +done
 +</code>
 +
 +Supprimer un //range// :
 +<code bash>
 +for x in $(curl  -H "Authorization: token $token" https://forge.chapril.org/api/v1/admin/users | jq -r '(.[] | select(.id > 3330)) | select(.id < 3394)| .login')
 +  do curl  -H "Authorization: token $token" -X DELETE -H "Content-Type: application/json" https://forge.chapril.org/api/v1/admin/users/$x?delete=true
 +done
 +</code>
 +
 +Sélection des comptes récents contenant des liens en description :
 +<code bash>
 +datemod=$(date +"%Y-%m-%d")
 +for x in $(curl  -H "Authorization: token $token" https://forge.chapril.org/api/v1/admin/users | jq -r '.[] | select(.id > 10317) | .login')
 +  do curl -sH "Authorization: token $token" https://forge.chapril.org/api/v1/users/$x | jq -er "select(.website != \"\" or (.description | test(\"http\"))) | .login + \" repositories: $(curl -sH "Authorization: token $token" https://forge.chapril.org/api/v1/users/$x/repos | jq length)\\n\\n\" + .website + .description + \"\\n\"" && (read -e -p "Delete ? " delete
 +  [[ "$delete" == [Yy]* ]] && clear && curl  -H "Authorization: token $token" -X DELETE -H "Content-Type: application/json" https://forge.chapril.org/api/v1/admin/users/$x?purge=true && echo -e "deleted\n" && echo "${datemod}@${x}" >> deleted)
 +done
 +</code>
 +
 +Trouver les comptes ayant plusieurs fois un caractère donné dans le courriel :
 +<code>
 +giteadb=# select id, name, email, (CHAR_LENGTH(split_part(email, '@', 1)) - CHAR_LENGTH(REPLACE(split_part(email, '@', 1), '.', ''))) as c from "user" where (CHAR_LENGTH(split_part(email, '@', 1)) - CHAR_LENGTH(REPLACE(split_part(email, '@', 1), '.', ''))) > 3 order by c;
 +</code>
 +
 +Modération des dépôts : en cas d'absence de licence ou de licence non conforme aux CGU, envoi d'un courriel à l'utilisateur et suppression si au bout de 15 jours celui-ci ne s'est pas mis pas en conformité avec les CGU.
 +
 +Vérifier la présence de courriel dans la liste ''stopforumspam'' :
 +<code bash>
 +for yy in $(for id in $(for x in $(psql -d giteadb -t -A -q -c "select name, email from public.user where email != '' and id > 4000;"); do echo "$x" |  cut -d '|' -f 2 |grep -q @gmail.com && grep "$(echo "$x" | cut -d '|' -f 2 | cut -d '@' -f 1 | sed 's/\.//g')"@gmail.com listed_email_365_all &>/dev/null && echo $x | cut -d '|' -f 1; done); do echo $id; done); do echo $yy; done
 +</code>
 +
 +==== Méthode 2 ====
 +
 +=== Pré-requis ===
 +
 +Pour utiliser l'application, il est nécessaire d'installer Poetry.
 +
 +Sous Debian :
 +<code bash>
 +apt-get install python3-poetry
 +</code>
 +
 +=== Installation ===
 +
 +Se placer dans le dossier dans lequel on veut récupérer le dépôt.
 +
 +La première fois:
 +<code bash>
 +git clone ssh://gitea@forge.april.org:222/Chapril/forge.chapril.org-tools.git
 +</code>
 +
 +Pour les fois suivantes, afin de récupérer les éventuelles modifications :
 +<code bash>
 +git pull
 +</code>
 +
 +Installer l'environnement virtuel de Python puis les dépendances :
 +<code bash>
 +cd moderation/tui/
 +poetry install
 +</code>
 +
 +Pour les fois suivantes, mettre à jour poetry si nécessaire :
 +<code bash>
 +poetry update
 +</code>
 +
 +Lancer l'application :
 +<code bash>
 +poetry run ./moderation_tui.py
 +</code>
 +
 +=== Usage ===
 +
 +Au lancement, votre jeton (//token//) de gestion Gitea vous est demandé.
 +
 +Une fois définie, la liste des utilisateurs créés durant les derniers 30 jours est chargée.
 +Il vous est ensuite possible de parcourir cette liste, de supprimer un compte utilisateur, de sélectionner plusieurs utilisateurs et de les supprimer.