Ceci est une ancienne révision du document !
Table des matières
Service forge.chapril.org
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 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.
Déploiement du domaine sur la vm dns
Suivre la procédure d'ajout d'un domaine.
Déploiement du domaine sur la vm bastion
Sur la vm bastion, configurer un nouveau site :
=(^-^)=root@bastion:/etc/nginx/sites-enabled# cat forge.chapril.org 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; } }
Afin d'autoriser des téléversements de fichier de plus d'1Mo, s'assurer de la présence d'une ligne dédiée dans la configuration Nginx du site :
client_max_body_size 100M;
Installation d'un serveur HTTP sur la vm grof
Sur la vm grof, installer Apache2 :
apt-get install apache2
Configuration de la propagation proxy :
=(^-^)=root@grof:/etc/apache2# cat conf-available/reverse-proxy.conf <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> cd /etc/apache2/conf-enable/ ln -s ../conf-available/reverse-proxy.conf
Déploiement du domaine sur la vm grof
Sur la vm grof, activer les modules proxy et proxy_http :
a2enmod proxy a2enmod proxy_http systemctl restart apache2
La documentation officielle pour Apache : https://docs.gitea.io/en-us/reverse-proxies/
Application :
=(^-^)=root@grof:/etc/apache2/sites-enabled# cat forge.chapril.org.conf <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>
Configuration SMTP
Configuration de Postfix pour que les courriels de Gitea partent correctement :
=(^-^)=root@grof:~# grep smtpd_use_tls /etc/postfix/main.cf smtpd_use_tls=no
Installation de PostgreSQL
Installer le paquet serveur de la base de données:
apt install postgresql postgresql-contrib
D'après la documentation d'installation de Gitea :
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.
Le conseil semble judicieux donc éditer le fichier /etc/postgresql/11/main/postgresql.conf
:
#password_encryption = md5 # md5 or scram-sha-256 password_encryption = scram-sha-256
Et redémarrer le service :
systemctl restart postgresql.service
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) :
su -c "psql" - postgres CREATE ROLE giteadbadmin WITH LOGIN PASSWORD 'xxxxxxxxxxxxx';
Créer une base de données :
CREATE DATABASE giteadb WITH OWNER gitea-dbadmin TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'fr_FR.UTF-8' LC_CTYPE 'fr_FR.UTF-8';
Donner l'accès en éditant le ficher /etc/postgresql/11/main/pg_hba.conf
:
local giteadb gitea scram-sha-256
Redémarrer le service :
restart postgresql.service
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 vm grof.
Création de la partition de stockage :
fdisk /dev/vdb
Choisir n puis les choix par défaut. Écrire la table des partitions.
Création du Volume Group et Logic Volume :
pvcreate /dev/vdb1 vgcreate grof-data-vg /dev/vdb1 lvcreate -l 100%FREE -n gitea grof-data-vg
Création du FS et du dossier de montage :
mke2fs -L gitea -e remount-ro -m 0 /dev/mapper/grof--data--vg-gitea mkdir /srv/gitea
Définition dans /etc/fstab
:
/dev/mapper/grof--data--vg-gitea /srv/gitea ext4 defaults 0 2
Premier montage :
mkdir /srv/gitea mount chown gitea.gitea /srv/gitea
Création d'un utilisateur système dédié
Créer un utilisateur système dédié :
adduser \ --system \ --shell /bin/bash \ --gecos 'Git Version Control' \ --group \ --disabled-password \ --home /srv/gitea/ \ gitea
Préparation des fichiers
Création de l'arborescence dédiée :
export GITEA_WORK_DIR=/srv/gitea mkdir -p $GITEA_WORK_DIR/{custom,data} chown -R gitea:gitea $GITEA_WORK_DIR chmod -R ug+x $GITEA_WORK_DIR chmod -R o-rwx $GITEA_WORK_DIR mkdir /etc/gitea chown root:gitea /etc/gitea chmod ug+rwx /etc/gitea chmod o-rwx /etc/gitea mkdir /var/log/gitea chown gitea.gitea /var/log/gitea
Récupération du binaire
Gitea consiste en un seul fichier binaire :
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
Vérification signature :
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
Intégration du service dans Systemd
La documentation de Gitea contient une page dédiée :
Gitea propose un fichier prêt à l'emploi dont il faut modifier manuellement quelques paramètres :
Fichier personnalisé pour la forge April à mettre dans /etc/systemd/system/gitea.service
:
[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 web --config /etc/gitea/gitea.ini Restart=always Environment=USER=gitea HOME=/srv/gitea/ GITEA_WORK_DIR=/srv/gitea [Install] WantedBy=multi-user.target
Démarrage et activation du service :
systemctl start gitea.service
systemctl enable gitea.service
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 :
chown -R root:gitea /etc/gitea chmod g=rx /etc/gitea chmod g=r /etc/gitea/gitea.ini
Paramétrage complémentaire
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
.
Licences préférées
Extrait de la documentation :
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.
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
:
[repository] PREFERRED_LICENSES=AGPL-3.0-or-later,GPL-3.0-or-later,CC-BY-SA-4.0
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
:
[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
Pour les téléversements de version (release) :
[attachment] ; Max size of each file. Defaults to 4MB MAX_SIZE = 20
Personnalisation
Basée sur la page https://docs.gitea.io/en-us/customizing-gitea/
Page d'accueil
Personnalisation aux couleurs de l'April du logo d'accueil est des 4 textes.
Récupérer l'image ci-dessus et la placer au bon endroit avec les bonnes permissions :
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
Récupérer le fichier template :
mkdir -p /srv/gitea/custom/templates cd /srv/gitea/custom/templates wget https://raw.githubusercontent.com/go-gitea/gitea/v1.12.5/templates/home.tmpl
Appliquer les changements suivants :
=(^-^)=root@grof:/srv/gitea/custom/templates# diff home.tmpl home.tmpl.ori 2d1 < <style type="text/css">.home .hero .svg { color: #1c79c5 !important; }</style> 7c6 < <img class="logo" src="{{StaticUrlPrefix}}/logo-forgechaprilorg.png" /> --- > <img class="logo" src="{{StaticUrlPrefix}}/img/gitea-lg.png" /> 13,14c12 < <h2>Plateforme collaborative de dépôts de logiciels, ressources et contributions libres.</h2> < <!--p><a href="https://www.april.org/" style="color: #005174"><img src="april-logo-gitea.png" /></a>.</p--> --- > <h2>{{.i18n.Tr "startpage.app_desc"}}</h2> 21c19 < {{svg "octicon-flame" 16}} Qui peut avoir un compte ? --- > {{svg "octicon-flame" 16}} {{.i18n.Tr "startpage.install"}} 24c22 < Tout le monde, cette instance est ouverte au public. --- > {{.i18n.Tr "startpage.install_desc" | Str2html}} 29c27 < {{svg "octicon-device-desktop" 16}} Quels dépôts sont acceptés ? --- > {{svg "octicon-device-desktop" 16}} {{.i18n.Tr "startpage.platform"}} 32c30 < La forge Chapril accueille tout dépôt dont le contenu est sous licence libre. --- > {{.i18n.Tr "startpage.platform_desc" | Str2html}} 39c37 < {{svg "octicon-rocket" 16}} Comment créer un compte ? --- > {{svg "octicon-rocket" 16}} {{.i18n.Tr "startpage.lightweight"}} 42c40 < La création de compte se fait par une procédure d'inscription classique. --- > {{.i18n.Tr "startpage.lightweight_desc" | Str2html}} 47c45 < {{svg "octicon-code" 16}} Licences libres --- > {{svg "octicon-code" 16}} {{.i18n.Tr "startpage.license"}} 50c48 < Tous les dépôts présents sur cette forge sont sous licences libres. --- > {{.i18n.Tr "startpage.license_desc" | Str2html}}
Redémarrer Gitea :
systemctl restart gitea
Barre de navigation
Personnalisation aux couleurs de l'April de l'icône sur la barre de navigation :
Récupérer l'image ci-dessus et la placer au bon endroit avec les bonnes permissions :
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
Favicon
Personnalisation aux couleurs de l'April du favicon :
Récupérer les deux images ci-dessus et les placer au bon endroit avec les bonnes permissions :
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 favicon.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 systemctl restart gitea
Pages « S'inscrire »
À la création de compte, il faut rappeler les CGU et les CPU.
Possible en personnalisant le fichier signup.tmpl
:
=(^-^)=root@grof:/srv/gitea/custom/templates/user/auth# cat signup.tmpl {{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> {{template "user/auth/signup_inner" .}} {{template "base/footer" .}}
Pages internes
À faire.
Courriel d'activation d'un compte
Les courriels soient 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 custom : https://docs.gitea.io/en-us/mail-templates/
Copier le fichier depuis le dépôt source dans le bon tag puis le modifier :
<!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>
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 :
user ---> vip:222 --nat-ipv4-> grof:222
Configuration dans /etc/gitea/gitea.ini
:
SSH_PORT = 222
Configuration dédiée de firehol :
=(^-^)=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
Gestion du port 222 par ssh :
diff --git a/ssh/sshd_config b/ssh/sshd_config -#Port 22 +Port 22 +Port 222
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 :
ln -s /srv/gitea/.ssh/authorized_keys /etc/ssh/authorized_keys/gitea
Redirection du port 222 depuis vip vers le port 22 de la vm grof :
TODO
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 backups :
https://docs.gitea.io/en-us/backup-and-restore/
.
Donc la procédure de mise à jour peut consister à :
- définir dans une variable le numéro de la nouvelle version :
export VERSION=1.X.Y
- récupérer la dernière version sur
https://dl.gitea.io/gitea
et faire unsha256sum -c
:
cd /srv/gitea/bin wget https://dl.gitea.io/gitea/$VERSION/gitea-$VERSION-linux-amd64 wget https://dl.gitea.io/gitea/$VERSION/gitea-$VERSION-linux-amd64.asc wget 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
- stopper :
systemctl stop gitea
- dumper :
su - gitea -c "cd /srv/gitea/bin ; /srv/gitea/bin/gitea dump --tempdir /var/tmp/ -c /etc/gitea/gitea.ini"
- archiver le binaire courant
/srv/gitea/bin/gitea
:
mv gitea gitea.old
- remplacer le binaire
/srv/gitea/bin/gitea
:
mv gitea-$VERSION-linux-amd64 gitea
- mettre les bons droits :
cd /srv/gitea/bin/ chown gitea.gitea gitea chmod u+x gitea
- démarrer :
systemctl start gitea
- surveiller les logs :
tail -f /var/log/gitea/gitea.log
- supprimer manuellement l'ancien dump.