documentation_technique:gitea

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édentes Révision précédente
Prochaine révision
Révision précédente
documentation_technique:gitea [01/20/2019 15:43:48] – ↷ Nom de la page changé de documentation_technique:gogs à documentation_technique:gitea bfaverdindocumentation_technique:gitea [10/23/2026 10:08:42] (Version actuelle) – typo thomas
Ligne 1: Ligne 1:
-====== Contexte ======+====== Installation du serveur git Gitea  ======
  
-Installation de Gogs sur [[documentation_technique:machines:juris]].+Le serveur [[https://git.hadoly.fr|git]] est hébergé sur [[documentation_technique:machines:juris]]. Le serveur git, utilisant initialement Gogs, a été migré le 20/01/2019 sur [[https://gitea.io/en-us/|Gitea]], qui est un fork de Gogs.
  
-====== Installation ======+La migration s'est faite en suivant la [[https://docs.gitea.io/en-us/upgrade-from-gogs/|documentation officielle]], dans une VM de test.
  
-===== Mise à niveau du serveur avant de commencer =====+Les principales étapes sont les suivantes :
  
-<code> +  * installation de gitea 1.0.3 en utilisant les binaires disponibles sur le site officiel ; 
-sudo apt update; sudo apt upgrade +  * import de la base de données et des fichiers, renommage de l'arborescence ; 
-</code> +  * lancement de gitea et vérification du fonctionnement ; 
-===== Installation de git et mercurial =====+  * migration de la base de données par lancement successif des binaires des versions majeures, de la 1.0.3 à la 1.6.4 ; 
 +  * correction de la configuration et de quelques bugs mineurs (page d'accueil, ticket créé par un utilisateur qui n'existe plus et qui "plante" l'affichage de la liste des tickets).
  
-<code> +====== Installation ====== 
-sudo apt install -y git mercurial + 
-</code> +L'installation de Gitea suit la procédure officielle d'[[https://docs.gitea.io/en-us/install-from-binary/|installation]]. En complément MariaDB a été installé et la base de données créée manuellement afin de permettre l'import de la base existante.
-===== Installation de la base de données =====+
  
 ==== Installation de MariaDB ==== ==== Installation de MariaDB ====
  
 <code> <code>
-sudo apt install -y mariadb-server+# apt install -y mariadb-server
 </code> </code>
 +
 ==== Sécurisation de MariaDB ==== ==== Sécurisation de MariaDB ====
  
 <code> <code>
-$ sudo mysql_secure_installation+# mysql_secure_installation
  
 NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
Ligne 87: Ligne 88:
 Thanks for using MariaDB! Thanks for using MariaDB!
 </code> </code>
-Le mot de passe root pour la connexion à MariaDB ce trouve dans notre utilitaire de mot de passe. 
  
-===== Création de la BDD qui accueillera Gogs =====+===== Création de la BDD =====
  
 <code> <code>
-sudo mysql -u"root" -p+# mysql -u"root" -p
  
-CREATE DATABASE IF NOT EXISTS gogs_RAND CHARACTER SET utf8 COLLATE utf8_general_ci;+CREATE DATABASE IF NOT EXISTS gitea CHARACTER SET utf8 COLLATE utf8_general_ci;
 </code> </code>
-Note : **RAND** est à remplacer par une chaîne de caractère aléatoire de votre choix. 
  
-===== Création de l'utilisateur lié à la BDD Gogs =====+===== Création de l'utilisateur =====
  
 <code> <code>
-CREATE USER 'gogs_RAND'@'localhost' IDENTIFIED BY 'gogs_RAND_PASSWORD_HERE';+CREATE USER 'gitea'@'%' IDENTIFIED BY 'gitea_PASSWORD_HERE';
  
-GRANT ALL PRIVILEGES ON gogs_RAND.* TO 'gogs_RAND'@'localhost';+GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'%'; 
 + 
 +FLUSH PRIVILEGES;
 </code> </code>
-Le mot de passe **gogs_RAND_PASSWORD_HERE** de l'utilisateur **gogs_RAND** de la BDD **gogs_RAND** est disponible dans notre utilitaire de mot de passe. 
- 
-Note : **RAND** est à remplacer par une chaîne de caractère aléatoire de votre choix. 
- 
-===== Ajout d'un utilisateur système 'git' ===== 
  
-Cet utilisateur servira à contenir le service et les fichiers Gogs.+===== Export/import de la base de données de gogs =====
  
 <code> <code>
-sudo adduser --disabled-login --gecos 'Gogs' git+# mysqldump gogs_EpaiPhe7 > gogs_EpaiPhe7.sql 
 +# mysql gitea < gogs_EpaiPhe7.sql
 </code> </code>
-===== Installation du langage Go dans sa dernière version ===== 
  
-<code> +Le reste de l'installation suit la procédure officielle (utilisateur git, droits, etc.). La configuration au niveau de merlin (nginx) reste inchangée (au port près).
-Le langage Go ne nécessite que des binaires statiques pour fonctionner. +
-</code> +
-//(PS : Les dépôts d'Ubuntu 16.04 ne disposent que de la version 1.6 de golang, la dernière en date est la 1.8rc2 avec comme bonne nouvelles un gain de performance non négligeable de plus de 20%)//+
  
-<code> +===== Intégration de Gitea à LDAP =====
-sudo su - git +
-cd ~ +
-mkdir local +
-wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz +
-sha256sum go1.8.linux-amd64.tar.gz +
-</code> +
-Sortie du hash sha256sum nécessaire :+
  
 <code> <code>
-53ab94104ee3923e228a2cb2116e5e462ad3ebaeea06ff04463479d7f12d27ca+Type d'authentification : LDAP (via BindDN) 
 +Protocole de sécurité : LDAPS 
 +Hôte : leodagan.hadoly.fr 
 +Port : 636 
 +Bind DN : uid=gogs-account,ou=people,ou=service,dc=hadoly,dc=fr 
 +Bind mot de passe : xxxxxxxxxxxxxxxxxxxxx 
 +Utilisateur Search Base : dc=hadoly,dc=fr 
 +Filtre utilisateur : (&(objectclass=person)(uid=%s)(memberof=cn=gogs_group,ou=groups,dc=hadoly,dc=fr)) 
 +Filtre administrateur : Vide 
 +Attribut nom d'utilisateur : uid 
 +Attribut du prénom : givenName 
 +Attribut du nom de famille : sn 
 +Attribut de l'e-mail : mail 
 +[ ] Alllez chercher les attributs dans le contexte de liaison DN 
 +[x] Ne pas vérifier TLS 
 +[x] Authentification activée
 </code> </code>
-Sortie du hash sha256sum lors de l'installation (correcte) :+ 
 +====== Administration  ====== 
 + 
 +===== Arborescence ===== 
 +  * le fichier de configuration app.ini est placé dans le dossier /etc/gitea ; 
 +  * les fichiers (applicatif et dépôts) sont placé dans /var/lib/gitea :
  
 <code> <code>
-git@juris:~$ sha256sum go1.8.linux-amd64.tar.gz +root@juris:/var/lib/gitea# tree -L 2 
-53ab94104ee3923e228a2cb2116e5e462ad3ebaeea06ff04463479d7f12d27ca  go1.8.linux-amd64.tar.gz+. 
 +├── custom 
 +│   ├── conf 
 +│   ├── public 
 +│   └── templates 
 +├── data 
 +│   ├── attachments 
 +│   ├── avatars 
 +│   ├── indexers 
 +│   └── sessions 
 +├── gitea-1.6.4-linux-amd64 
 +├── gitea-repositories 
 +├── └── Dossiers des dépôts des utilisateurs  
 +├── indexers 
 +│   └── issues.bleve 
 +├── log 
 +│   ├── gitea.log 
 +│   ├── gitea.log.2019-01-21.001 
 +│   ├── hooks 
 +│   ├── http.log 
 +│   ├── serv.log 
 +│   ├── xorm.log 
 +│   ├── xorm.log.2019-01-20.001 
 +│   └── xorm.log.2019-01-21.001 
 +└── public
 </code> </code>
-Si tout est bon, on décompresse dans le dossier local golang 1.8 :+ 
 +  * le dossier "custom" contient les éléments de configuration "custom" (template de la page d'accueil notamment) ; 
 +  * le dossier "data" contient les pièces jointes des tickets (stockés en base de données) ainsi que les avatars des utilisateurs ; 
 +  * le dossier "gitea-repositories" contient l'ensemble des dépôts des utilisateurs (un dossier par utilisateur) ; 
 +  * le dossier "log" contient... les logs ! 
 +  * un lien symbolique (/usr/loca/bin/gitea) pointe vers le fichier binaire "gitea-1.6.4-linux-amd64" 
 + 
 +===== Gestion du service ===== 
 + 
 +Un service systemd gitea est disponible pour démarrer/arrêter/redémarrer le service.
  
 <code> <code>
-tar -C /home/git/local -xzf go1.8.linux-amd64.tar.gz+# systemctl start/stop/restart gitea
 </code> </code>
-==== Mise en place des variables d'environnement nécessaire au langage Go ====+ 
 +===== Fichier de configuration app.ini =====
  
 <code> <code>
-cd ~+APP_NAME = Gitea 
 +RUN_USER = git 
 +RUN_MODE = prod
  
-echo 'export GOROOT=$HOME/local/go' >> $HOME/.bashrc+[database] 
 +DB_TYPE  = mysql 
 +HOST     = 127.0.0.1:3306 
 +NAME     = gitea 
 +USER     = gitea 
 +PASSWD   = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
 +SSL_MODE = disable 
 +#PATH     = data/gitea.db
  
-echo 'export GOPATH=$HOME/go' >> $HOME/.bashrc+[repository] 
 +ROOT          = /var/lib/gitea/gitea-repositories 
 +; Force every new repository to be private 
 +FORCE_PRIVATE = true
  
-echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> $HOME/.bashrc+[repository.upload] 
 +; Maximum size of each file in MB 
 +FILE_MAX_SIZE = 100
  
-source $HOME/.bashrc +[release.attachment] 
-</code> +; Max size of each file. Defaults to 32MB 
-===== Installation de Gogs =====+MAX_SIZE = 100
  
-==== Téléchargement et installation des dépendances ====+[attachment] 
 +; Max size of each file. Defaults to 4MB 
 +MAX_SIZE = 100
  
-<code> +[server] 
-go get -u github.com/gogits/gogs +DOMAIN           = git.hadoly.fr 
-</code> +HTTP_PORT        = 3000 
-==== Compilation du programme principal ====+ROOT_URL         = https://git.hadoly.fr/ 
 +DISABLE_SSH      = false 
 +SSH_PORT         = 6900 
 +SSH_DOMAIN       = git-ssh.hadoly.fr 
 +START_SSH_SERVER = false 
 +OFFLINE_MODE     = true
  
-<code> +[mailer] 
-cd $GOPATH/src/github.com/gogits/gogs+ENABLED = true 
 +SUBJECT = Notification git.hadoly.fr 
 +HOST    = yvain.hadoly.fr:465 
 +FROM    = "Hadoly" <noreply@hadoly.fr> 
 +# ; Mailer user name and password 
 +USER    = noreply 
 +PASSWD  = xxxxxxxxxxxxxxxxxxxxxxxxx
  
-go build +[service] 
-</code> +REGISTER_EMAIL_CONFIRM = false 
-==== 'Custom' configuration ====+ENABLE_NOTIFY_MAIL     = true 
 +DISABLE_REGISTRATION   = true 
 +ENABLE_CAPTCHA         = true 
 +REQUIRE_SIGNIN_VIEW    = false
  
-<code> +[picture] 
-cd $GOPATH/src/github.com/gogits/gogs+DISABLE_GRAVATAR        = true 
 +ENABLE_FEDERATED_AVATAR = false
  
-mkdir -p custom/conf/+[session] 
 +PROVIDER = file
  
-vi app.ini+[log] 
 +MODE      = file 
 +LEVEL     = Info 
 +ROOT_PATH = /var/lib/gitea/log 
 + 
 +[security] 
 +INSTALL_LOCK   = true 
 +SECRET_KEY     = xxxxxxxxxxxxxxxxx 
 +INTERNAL_TOKEN = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 </code> </code>
-==== Lancement 'test' de Gogs ==== 
  
-//(PS : Cette étape permet d'avoir un accès web à Gogs et de remplir depuis la page d'installation de gogs http://git.hadoly.fr:3000/ le fichier de configuration 'custom')//+====== Procédure de mise à jour ======
  
 +  * Set target version number (latest release on github
 <code> <code>
-cd $GOPATH/src/github.com/gogits/gogs +export VERSION=X.X.X
-./gogs web+
 </code> </code>
-Voici les informations entrées :+ 
 +  * Arrêter le service :
  
 <code> <code>
---- Connexion BDD +# systemctl stop gitea
-Type : MySQL +
-Utilisateur : gogs_RAND +
-Nom de la BDD : gogs_RAND +
-Mot de passe de l'utilisateur : BDD_PASSWORD_gogs_RAND_HERE +
- +
---- Configuration Gogs +
-Domaine (avec port) : [http://git.hadoly.fr:7574/](http://git.hadoly.fr:7574/) +
- +
---- Options avancés +
-[x] Enable Offline Mode +
-[x] Disable Gravatar Service +
-[x] Enable Captcha +
- +
---- Admin account Settings +
-Username : admin_or_anything +
-Password : YOUR_ADMIN_PASSWORD_HERE +
-Admin Email : your_m@il.here+
 </code> </code>
-Pour modifier ces paramètres manuellement, ça ce passe dans ce fichier de configuration : 
  
 +  * Faire un backup de la base de données par sécurité :
 <code> <code>
-sudo vi /home/git/go/src/github.com/gogits/gogs/custom/conf/app.ini+# mysqldump gitea > gitea.sql
 </code> </code>
-Ce fichier surcharge la configuration par défaut de gogs fournie dans le fichier : 
  
 +  * Télécharger le dernier binaire en date depuis le site de gitea :
 <code> <code>
-/home/git/go/src/github.com/gogits/gogs/conf/app.ini+# cd /var/lib/gitea && wget https://github.com/go-gitea/gitea/releases/download/v${VERSION}/gitea-${VERSION}-linux-amd64
 </code> </code>
-//Astuce : Utiliser la génération automatique de ce fichier via le configurateur web est une bonne manière de ne pas faire de faute de typo.// 
- 
-===== Mise en place du démon (service) Gogs ===== 
- 
-Nous allons maintenant faire en sorte que Gogs s'exécute de la même façon qu'un service, pour cela nous utiliserons l'utilitaire supervisord. 
- 
-==== Installation de 'supervisord' ==== 
  
 +  * Changer les droits :
 <code> <code>
-sudo apt install -y supervisor+# chown git: gitea-${VERSION}-linux-amd64 && chmod u+x gitea-${VERSION}-linux-amd64
 </code> </code>
-==== Ajout d'un programme Gogs dans supervisord ==== 
  
-sudo vim /etc/supervisor/supervisord.conf+  * Modifier le lien symbolique :
  
 <code> <code>
-[program:gogs] +# cd /usr/local/bin && unlink gitea && ln -s /var/lib/gitea/gitea-${VERSION}-linux-amd64 gitea
-directory=/home/git/go/src/github.com/gogits/gogs/ +
-command=/home/git/go/src/github.com/gogits/gogs/gogs web +
-autostart=true +
-autorestart=true +
-startsecs=10 +
-stdout_logfile=/var/log/gogs/stdout.log +
-stdout_logfile_maxbytes=1MB +
-stdout_logfile_backups=10 +
-stdout_capture_maxbytes=1MB +
-stderr_logfile=/var/log/gogs/stderr.log +
-stderr_logfile_maxbytes=1MB +
-stderr_logfile_backups=10 +
-stderr_capture_maxbytes=1MB +
-environment = HOME="/home/git", USER="git" +
-user = git+
 </code> </code>
-Création de l'arborescence pour les journaux Gogs :+ 
 +  * vérifier et mettre à jour la base de donnée:
  
 <code> <code>
-sudo mkdir -p /var/log/gogs+sudo -u git gitea doctor check --config /etc/gitea/app.ini 
 +sudo -u git gitea migrate --config /etc/gitea/app.ini
 </code> </code>
-De ce fait, si vous souhaiter voir les logs de Gogs : 
  
-<code> +  * Démarrer le service :
-sudo tail -f /var/log/gogs/stdout.log +
-</code> +
-Arrêt/Relance de supervisord pour valider la configuration :+
  
 <code> <code>
-sudo service supervisor restart+# systemctl start gitea
 </code> </code>
  
-----+En cas de problème lors de la mise à jour, arrêter le service, restaurer la base de données et faire pointer le lien symbolique sur la version précédente du binaire.
  
-Aide diverses et sources (utilisée et/ou lues) : - http://doc.hadoly.fr/Documentation_technique/Vhost/ - [[http://doc.hadoly.fr/Documentation_technique/Vhost/|https:%%//%%gogs.io/docs/installation/install_from_source]] - [[http://doc.hadoly.fr/Documentation_technique/Vhost/|https:%%//%%gogs.io/docs/installation/configuration_and_run]] - [[http://doc.hadoly.fr/Documentation_technique/Vhost/|https:%%//%%www.digitalocean.com/community/tutorials/how-to-set-up-gogs-on-ubuntu-14-04]]+Ça peut aider de jeter un oeil dans les logs aussi (/var/lib/gitea/log/gitea.log) et d'utiliser la commande gitea doctor
  
-===== Intégration de Gogs au LDAP =====+**Penser à supprimer les version n-2** 
 + 
 +====== Personnalisation ====== 
 + 
 +Le dossier d'installation de //Gitea// est ''%%/var/lib/gitea%%''. 
 + 
 +C'est à partir de cet emplacement que le site peut être personnalisé et plus particulièrement en intervenant sur le dossier ''%%/var/lib/gitea/custom/%%''. 
 + 
 +==== Page de garde ==== 
 + 
 +Il est possible de faire une page de garde personnalisée en créant le fichier ''%%gogs/custom/templates/home.tmpl%%'' (par défaut le fichier affiché est ''%%/var/lib/gitea/templates/home.tmpl%%''). 
 + 
 +Il est également possible de personnaliser l'entête (''%%/var/lib/gitea/custom/templates/inject/head.tmpl%%'') et le bas de page (''%%/var/lib/gitea/custom/templates/inject/footer.tmpl%%''). 
 + 
 +Il est ainsi possible d'appliquer un //CSS// personnalisé qu'on placera dans ''%%/var/lib/gitea/custom/public/css%%'' et qu'on incluera dans l'entête personnalisé (exemple : ''%%<link rel="stylesheet" href="/css/custom.css">%%''). 
 + 
 +==== Logo & favicon ==== 
 +2021 : la technique permettant de changer le logo ne marche plus. Corrigé en faisant un lien symbolique ''gitea-sm.png -> logo_hadoly.png'' dans /var/lib/gitea/custom/img 
 + 
 +Afin de mettre le logo Hadoly dans le menu et en favicon, il suffit de remplacer le fichier ''%%/var/lib/gitea/custom/public/img/favicon.png%%''. 
 + 
 +Concernant le logo de la page de garde, il faut modifier l'image pointée par la class //CSS// //"logo"// du fichier ''%%home.tmpl%%'' (par défaut utilise le //favicon//). 
 + 
 +==== Liste des utilistateurs ==== 
 + 
 +Par défault, la liste des utilisateurs est publique, et visible y compris aux persononnes non authentifiées. (sur https://git.hadoly.fr/explore/users)   
 +Ce n'est pas configurable pour le moment, cf [[https://github.com/go-gitea/gitea/issues/2908 | Issue 2908]]   
 + 
 +Il est possible de passer REQUIRE_SIGNIN_VIEW à true, mais cela empêche alors d'avoir des dépots publics.  
 + 
 +Pour masquer la liste des utilisateurs dans l'interface web, on crée le fichier ''%%/var/lib/gitea/custom/templates/explore/users.tmpl%%'' :
  
 <code> <code>
-Type d'authentification : LDAP (via BindDN) +{{template "base/head" .}} 
-Protocole de sécurité : LDAPS +<div class="explore users"> 
-Hôte : leodagan.hadoly.fr + {{template "explore/navbar" .}} 
-Port : 636 + <div class="ui container"> 
-Bind DN : uid=gogs-account,ou=people,ou=service,dc=hadoly,dc=fr + 
-Bind mot de passe : motdepassesecret + <div class="ui user list"> 
-Utilisateur Search Base : dc=hadoly,dc=fr +                La liste des utilisateurs n'est pas disponible. 
-Filtre utilisateur : (&(objectclass=person)(uid=%s)(memberof=cn=gogs_group,ou=groups,dc=hadoly,dc=fr)) + </div> 
-Filtre administrateur : Vide + 
-Attribut nom d'utilisateur : uid + </div> 
-Attribut du prénom : givenName +</div> 
-Attribut du nom de famille : sn +{{template "base/footer" .}} 
-Attribut de l'e-mail : mail +
-[ ] Alllez chercher les attributs dans le contexte de liaison DN +
-[x] Ne pas vérifier TLS +
-[x] Authentification activée+
 </code> </code>
-<del>2017-06-12</del> <del>Darcidride : intégration avec LDAP (pas encore rédigé) et ce n'est pas moi qui est effectué l'opération...</del> ~~Objectif: Seuls les membres du groupe LDAP *git?_group* peuvent accéder au service~~ 
  
 +Il faut aussi bloquer le endpoint d'API ''api/v1/users/search'' qui permet de récupérer un beau json avec la liste des utilisateurs, (Login, Nom, Prénom, email, date de création, date dernier login...)  
  
 +Pour tester: ''curl -X GET "https://git.hadoly.Fr/api/v1/users/search" -H  "accept: application/json" | jq''  
 +
 +Pour bloquer  cela, il n'existe pas de bonne sollution sans impacter le fonctionnement de l'appli. Bloquer tout users/search/ empeche d'ajouter des utilisateurs à sur un dépot. Et casse peut être d'autres choses...
 +Le comportement par default de l'API, si on fait une requète avec n'importe quoi sur ce endpoint est de retourner la liste complète des users. Ça rend quasiment impossible de bloquer correctement avec une regex et la logique nginx. (en tout cas je n'y suis pas arrivé).
 +
 +Sollution très imparfaite qui bloque un petit peu, et laisse la recherche fonctionner du moment qu'on fournis au moins 3 lettres ou chiffres. 
 +
 +<code>
 +        location ~ ^/api/v1/users/search/?$ {
 +                if ($args ~* "^q?=?[a-z0-9]{0,3}$") {
 +                        return 403;
 +                }
 +</code>
  • documentation_technique/gitea.1547999028.txt.gz
  • Dernière modification : 01/20/2019 15:43:48
  • de bfaverdin