====== 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.