Outils pour utilisateurs

Outils du site


admin:services:forge.chapril.org

Différences

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

Lien vers cette vue comparative

Prochaine révision
Révision précédente
admin:services:forge.chapril.org [2021/07/29 09:50] – [Procédure de mise à jour] réordonnancement de l'ordre des fonctions au cas où elles seraient copiées/collées, étant donné que la doc mentionne "dans l'ordre" pilouadmin:services:forge.chapril.org [2025/11/08 23:30] (Version actuelle) jeff
Ligne 2: Ligne 2:
  
 <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> <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 forges sont publics ou privés au choix. 
  
 ===== Installation ===== ===== Installation =====
Ligne 231: Ligne 239:
 <code> <code>
 export GITEA_WORK_DIR=/srv/gitea export GITEA_WORK_DIR=/srv/gitea
-mkdir -p $GITEA_WORK_DIR/{custom,data} +mkdir -p $GITEA_WORK_DIR/{backups,bin,custom,data,repositories} 
-chown -R gitea:gitea $GITEA_WORK_DIR + 
-chmod -R ug+x $GITEA_WORK_DIR +chown root:gitea $GITEA_WORK_DIR 
-chmod -R o-rwx $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 mkdir /etc/gitea
 chown root:gitea /etc/gitea chown root:gitea /etc/gitea
-chmod ug+rwx /etc/gitea +chmod ug=rwx /etc/gitea 
-chmod o-rwx /etc/gitea+chmod o/etc/gitea
  
 mkdir /var/log/gitea mkdir /var/log/gitea
Ligne 292: Ligne 305:
 Group=gitea Group=gitea
 WorkingDirectory=/srv/gitea WorkingDirectory=/srv/gitea
-ExecStart=/srv/gitea/bin/gitea web --config /etc/gitea/gitea.ini+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 Restart=always
-Environment=USER=gitea HOME=/srv/gitea/ GITEA_WORK_DIR=/srv/gitea+Environment=USER=gitea HOME=/srv/gitea/
  
 [Install] [Install]
Ligne 353: Ligne 368:
 chmod g=r /etc/gitea/gitea.ini chmod g=r /etc/gitea/gitea.ini
 </code> </code>
