« Gitea » : différence entre les versions
(→Mise à jour de Gitea : Ajout d'une section traitant du cas particulier de l'encodage "UTF8mb4" depuis la branche 1.14 de Gitea + ajout d'un détail sur l'avancée de la mise à jour + légères corrections de syntaxe.) |
(Ajout de la section "Éléments de configuration" + remplacement de la balise "source" obsolète) |
||
(2 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category:service_git]] | [[Category:service_git]] | ||
Gitea est une forge logiciel libre à source ouverte et une | ''Gitea'' est une forge logiciel libre à source ouverte et une bifurcation de [https://gogs.io/ Gogs]. C'est un logiciel écrit en [https://fr.wikipedia.org/wiki/Go_(langage) Go] et une alternative auto-hébergeable à [https://github.com/about Github] qui se veut plus légère que [https://about.gitlab.com/ Gitlab] tant en terme de consommation de ressources qu'en fonctionnalités. | ||
=Installation= | =Installation= | ||
'''Installation des dépendances''' | '''Installation des dépendances''' | ||
apt install mariadb-server git dirmngr | apt install --no-install-recommends mariadb-server git dirmngr | ||
==Préparation de la base de données== | ==Préparation de la base de données== | ||
Ligne 11 : | Ligne 11 : | ||
'''Création de la base et de l'utilisateur exploitant''' | '''Création de la base et de l'utilisateur exploitant''' | ||
< | <syntaxhighlight lang="mysql"> | ||
CREATE DATABASE gitea; | CREATE DATABASE gitea; | ||
GRANT all privileges on gitea.* to 'gitea'@'localhost' identified by 'gitea'; | GRANT all privileges on gitea.* to 'gitea'@'localhost' identified by 'gitea'; | ||
</ | </syntaxhighlight> | ||
==Installation de Gitea== | ==Installation de Gitea== | ||
'''Téléchargement de Gitea''' | '''Téléchargement de Gitea''' | ||
wget https:// | wget https://github.com/go-gitea/gitea/releases/download/v1.14.2/gitea-1.14.2-linux-amd64.xz | ||
'''Décompression de Gitea''' | '''Décompression de Gitea''' | ||
unxz gitea-1. | unxz gitea-1.14.2-linux-amd64.xz | ||
'''Mise à disposition du binaire''' | '''Mise à disposition du binaire''' | ||
mv gitea-1. | mv gitea-1.14.2-linux-amd64 /usr/local/bin/gitea | ||
chmod +x /usr/local/bin/gitea | chmod +x /usr/local/bin/gitea | ||
'''Création de l'utilisateur système''' | |||
useradd --system --shell /usr/sbin/nologin --home-dir /var/lib/git/ --user-group git | |||
'''Préparation de l'arborescence de travail''' | '''Préparation de l'arborescence de travail''' | ||
mkdir -p /etc/ | mkdir -p /etc/git /var/lib/git/{custom,data,indexers,public,log} | ||
chown git:git /var/lib/ | chown -R git:git /var/lib/git | ||
chmod 750 /var/lib/ | chmod 750 /var/lib/git/{data,indexers,log} | ||
chown root:git /etc/ | chown root:git /etc/git | ||
chmod 770 /etc/gitea | chmod 770 /etc/git | ||
'''Initialisation de la configuration''' | |||
su - git -s /bin/sh -c "GITEA_WORK_DIR=/var/lib/git/ /usr/local/bin/gitea web -c /etc/git/app.ini" | |||
À ce stade, ''Gitea'' écoute sur le port ''HTTP'' 3000. Rendez-vous sur la page d'installation avec un navigateur ''WEB'' pour configurer le contenu du fichier <syntaxhighlight lang="bash" inline>/etc/git/app.ini</syntaxhighlight>. Vous pouvez ignorer cette étape si vous en avez déjà un. | |||
Lors de cette configuration il est possible de changer quelques paramètres. Pour ma part, j'ai choisi de n'autoriser aucun services externes (toutes cases décochées). | |||
Une fois terminé, arrêtez ''Gitea'' via un <syntaxhighlight lang="bash" inline><ctrl+c></syntaxhighlight> suivit d'un <syntaxhighlight lang="bash" inline>pkill gitea</syntaxhighlight>. | |||
Pour désactiver la possibilité de s'inscrire (seul l'administrateur peut créer des comptes), il faut passer la valeur <syntaxhighlight lang="bash" inline>DISABLE_REGISTRATION</syntaxhighlight> du fichier <syntaxhighlight lang="bash" inline>/etc/git/app.ini</syntaxhighlight> à <syntaxhighlight lang="bash" inline>true</syntaxhighlight>. | |||
'''Création du service Systemd''' | '''Création du service Systemd''' | ||
vim /etc/systemd/system/gitea.service | vim /etc/systemd/system/gitea.service | ||
< | <syntaxhighlight lang="bash"> | ||
[Unit] | [Unit] | ||
Description=Gitea (Git avec une tasse de thé) | Description=Gitea (Git avec une tasse de thé) | ||
After=syslog.target | After=syslog.target | ||
After=network.target | After=network.target | ||
[Service] | [Service] | ||
RestartSec=2s | RestartSec=2s | ||
Type=simple | Type=simple | ||
User=git | User=git | ||
Group=git | Group=git | ||
WorkingDirectory=/var/lib/ | WorkingDirectory=/var/lib/git/ | ||
ExecStart=/usr/local/bin/gitea web - | ExecStart=/usr/local/bin/gitea web --config /etc/git/app.ini | ||
Restart=always | Restart=always | ||
Environment=USER=git HOME=/ | Environment=USER=git HOME=/var/lib/git/ GITEA_WORK_DIR=/var/lib/git | ||
[Install] | [Install] | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
</ | </syntaxhighlight> | ||
'''Chargement du nouveau service''' | |||
systemctl daemon-reload | systemctl daemon-reload | ||
systemctl | systemctl start gitea | ||
systemctl enable gitea | systemctl enable gitea | ||
systemctl status gitea | systemctl status gitea | ||
Une fois l'installation terminée, il est conseillé d’interdire l'écriture sur le fichier de configuration de ''Gitea'' : | |||
chmod 750 /etc/git | |||
chmod 644 /etc/git/app.ini | |||
{{astuce|Il est tout à fait possible d'éditer manuellement cette configuration en écrivant directement dans le fichier < | {{astuce|Il est tout à fait possible d'éditer manuellement cette configuration en écrivant directement dans le fichier <syntaxhighlight lang="bash" inline>/etc/git/app.ini</syntaxhighlight>.}} | ||
{{info|Le premier utilisateur créé sera l'administrateur de Gitea.}} | {{info|Le premier utilisateur créé sera l'administrateur de ''Gitea''.}} | ||
J'ai utilisé pour mon usage personnel le mandataire inverse [[Haproxy]] avec un certificat [[Letsencrypt]] mais on verra bien souvent [[Nginx]] pour cet usage. Si vous n'utilisez pas de mandataire inverse, le service est accessible via sont ''IP'' avec le port 3000. | |||
==Sources de la section== | ==Sources de la section== | ||
* https://docs.gitea.io/ | * https://docs.gitea.io/en-us/install-from-binary/ | ||
* https://docs.gitea.io/en-us/linux-service/ | |||
* https://computingforgeeks.com/how-to-install-gitea-self-hosted-git-service-on-ubuntu-18-04-ubuntu-16-04/ | * https://computingforgeeks.com/how-to-install-gitea-self-hosted-git-service-on-ubuntu-18-04-ubuntu-16-04/ | ||
=Éléments de configuration= | |||
Il est possible de changer manuellement quelques [https://docs.gitea.io/en-us/config-cheat-sheet/ paramètres] en éditant directement le fichier de configuration <syntaxhighlight lang="bash" inline>/etc/git/app.ini</syntaxhighlight>. | |||
==Page d'accueil== | |||
Par défaut, l'outil envoi les utilisateurs non connectés sur une page sans grand intérêts. Le paramètre <syntaxhighlight lang="bash" inline>LANDING_PAGE</syntaxhighlight> de la directive <syntaxhighlight lang="bash" inline>[server]</syntaxhighlight> permet de changer cela. | |||
Voici un exemple pour les rediriger vers l'explorateur de dépôts | |||
<syntaxhighlight lang="bash"> | |||
LANDING_PAGE = explore | |||
</syntaxhighlight> | |||
==Serveur de messagerie== | |||
Afin de permettre l'utilisation de la [[Serveur de courriels|messagerie électronique]], il faut [https://docs.gitea.io/en-us/email-setup/ ajouter] la directive suivante à la configuration | |||
<syntaxhighlight lang="bash"> | |||
[mailer] | |||
ENABLED = true | |||
FROM = gitea@exemple.fr | |||
MAILER_TYPE = smtp | |||
HOST = 192.168.0.200:587 | |||
SKIP_VERIFY = true | |||
IS_TLS_ENABLED = true | |||
</syntaxhighlight> | |||
Il est également possible d'envoyer des notifications aux utilisateurs suivants des tickets en ajoutant le paramètre <syntaxhighlight lang="bash" inline>ENABLE_NOTIFY_MAIL = true</syntaxhighlight> de la directive <syntaxhighlight lang="bash" inline>[service]</syntaxhighlight>. | |||
=Mise à jour de Gitea= | =Mise à jour de Gitea= | ||
==Routine== | ==Routine== | ||
Les mises à jours sont simples puisque il suffit d’arrêter le service Gitea avec : | Les mises à jours sont simples puisque il suffit d’arrêter le service ''Gitea'' avec : | ||
systemctl stop gitea.service | systemctl stop gitea.service | ||
et de remplacer le binaire < | et de remplacer le binaire <syntaxhighlight lang="bash" inline>/usr/local/bin/gitea</syntaxhighlight> par le plus récent avant de relancer le service avec : | ||
systemctl start gitea.service | systemctl start gitea.service | ||
{{info|Il faut attendre quelques minutes que le service se lance la première fois pour qu'il mette à jour la base de données. L'avancée est visible dans le fichier < | {{info|Il faut attendre quelques minutes que le service se lance la première fois pour qu'il mette à jour la base de données. L'avancée est visible dans le fichier <syntaxhighlight lang="bash" inline>/var/lib/gitea/log/gitea.log</syntaxhighlight> et doit se conclure par <syntaxhighlight lang="bash" inline>NewServer() [I] Starting new Web server: tcp:0.0.0.0:3000 on PID: UN_PID</syntaxhighlight>.}} | ||
==Changement d'encodage UTF-8== | ==Changement d'encodage UTF-8== | ||
Depuis le passage à la branche ''1.14'' (passage de la 1.11.4 à la 1.14.1 pour ma part), ''Gitea'' utilise l'encodage < | Depuis le passage à la branche ''1.14'' (passage de la 1.11.4 à la 1.14.1 pour ma part), ''Gitea'' utilise l'encodage <syntaxhighlight lang="bash" inline>UTF8mb4</syntaxhighlight> de [[:Category:Base_de_données|MariaDB]] en lieu et place de l'<syntaxhighlight lang="bash" inline>UTF8</syntaxhighlight>. 767 octets correspondent à 255 caractères en ''UTF8'' et 191 en ''UTF8mb4''. Ceci a pour conséquence de faire échouer la conversion de certaines tables et donc de foutre la merde sévère dans la base (<syntaxhighlight lang="bash" inline>Error 1071: Specified key was too long; max key length is 767 bytes</syntaxhighlight>). ''Gitea'' est alors pété et ne démarre plus... Pour prévenir ça, il faut (avant la migration - possible pendant si vous êtes rapide), arrêter le service comme expliqué supra, remplacer le binaire par la nouvelle version ET exécuter les actions suivantes (comme expliqué dans ce [https://github.com/go-gitea/gitea/issues/15540 ticket]) en utilisateur ''root MariaDB'' : | ||
< | <syntaxhighlight lang="sql"> | ||
SET GLOBAL innodb_file_format=Barracuda; | SET GLOBAL innodb_file_format=Barracuda; | ||
SET GLOBAL innodb_file_per_table=1; | SET GLOBAL innodb_file_per_table=1; | ||
SET GLOBAL innodb_large_prefix=1; | SET GLOBAL innodb_large_prefix=1; | ||
</ | </syntaxhighlight> | ||
Vous pouvez alors relancer le service pour exécuter la mise à jour normalement. | Vous pouvez alors relancer le service pour exécuter la mise à jour normalement. | ||
Ligne 113 : | Ligne 142 : | ||
=Utilisation= | =Utilisation= | ||
==Création d'un dépôt== | ==Création d'un dépôt== | ||
La création d'un nouveau dépôt s'effectue via le bouton "'''+'''" en haut à droite de l'interface utilisateur. À la fin du formulaire, un choix vous est laissé d'initialiser ou pas le dépôt. Si vous laissez Gitea l'initialiser, il va tout créer pour vous, sinon vous devrez faire ces quelques étapes à la main. Après avoir renseigné les informations demandées et dans le cas d'une non initialisation automatique. les instructions suivantes sont données pour la création en local des fichiers et envoi au serveur via Git: | La création d'un nouveau dépôt s'effectue via le bouton "'''+'''" en haut à droite de l'interface utilisateur. À la fin du formulaire, un choix vous est laissé d'initialiser ou pas le dépôt. Si vous laissez ''Gitea'' l{{'}}initialiser, il va tout créer pour vous, sinon vous devrez faire ces quelques étapes à la main. Après avoir renseigné les informations demandées et dans le cas d'une non initialisation automatique. les instructions suivantes sont données pour la création en local des fichiers et envoi au serveur via ''Git'' : | ||
'''Création d'un nouveau dépôt en ligne de commande''' | '''Création d'un nouveau dépôt en ligne de commande''' | ||
< | <syntaxhighlight lang="bash"> | ||
touch README.md | touch README.md | ||
git init | git init | ||
Ligne 123 : | Ligne 152 : | ||
git remote add origin http://localhost:3000/yohan/Test.git | git remote add origin http://localhost:3000/yohan/Test.git | ||
git push -u origin master | git push -u origin master | ||
</ | </syntaxhighlight> | ||
'''Soumission d'un dépôt existant par ligne de commande''' | '''Soumission d'un dépôt existant par ligne de commande''' | ||
< | <syntaxhighlight lang="bash"> | ||
git remote add origin http://localhost:3000/yohan/Test.git | git remote add origin http://localhost:3000/yohan/Test.git | ||
git push -u origin master | git push -u origin master | ||
</ | </syntaxhighlight> |
Dernière version du 24 février 2023 à 19:50
Gitea est une forge logiciel libre à source ouverte et une bifurcation de Gogs. C'est un logiciel écrit en Go et une alternative auto-hébergeable à Github qui se veut plus légère que Gitlab tant en terme de consommation de ressources qu'en fonctionnalités.
Installation
Installation des dépendances
apt install --no-install-recommends mariadb-server git dirmngr
Préparation de la base de données
mariadb -u root
Création de la base et de l'utilisateur exploitant
CREATE DATABASE gitea;
GRANT all privileges on gitea.* to 'gitea'@'localhost' identified by 'gitea';
Installation de Gitea
Téléchargement de Gitea
wget https://github.com/go-gitea/gitea/releases/download/v1.14.2/gitea-1.14.2-linux-amd64.xz
Décompression de Gitea
unxz gitea-1.14.2-linux-amd64.xz
Mise à disposition du binaire
mv gitea-1.14.2-linux-amd64 /usr/local/bin/gitea chmod +x /usr/local/bin/gitea
Création de l'utilisateur système
useradd --system --shell /usr/sbin/nologin --home-dir /var/lib/git/ --user-group git
Préparation de l'arborescence de travail
mkdir -p /etc/git /var/lib/git/{custom,data,indexers,public,log} chown -R git:git /var/lib/git chmod 750 /var/lib/git/{data,indexers,log} chown root:git /etc/git chmod 770 /etc/git
Initialisation de la configuration
su - git -s /bin/sh -c "GITEA_WORK_DIR=/var/lib/git/ /usr/local/bin/gitea web -c /etc/git/app.ini"
À ce stade, Gitea écoute sur le port HTTP 3000. Rendez-vous sur la page d'installation avec un navigateur WEB pour configurer le contenu du fichier /etc/git/app.ini
. Vous pouvez ignorer cette étape si vous en avez déjà un.
Lors de cette configuration il est possible de changer quelques paramètres. Pour ma part, j'ai choisi de n'autoriser aucun services externes (toutes cases décochées).
Une fois terminé, arrêtez Gitea via un <ctrl+c>
suivit d'un pkill gitea
.
Pour désactiver la possibilité de s'inscrire (seul l'administrateur peut créer des comptes), il faut passer la valeur DISABLE_REGISTRATION
du fichier /etc/git/app.ini
à true
.
Création du service Systemd
vim /etc/systemd/system/gitea.service
[Unit]
Description=Gitea (Git avec une tasse de thé)
After=syslog.target
After=network.target
[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/git/
ExecStart=/usr/local/bin/gitea web --config /etc/git/app.ini
Restart=always
Environment=USER=git HOME=/var/lib/git/ GITEA_WORK_DIR=/var/lib/git
[Install]
WantedBy=multi-user.target
Chargement du nouveau service
systemctl daemon-reload systemctl start gitea systemctl enable gitea systemctl status gitea
Une fois l'installation terminée, il est conseillé d’interdire l'écriture sur le fichier de configuration de Gitea :
chmod 750 /etc/git chmod 644 /etc/git/app.ini
ASTUCE
Il est tout à fait possible d'éditer manuellement cette configuration en écrivant directement dans le fichier/etc/git/app.ini
.INFORMATION
Le premier utilisateur créé sera l'administrateur de Gitea.J'ai utilisé pour mon usage personnel le mandataire inverse Haproxy avec un certificat Letsencrypt mais on verra bien souvent Nginx pour cet usage. Si vous n'utilisez pas de mandataire inverse, le service est accessible via sont IP avec le port 3000.
Sources de la section
- https://docs.gitea.io/en-us/install-from-binary/
- https://docs.gitea.io/en-us/linux-service/
- https://computingforgeeks.com/how-to-install-gitea-self-hosted-git-service-on-ubuntu-18-04-ubuntu-16-04/
Éléments de configuration
Il est possible de changer manuellement quelques paramètres en éditant directement le fichier de configuration /etc/git/app.ini
.
Page d'accueil
Par défaut, l'outil envoi les utilisateurs non connectés sur une page sans grand intérêts. Le paramètre LANDING_PAGE
de la directive [server]
permet de changer cela.
Voici un exemple pour les rediriger vers l'explorateur de dépôts
LANDING_PAGE = explore
Serveur de messagerie
Afin de permettre l'utilisation de la messagerie électronique, il faut ajouter la directive suivante à la configuration
[mailer]
ENABLED = true
FROM = gitea@exemple.fr
MAILER_TYPE = smtp
HOST = 192.168.0.200:587
SKIP_VERIFY = true
IS_TLS_ENABLED = true
Il est également possible d'envoyer des notifications aux utilisateurs suivants des tickets en ajoutant le paramètre ENABLE_NOTIFY_MAIL = true
de la directive [service]
.
Mise à jour de Gitea
Routine
Les mises à jours sont simples puisque il suffit d’arrêter le service Gitea avec :
systemctl stop gitea.service
et de remplacer le binaire /usr/local/bin/gitea
par le plus récent avant de relancer le service avec :
systemctl start gitea.service
INFORMATION
Il faut attendre quelques minutes que le service se lance la première fois pour qu'il mette à jour la base de données. L'avancée est visible dans le fichier/var/lib/gitea/log/gitea.log
et doit se conclure par NewServer() [I] Starting new Web server: tcp:0.0.0.0:3000 on PID: UN_PID
.Changement d'encodage UTF-8
Depuis le passage à la branche 1.14 (passage de la 1.11.4 à la 1.14.1 pour ma part), Gitea utilise l'encodage UTF8mb4
de MariaDB en lieu et place de l'UTF8
. 767 octets correspondent à 255 caractères en UTF8 et 191 en UTF8mb4. Ceci a pour conséquence de faire échouer la conversion de certaines tables et donc de foutre la merde sévère dans la base (Error 1071: Specified key was too long; max key length is 767 bytes
). Gitea est alors pété et ne démarre plus... Pour prévenir ça, il faut (avant la migration - possible pendant si vous êtes rapide), arrêter le service comme expliqué supra, remplacer le binaire par la nouvelle version ET exécuter les actions suivantes (comme expliqué dans ce ticket) en utilisateur root MariaDB :
SET GLOBAL innodb_file_format=Barracuda;
SET GLOBAL innodb_file_per_table=1;
SET GLOBAL innodb_large_prefix=1;
Vous pouvez alors relancer le service pour exécuter la mise à jour normalement.
Utilisation
Création d'un dépôt
La création d'un nouveau dépôt s'effectue via le bouton "+" en haut à droite de l'interface utilisateur. À la fin du formulaire, un choix vous est laissé d'initialiser ou pas le dépôt. Si vous laissez Gitea l'initialiser, il va tout créer pour vous, sinon vous devrez faire ces quelques étapes à la main. Après avoir renseigné les informations demandées et dans le cas d'une non initialisation automatique. les instructions suivantes sont données pour la création en local des fichiers et envoi au serveur via Git :
Création d'un nouveau dépôt en ligne de commande
touch README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin http://localhost:3000/yohan/Test.git
git push -u origin master
Soumission d'un dépôt existant par ligne de commande
git remote add origin http://localhost:3000/yohan/Test.git
git push -u origin master