====== Gitea ======
[[https://docs.gitea.io/en-us/install-from-binary/|Installation (documentation officielle)]]
===== Préliminaire =====
Pour pouvoir utiliser //Gitea//, il faut d'abord installé //Git// sinon il n'y a aucun espoir d'aller jusqu'au bout.
apt-get install git
===== Installation =====
Pour d'abord, télécharge //Gitea// (va sur [[https://dl.gitea.io/gitea/|ce site]] pour trouver la dernière version) et rend le fichier exécutable.
wget -O gitea https://dl.gitea.io/gitea/1.9.3/gitea-1.9.3-linux-amd64
chmod +x gitea
Il faut vérifier la signature GPG pour éviter toutes modifications non souhaitées sur le fichier téléchargé. Télécharge la signature
wget -O gitea https://dl.gitea.io/gitea/1.9.3/gitea-1.9.3-linux-amd64.asc
et teste le fichier
gpg --keyserver pgp.mit.edu --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
gpg --verify gitea-1.9.3-linux-amd64.asc gitea-1.9.3-linux-amd64
==== Test ====
Et présent, il est préférable de faire un test. Lance la commande suivante (pour l'arrêter, utilise Ctrl+C).
./gitea web
===== Préparation de Apache2 =====
[[http://www.jouvinio.net/wiki/index.php/Gitea_sous_Apache|Gitea sous Apache]]
Commence par créer le certificat SSL pour [[https://git.aprilas.fr]].
sudo /etc/init.d/apache2 stop
/opt/letsencrypt/letsencrypt-auto --rsa-key-size 4096 certonly --standalone -d git.aprilas.fr
sudo /etc/init.d/apache2 start
Crée le fichier ''%%/etc/apache2/sites-available/gitea.conf%%'' avec le contenu suivant :
ServerAdmin admin@aprilas.fr
ServerName git.aprilas.fr
RewriteEngine on
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [R,L]
ServerAdmin admin@aprilas.fr
ServerName git.aprilas.fr
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/git.aprilas.fr/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/git.aprilas.fr/privkey.pem
ErrorLog /var/log/apache2/gitea.log
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
ProxyPass "http://localhost:3000/"
Require all granted
ProxyPassReverse "http://localhost:3000/"
ProxyPassReverse "http://git.aprilas.fr/"
Et maintenant,
a2ensite gitea
a2enmod rewrite ssl proxy proxy_http
/etc/init.d/apache2 reload
===== Configuration =====
==== Préparation de l'environnement ====
Crée un utilisateur pour //Gitea// (ex. //git//)
adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git \
git
==== Création de l'arborescence des fichiers ====
mkdir -p /var/lib/gitea/{custom,data,log}
mv ~/gitea /var/lib/gitea/
chown -R git:git /var/lib/gitea/
chmod -R 750 /var/lib/gitea/
ln -s /var/lib/gitea/gitea /usr/local/bin/
==== Préparation de la base de données MySQL ====
Crée la base de données de Gitea sur le serveur MySQL.
En supposant que tu en dispose, connecte-toi à PHPmyAdmin en tant qu'administrateur. Crée une base de donnée avec
* ''%%gitea%%'' comme nom
* ''%%uft8_general_ci%%'' comme encodage
Puis, crée un utilisateur ''%%gitea%%'' et donne lui tous les droits sur la base "gitea".
==== Configuration initiale ====
Lance //Gitea// manuellement
sudo -u git /var/lib/gitea/gitea web
puis, va sur le site [[https://git.aprilas.fr/install|https://git.aprilas.fr/install]] et renseigne les paramètres suivants :
**Paramètres de la base de données**
* Type de base de données : MySQL
* Hôte : localhost
* Nom d'utilisateur : gitea
* Mot de passe : ''%%******%%''
* Nom de base de données : gitea
* Jeu de caractères : utf8
**Configuration générale**
* Titre du site : Gitea : Git with a cup of tea
* Emplacement racine des dépôts : /home/git/gitea-repositories
* Répertoire racine Git LFS : /var/lib/gitea/data/lfs
* Exécuter avec le compte d'un autre utilisateur : git
* Domaine du serveur SSH : git.aprilas.fr
* Port du serveur SSH : 22
* Port d'écoute HTTP de Gitea : 3000
* URL de base de Gitea : https://git.aprilas.fr/
* Chemin des fichiers log : /var/lib/gitea/log
**Paramètres facultatifs**
* Hôte SMTP : aprilas.fr
* Envoyer les e-mails en tant que : gitea@aprilas.fr
* Utilisateur SMTP : aprilas
* Mot de passe SMTP : ''%%******%%''
* Exiger la confirmation de l'email lors de l'inscription : //OUI//
* Activer les notifications par e-mail : //OUI//
* Désactiver le formulaire d'inscription : //OUI//
* Activer la connexion avec OpenID: //NON//
* Domaine pour les e-mails cachés : aprilas.fr
* Nom d’utilisateur administrateur : admin
* Mot de passe : ''%%******%%''
* Confirmer le mot de passe : ''%%******%%''
* Adresse e-mail : admin@aprilas.fr
Et à présent, tu peux arrêter //Gitea// et mettre le fichier de configuration généré à sa place définitive :
mkdir /etc/gitea
cp /var/lib/gitea/custom/conf/app.ini /etc/gitea
chown -R root:git /etc/gitea
chmod 750 /etc/gitea
chmod 640 /etc/gitea/app.ini
===== Exécuter Gitea =====
==== Création d'un fichier de service pour démarrer automatiquement ====
Crée le fichier ''%%/etc/systemd/system/gitea.service%%''.
sudo vim /etc/systemd/system/gitea.service
Et rentre les données suivantes :
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
###
# Don't forget to add the database service requirements
###
#
Requires=mysql.service
#Requires=mariadb.service
#Requires=postgresql.service
#Requires=memcached.service
#Requires=redis.service
#
###
# If using socket activation for main http/s
###
#
#After=gitea.main.socket
#Requires=gitea.main.socket
#
###
# (You can also provide gitea an http fallback and/or ssh socket too)
#
# An example of /etc/systemd/system/gitea.main.socket
###
##
## [Unit]
## Description=Gitea Web Socket
## PartOf=gitea.service
##
## [Socket]
## ListenStream=
## NoDelay=true
##
## [Install]
## WantedBy=sockets.target
##
###
[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=git
Group=git
WorkingDirectory=/var/lib/gitea/
# If using unix socket: Tells Systemd to create /run/gitea folder to home gitea.sock
# Manual cration would vanish after reboot.
#RuntimeDirectory=gitea
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
# If you want to bind Gitea to a port below 1024, uncomment
# the two values below, or use socket activation to pass Gitea its ports as above
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE
###
[Install]
WantedBy=multi-user.target
Activer et démarrer //Gitea// en //boot//.
sudo systemctl enable gitea
sudo systemctl start gitea
//Gitea// devrait être disponible à [[https://git.aprilas.fr]], et devrait le rester, même après le redémarrage du serveur.
===== Configuration de LDAP =====
[[http://www.jouvinio.net/wiki/index.php/Gitea_Configuration_LDAP|Gitea Configuration LDAP]]
==== Créer un nouvel utilisateur en lecture seule ====
Pour accéder à l'annuaire LDAP avec //Gitea//, on pourrait utiliser le compte ''%%cn=admin,dc=telecom-etude,dc=com%%'', mais c'est dangereux ! Pourquoi utiliser un compte qui peut modifier les données de l'annuaire, alors que nous avons besoin uniquement d'un compte qui puisse lire les mots de passe des différents utilisateurs de l'annuaire ? Et bien, nous allons créer ce compte !
Tu peux commencer par regarder l'ACL actuelle avec la commande suivante :
ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=config" "olcDatabase={1}mdb" olcAccess
Crée l'utilisateur suivant ''%%reader%%'' (avec ''%%ldapadd%%'' ou via //LAM//).
dn: cn=reader,dc=aprilas,dc=fr
cn: reader
description: LDAP complete reader
objectclass: simpleSecurityObject
objectclass: organizationalRole
objectclass: top
userpassword: {SSHA}R0UUkt4JDsvpkVgEDk8+8pmHwzUOp79g
Puis, modifie l'ACL du serveur LDAP. Pour cela, crée un fichier ''%%add-reader.ldif%%''.
dn: olcDatabase={1}mdb,cn=config
changetype: modify
delete: olcAccess
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
-
add: olcAccess
olcAccess: {0}to attrs=userPassword by self write by dn="cn=reader,dc=aprilas,dc=fr" read by anonymous auth by * none
et applique les modifications :
ldapmodify -Y EXTERNAL -H ldapi:/// -f add-reader.ldif
Regarde si cela a bien été pris en compte en affichant, à nouveau, l'ACL.
ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=config" "olcDatabase={1}mdb" olcAccess
==== Créer les groupes spécifiques à Gitea ====
Crée les groupes //git-users// et //git-admins// sur ''%%ou=Groups,dc=aprilas,dc=fr%%'' :
cn: git-users
member: uid=tfeneuil,ou=People,dc=aprilas,dc=fr
objectclass: groupOfNames
objectclass: top
cn: git-admins
member: uid=tfeneuil,ou=People,dc=aprilas,dc=fr
objectclass: groupOfNames
objectclass: top
==== Activer le module memberOf ====
Pour faire fonctionner correctement LDAP avec //Gitea//, il faut que le module memberOf soit activé.
Si ce n'est pas déjà fait, va voir [[server:free:nextcloud#preparation_de_l_annuaire_ldap|ici]] pour savoir comment l'activer.
==== Configuration de Gitea pour utiliser LDAP ====
Connecte toi sur //Gitea// avec un compte administrateur. Va dans "Administration du site", puis dans l'onglet "Sources d'authentification".
Ajoute une source d'authentification.
* Type d'authentification : LDAP (via BindDN)
* Nom de l'authentification : Aprilas LDAP
* Protocole de sécurité : LDAPS
* Hôte : ldap.aprilas.fr
* Port : 636
* Bind DN : cn=reader,dc=aprilas,dc=fr
* Bind mot de passe : ****
* Base de recherche des utilisateurs : ou=People,dc=aprilas,dc=fr
* Filtre utilisateur : (&(memberOf=cn=git-users,ou=Groups,dc=aprilas,dc=fr)(uid=%s))
* Filtre administrateur : (memberOf=cn=git-admins,ou=Groups,dc=aprilas,dc=fr)
* Attribut nom d'utilisateur : uid
* Attribut prénom : givenName
* Attribut nom de famille : sn
* Attribut e-mail : mail
* Utiliser la recherche paginée : //NON//
* Aller chercher les attributs dans le contexte de liaison DN : //NON// ?
* Ne pas vérifier TLS : //NON//
* Activer la synchronisation des utilisateurs : //OUI//
* Cette source d'authentification : //OUI//
Et valide le formulaire.
Puisqu'on a choisi d'activer la synchronisation, //Gitea// va régulièrement mettre à jour la liste des utilisateurs de LDAP. Par défaut, cela se fait toutes les 24 heures. Pour faire une synchronisation manuelle, il suffit d'appuyer sur le bouton "Synchroniser les données de l'utilisateur externe" dans le tableau de bord. Après l'ajout de la nouvelle source d'authentification, il semblerait que //Gitea// ne fasse pas directement une synchronisation, donc si tu veux voir directement les utilisateurs dans l'onglet correspond, il faut que tu appuies sur le bouton.