-==== Paramétrage complémentaire ====+===== 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''. 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>
 +APP_NAME = La forge Chapril
 +RUN_USER = gitea
 +RUN_MODE = prod
 +WORK_PATH = /srv/gitea
 +</code>
 +==== base de données ====
 +
 +<code>
 +[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>
 +[picture]
 +DISABLE_GRAVATAR        = true
 +ENABLE_FEDERATED_AVATAR = false
 +
 +[openid]
 +ENABLE_OPENID_SIGNIN = false
 +ENABLE_OPENID_SIGNUP = false
 +</code>
 +
  
  
Ligne 372: Ligne 422:
 <code> <code>
 [repository] [repository]
 +ROOT = /srv/gitea/repositories
 PREFERRED_LICENSES=AGPL-3.0-or-later,GPL-3.0-or-later,CC-BY-SA-4.0 PREFERRED_LICENSES=AGPL-3.0-or-later,GPL-3.0-or-later,CC-BY-SA-4.0
 </code> </code>
  
 +==== lfs ====
 +
 +<code>
 +[lfs]
 +PATH = /srv/gitea/data/lfs
 +</code>
  
 ==== Taille maximale de téléversement ==== ==== Taille maximale de téléversement ====
Ligne 398: Ligne 455:
 [attachment] [attachment]
 ; Max size of each file. Defaults to 4MB ; Max size of each file. Defaults to 4MB
-MAX_SIZE = 20+MAX_SIZE = 50
 </code> </code>
 +
 +==== sections session et log ====
 +<code>
 +[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>
 +[packages]
 +; Enable/Disable package registry capabilities
 +ENABLED = false
 +</code>
 +
 +===== Activer le flux SSH =====
 +
 +Pour git clone/push/pull, 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>
 +SSH_PORT         = 222
 +</code>
 +
 +Configuration dédiée de firehol :
 +<code>
 +=(^-^)=root@grof:/etc/firehol# cat services/gitea.conf 
 +#FHVER: 1:213
 +# La premiere ligne ci dessus est nécessaire !!
 +server_gitea_ports="tcp/222"
 +client_gitea_ports="default"
 +
 +=(^-^)=root@grof:/etc/firehol# grep gitea firehol-ext2me.conf 
 +    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é ''AuthorizedKeysFile      /etc/ssh/authorized_keys/%u''. Afin que le fichier ''/srv/gitea/.ssh/authorized_keys'' soit pris en compte, il faut faire un lien :
 +<code>
 +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 ===== ===== Personnalisation =====
  
 Basée sur la page https://docs.gitea.io/en-us/customizing-gitea/ Basée sur la page https://docs.gitea.io/en-us/customizing-gitea/
  
-Le dossier root@grof:/srv/gitea/custom est un dépôt git local.+Le dossier ''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. Le but est d'avoir un suivi des modifications.
 ==== Page d'accueil ==== ==== Page d'accueil ====
Ligne 533: Ligne 656:
 mv logo-forgechaprilorg02.png gitea-lg.png mv logo-forgechaprilorg02.png gitea-lg.png
 chmod go+r *png *svg chmod go+r *png *svg
 +ln -s logo.svg favicon.svg
 systemctl restart gitea systemctl restart gitea
 </code> </code>
Ligne 585: Ligne 709:
 </html> </html>
 </code> </code>
-===== Activer le flux SSH ===== 
  
-Pour git clone/push/pull, 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> 
-SSH_PORT         = 222 
-</code> 
- 
-Configuration dédiée de firehol : 
-<code> 
-=(^-^)=root@grof:/etc/firehol# cat services/gitea.conf  
-#FHVER: 1:213 
-# La premiere ligne ci dessus est nécessaire !! 
-server_gitea_ports="tcp/222" 
-client_gitea_ports="default" 
- 
-=(^-^)=root@grof:/etc/firehol# grep gitea firehol-ext2me.conf  
-    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é ''AuthorizedKeysFile      /etc/ssh/authorized_keys/%u''. Afin que le fichier ''/srv/gitea/.ssh/authorized_keys'' soit pris en compte, il faut faire un lien : 
-<code> 
-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> 
 ===== Première utilisation ===== ===== Première utilisation =====
  
Ligne 645: Ligne 725:
   * la documentation officielle de Gitea contient une page sur les backups : ''https://docs.gitea.io/en-us/backup-and-restore/''.   * la documentation officielle de Gitea contient une page sur les backups : ''https://docs.gitea.io/en-us/backup-and-restore/''.
  
-48h avant, ajouter une mise à jour planifiée sur https://status.chapril.org/dashboard/schedule en utilisant le modèle prévu à cet effet.+Ajouter une mise à jour planifiée sur https://status.chapril.org/dashboard/schedule en utilisant le modèle prévu à cet effet.
  
-Donc la procédure de mise à jour peut consister à : +Avant mise à jour, il est nécessaire de vérifier l'espace disque de la machine. 
-  * définir dans une variable le numéro de la nouvelle version : + 
-<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 :<code bash>
 export VERSION=1.X.Y export VERSION=1.X.Y
 </code> </code>
-  * Lancer le script suivant ou bien copier/coller le contenu des fonctions, dans l'ordre. 
-<code> 
-#!/bin/bash 
  
-set -ex +  * verifier l'existance d'une nouvelle version :<code bash> 
- +/srv/forge.chapril.org/tools/upgrade.sh verify 
-BINDIR=/srv/gitea/bin +</code>
-#VERSION=x.x.x +
- +
-cd $BINDIR +
- +
-function verify() { +
-    if ./gitea --version | grep -q "version $VERSION " ; then +
- echo "Already at version $VERSION" +
-    fi +
-+
- +
-function download() { +
-    wget -c https://dl.gitea.io/gitea/$VERSION/gitea-$VERSION-linux-amd64 +
-    wget -c https://dl.gitea.io/gitea/$VERSION/gitea-$VERSION-linux-amd64.asc +
-    wget -c https://dl.gitea.io/gitea/$VERSION/gitea-$VERSION-linux-amd64.sha256 +
-    sha256sum -c gitea-$VERSION-linux-amd64.sha256 +
-    gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2 +
-    gpg --verify gitea-$VERSION-linux-amd64.asc gitea-$VERSION-linux-amd64 +
- +
-+
- +
-function stop() { +
-    systemctl stop gitea +
-+
- +
-function backup() { +
-    su - gitea -c "cd /srv/gitea/bin ; /srv/gitea/bin/gitea dump --tempdir /var/tmp/ -c /etc/gitea/gitea.ini" +
-+
- +
-function upgrade() { +
-    chmod u+x gitea-$VERSION-linux-amd64 +
-    chown gitea.gitea gitea-$VERSION-linux-amd64 +
-    ln --force gitea-$VERSION-linux-amd64 gitea +
-+
- +
-function start() { +
-    systemctl start gitea +
-+
- +
-for fun in "${@:-verify download stop backup upgrade start}" ; do +
-    $fun +
-done+
  
 +  * Lancer [[https://forge.april.org/Chapril/forge.chapril.org-tools/src/branch/master/upgrade.sh|le script de mise à jour]]:<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> </code>
-  * surveiller les logs : +  * surveiller les logs :<code bash>
-<code>+
 tail -f /var/log/gitea/gitea.log tail -f /var/log/gitea/gitea.log
 +tail -f /var/log/apache2/forge.chapril.org/forge.chapril.org-error.log
 </code> </code>
-  * supprimer manuellement l'ancien dump ; 
   * vérifier que les personnalisations ne sont pas cassées :    * vérifier que les personnalisations ne sont pas cassées : 
-    * https://forge.chapril.org/ sans être loggé +    * https://forge.chapril.org/ sans être authentifié 
-      * logo +      * 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 
-      * Chercher le texte "La forge Chaprildans la page +      * logo (bleu, un profil de chat dans la tasse) 
-      * favicon+      * 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''
     * https://forge.chapril.org/user/sign_up     * https://forge.chapril.org/user/sign_up
-      * petit encart jaune "En créant un compte, vous acceptez ..."+      * petit encart jaune ''En créant un compte, vous acceptez ...''
       * logo a gauche de la barre de navigation       * 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     * Enregistrer un compte pour vérifier que le courriel d'activation d'un compte est en français
 +    * 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 :<code>/srv/gitea/backups</code>
 +   * supprimer, éventuellement, les fichiers de l'antépénultième version : <code>rm /srv/gitea/bin/gitea-1.23.[X-2]-linux-amd64{,.asc,.sha256}</code>
 +===== 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: ''journalctl -u gitea -S -1w -g 'POST[^/]+/user/sign_up'''
 +  - Pour les actions suivantes, il est nécessaire de [[https://forge.chapril.org/user/settings/applications|créer un 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''
 +
 +  * 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 token]]): <code>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>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>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 l'email <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 mail à 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 d'email dans la liste stopforumspam: <code>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>
admin/services/forge.chapril.org.1627552226.txt.gz · Dernière modification : 2021/07/29 09:50 de pilou