« Gitea » : différence entre les versions
m (Correction d'une erreur de coloration syntaxique.) |
(→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.) |
||
Ligne 91 : | Ligne 91 : | ||
=Mise à jour de Gitea= | =Mise à jour de Gitea= | ||
Les mises à jours sont simples puisque il suffit | ==Routine== | ||
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 <source lang="bash" inline>/usr/local/bin/gitea</source> par le plus récent avant de relancer le service avec: | et de remplacer le binaire <source lang="bash" inline>/usr/local/bin/gitea</source> 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 | {{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 <source lang="bash" inline>/var/lib/gitea/log/gitea.log</source> et doit se conclure par <source lang="bash" inline>NewServer() [I] Starting new Web server: tcp:0.0.0.0:3000 on PID: UN_PID</source>.}} | ||
==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 <source lang="bash" inline>UTF8mb4</source> de [[:Category:Base_de_données|MariaDB]] en lieu et place de l'<source lang="bash" inline>UTF8</source>. 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 (<source lang="bash" inline>Error 1071: Specified key was too long; max key length is 767 bytes</source>). ''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'' : | |||
<source lang="sql"> | |||
SET GLOBAL innodb_file_format=Barracuda; | |||
SET GLOBAL innodb_file_per_table=1; | |||
SET GLOBAL innodb_large_prefix=1; | |||
</source> | |||
Vous pouvez alors relancer le service pour exécuter la mise à jour normalement. | |||
=Utilisation= | =Utilisation= |
Version du 3 mai 2021 à 19:29
Gitea est une forge logiciel libre à source ouverte et une branche 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 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://dl.gitea.io/gitea/1.7.1/gitea-1.7.1-linux-amd64.xz
Décompression de Gitea
unxz gitea-1.7.1-linux-amd64.xz
Mise à disposition du binaire
mv gitea-1.7.1-linux-amd64 /usr/local/bin/gitea chmod +x /usr/local/bin/gitea
Préparation de l'arborescence de travail
mkdir -p /etc/gitea /var/lib/gitea/{custom,data,indexers,public,log} chown git:git /var/lib/gitea/{data,indexers,log} chmod 750 /var/lib/gitea/{data,indexers,log} chown root:git /etc/gitea chmod 770 /etc/gitea
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
After=mysql.service
[Service]
# Modifiez ces deux valeurs et dé-commentez-les si vous avez
# un dépôt avec beaucoup de fichiers et que vous avez
# une erreur HTTP 500 à cause de ça
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/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
# Si vous voulez rediriger Getea vers un port inferieur à 1024, dé-commentez
# les deux valeurs suivante
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
systemctl daemon-reload systemctl restart gitea systemctl enable gitea systemctl status gitea
La suite de l'installation se fait via l'interface Web. J'ai utilisé pour mon usage personnel le proxy inverse Haproxy avec un certificat Letsencrypt mais on verra bien souvent Nginx pour cet usage. Si vous n'utilisez pas de proxy inverse, le service est accessible via sont IP avec le port 3000.
Lors de cette configuration il est possible de changer quelques paramètres. Pour ma part, j'ai choisi de désactiver la possibilité de s'inscrire (seul l'administrateur peut créer des comptes) ainsi que de désactiver Gravatar et OpenID.
ASTUCE
Il est tout à fait possible d'éditer manuellement cette configuration en écrivant directement dans le fichier/etc/gitea/app.ini
.INFORMATION
Le premier utilisateur créé sera l'administrateur de Gitea.Une fois l'installation terminée, il est conseillé d’interdire l'écriture sur le fichier de configuration de Gitea:
chmod 750 /etc/gitea chmod 644 /etc/gitea/app.ini
Sources de la section
- https://docs.gitea.io/fr-fr/
- https://computingforgeeks.com/how-to-install-gitea-self-hosted-git-service-on-ubuntu-18-04-ubuntu-16-04/
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