« Gitea » : différence entre les versions

De Wiki doc

(→‎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.)
(Mise à jour de la procédure avec l'évolution de l'outil en 1.14.2.)
Ligne 1 : Ligne 1 :
[[Category:service_git]]
[[Category:service_git]]


Gitea est une forge logiciel libre à source ouverte et une branche 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 à Github qui se veut plus légère que Gitlab tant en terme de consommation de ressources qu'en fonctionnalités.
''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 18 : Ligne 18 :
==Installation de Gitea==
==Installation de Gitea==
'''Téléchargement de Gitea'''
'''Téléchargement de Gitea'''
  wget https://dl.gitea.io/gitea/1.7.1/gitea-1.7.1-linux-amd64.xz
  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.7.1-linux-amd64.xz
  unxz gitea-1.14.2-linux-amd64.xz


'''Mise à disposition du binaire'''
'''Mise à disposition du binaire'''
  mv gitea-1.7.1-linux-amd64 /usr/local/bin/gitea
  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/gitea/ --user-group gitea


'''Préparation de l'arborescence de travail'''
'''Préparation de l'arborescence de travail'''
  mkdir -p /etc/gitea /var/lib/gitea/{custom,data,indexers,public,log}
  mkdir -p /etc/gitea /var/lib/gitea/{custom,data,indexers,public,log}
  chown git:git /var/lib/gitea/{data,indexers,log}
  chown -R gitea:gitea /var/lib/gitea
  chmod 750 /var/lib/gitea/{data,indexers,log}
  chmod 750 /var/lib/gitea/{data,indexers,log}
  chown root:git /etc/gitea
  chown root:gitea /etc/gitea
  chmod 770 /etc/gitea
  chmod 770 /etc/gitea
'''Initialisation de la configuration'''
su - gitea -s /bin/sh -c "GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/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 <source lang="bash" inline>/etc/gitea/app.ini</source>. 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 <source lang="bash" inline><ctrl+c></source> suivit d'un <source lang="bash" inline>pkill gitea</source>.
Pour désactiver la possibilité de s'inscrire (seul l'administrateur peut créer des comptes), il faut passer la valeur <source lang="bash" inline>DISABLE_REGISTRATION</source> du fichier <source lang="bash" inline>/etc/gitea/app.ini</source> à <source lang="bash" inline>true</source>.


'''Création du service Systemd'''
'''Création du service Systemd'''
Ligne 42 : Ligne 56 :
After=syslog.target
After=syslog.target
After=network.target
After=network.target
After=mysql.service


[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
RestartSec=2s
Type=simple
Type=simple
User=git
User=gitea
Group=git
Group=gitea
WorkingDirectory=/var/lib/gitea/
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
Environment=USER=gitea HOME=/var/lib/gitea/ 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]
[Install]
Ligne 69 : Ligne 71 :
</source>
</source>


'''Chargement du nouveau service'''
  systemctl daemon-reload
  systemctl daemon-reload
  systemctl restart gitea
  systemctl start gitea
  systemctl enable gitea
  systemctl enable gitea
  systemctl status 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.
Une fois l'installation terminée, il est conseillé d’interdire l'écriture sur le fichier de configuration de ''Gitea'' :
 
chmod 750 /etc/gitea
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.
chmod 644 /etc/gitea/app.ini


{{astuce|Il est tout à fait possible d'éditer manuellement cette configuration en écrivant directement dans le fichier <source lang="bash" inline>/etc/gitea/app.ini</source>.}}
{{astuce|Il est tout à fait possible d'éditer manuellement cette configuration en écrivant directement dans le fichier <source lang="bash" inline>/etc/gitea/app.ini</source>.}}


{{info|Le premier utilisateur créé sera l'administrateur de Gitea.}}
{{info|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:
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.
chmod 750 /etc/gitea
chmod 644 /etc/gitea/app.ini


==Sources de la section==
==Sources de la section==
* https://docs.gitea.io/fr-fr/
* 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/


=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


Ligne 113 : Ligne 115 :
=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'''

Version du 8 juin 2021 à 16:19


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/gitea/ --user-group gitea

Préparation de l'arborescence de travail

mkdir -p /etc/gitea /var/lib/gitea/{custom,data,indexers,public,log}
chown -R gitea:gitea /var/lib/gitea
chmod 750 /var/lib/gitea/{data,indexers,log}
chown root:gitea /etc/gitea
chmod 770 /etc/gitea

Initialisation de la configuration

su - gitea -s /bin/sh -c "GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/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/gitea/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/gitea/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=gitea
Group=gitea
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=gitea HOME=/var/lib/gitea/ GITEA_WORK_DIR=/var/lib/gitea

[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/gitea
chmod 644 /etc/gitea/app.ini

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.

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

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