From bce06827ae60fd8de24f52d41da250f65ae44ef2 Mon Sep 17 00:00:00 2001 From: lpoujol Date: Wed, 24 Oct 2018 22:27:08 +0200 Subject: [PATCH] (WIP) Documentation Gitea --- HowtoGitea.md | 208 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 HowtoGitea.md diff --git a/HowtoGitea.md b/HowtoGitea.md new file mode 100644 index 00000000..3f2772f5 --- /dev/null +++ b/HowtoGitea.md @@ -0,0 +1,208 @@ +--- +title: Howto Gitea +categories: sysadmin git forge +... + +* Site officiel : + + +[Gitea](https://gitea.io/) est un fork de gogs, une solution d'hébergement de code avec git. + + +## Installation + +Malheureusement, gitea n'est pas distribué sous forme de paquet Debian. Une alternative est donc d'utiliser directement les binaires produits par les développeurs de Gitea. Ils sont récupérables sur . + +~~~ +# cd /usr/local/bin +# wget https://dl.gitea.io/gitea/1.5.2/gitea-1.5.2-linux-amd64 +# chmod +x gitea-1.5.2-linux-amd64 +# ln -s gitea-1.5.2-linux-amd64 gitea + +# mkdir /etc/gitea/ + +# gitea --version +Gitea version 1.5.2 built with: bindata, sqlite +~~~ + +**Note** : Même si gitea peut fonctionner de manière autonome avec SQLite, à partir d'une certaine taille/utilisation, il est préférable de basculer vers un moteur de base de données tel que [HowtoMySQL]() ou [HowtoPostgreSQL]() et d'ajouter [HowtoRedis]() pour le cache/sessions. + + +## Configuration + +Dans la suite de cette documentation, on se place dans le cas d'une instance simple, fonctionnant avec l'utilisateur **git**. On part du principe que : MySQL est déjà installé, et que le compte pour l'application existe déjà. + +Au final, on va se retrouver avec la hiérarchie suivante : + +~~~ +$ tree /home/git +├── internals +│   ├── custom << Fichiers de customisation de l'interface web de gitea +│   └── data << Toutes les données de gitea (autres que les dépôts git) +│   ├── avatars +│   ├── indexers +│   ├── lfs +│   └── sessions +│ +├── log << Journaux applicatifs +│   ├── gitea.log +│   ├── http.log +│   ├── serv.log +│   └── xorm.log +│ +└── repositories << Données des dépôts git + └── foo + └── hello_world.git + +~~~ + +Lors de la première exécution de gitea, une page d'installation va demander tous les paramètres nécessaires pour initialiser l'instance. Celle-ci va aussi permettre de créer le premier compte administrateur. + +### /etc/gitea/git.ini + +On doit initialiser le fichier de configuration de gitea avec les commandes suivantes. +A noter qu'on ne laisse les droits d'écritures uniquement pour l'installation. + + +~~~ +# touch /etc/gitea/git.ini +# chown root:git /etc/gitea/git.ini +# chmod g+rw /etc/gitea/git.ini +~~~ + +On ajoute aussi quelques réglages initiaux, pour que l'interface de gitea soit directement fonctionnelle : + +~~~ +# cat /etc/gitea/git.ini +APP_NAME = Gitea +RUN_USER = git +RUN_MODE = prod + +[server] +PROTOCOL = unix +DOMAIN = gitea.example.org +HTTP_ADDR = /home/git/gitea.sock +UNIX_SOCKET_PERMISSION = 660 +OFFLINE_MODE = true +SSH_DOMAIN = gitea.example.org +ROOT_URL = https://gitea.example.org/ +~~~ + + +### systemd + +~~~ +# cat /etc/systemd/system/gitea@.service + +[Unit] +Description=Gitea (Git with a cup of tea) +After=syslog.target +After=network.target +After=mysqld.service + +[Service] +User=git +Group=git + +Type=simple +RestartSec=2s +Restart=always + +WorkingDirectory=/home/git +ExecStart=/usr/local/bin/gitea web --config /etc/gitea/git.ini +Environment=GITEA_WORK_DIR=/home/git/internals + + +[Install] +WantedBy=multi-user.target +~~~ + +### MySQL + +~~~ +# mysqladmin create git +# mysql +mysql> GRANT ALL PRIVILEGES ON git.* TO 'git'@localhost IDENTIFIED BY 'PASSWORD'; +~~~ + +Côté gitea.ini, la base de donnée MySQL se configure avec la section ci-dessous. + +**Note** : La page d'installation va remplir cette section de la configuration automatiquement. + +~~~ +[database] +DB_TYPE = mysql +HOST = /run/mysqld/mysqld.sock +NAME = git +USER = git +PASSWD = PASSWORD +~~~ + +### Nginx + +~~~ +# cat /etc/nginx/sites-enabled/git +upstream gitea_git { + server unix:/home/git/gitea.sock; +} + +server { + listen 0.0.0.0:80; + listen [::]:80; + listen 0.0.0.0:443 ssl http2; + listen [::]:443 ssl http2; + + server_name gitea.evolix.org; + + include /etc/nginx/ssl/git.conf; + include /etc/nginx/letsencrypt.conf; + + if ( $scheme = http ) { + return 301 https://$server_name$request_uri; + } + + location / { + proxy_pass http://gitea_git; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_read_timeout 10; + } +} +~~~ + +### Redis + +*TODO* + + +## Avancé + +### Multiples instances + +On peut très bien faire du multi-instance. On peut ainsi basculer sur une unité systemd avec paramètre comme : + +~~~ +# cat /etc/systemd/system/gitea@.service + +[Unit] +Description=Gitea (Git with a cup of tea) for %i +After=syslog.target +After=network.target +After=mysqld.service + +[Service] +User=%i +Group=%i + +Type=simple +RestartSec=2s +Restart=always + +WorkingDirectory=/home/%i +ExecStart=/usr/local/bin/gitea web --config /etc/gitea/%i.ini +Environment=GITEA_WORK_DIR=/home/%i/internals + +[Install] +WantedBy=multi-user.target +~~~ +