--- 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. ### Mettre à jour Le processus de mise à jour est assez simple et similaire au processus d'installation. Après avoir regardé s'il n'y a pas d'actions à faire manuellement, on peut simplement télécharger le dernier binaire dans `/usr/local/bin/`. Lui appliquer les bon droits (*chmod 755*) et mettre à jour le lien symbolique /usr/local/bin/gitea vers ce nouveau binaire. Il ne reste plus qu'à redémarrer l'instance. C'est terminé! ## 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é * le compte **git** pour l'application existe. 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 │   │   ├── public << Fichiers servis par le serveur web │   │   └── templates << Templates des pages │   │   └── home.tmpl │ │ │   └── 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 ~~~ Ces dossiers seront créés au premier lancement de gitea. Il faut donc s'assurer que certaines variables d'environnement sont bien positionnées. 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 (avec des logs en cas de soucis) : ~~~ # 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/ [repository] ROOT = /home/git/repositories [log] ROOT_PATH = /home/git/log/ MODE = file LEVEL = Info [i18n] LANGS = fr-FR, en-US NAMES = Français,English ~~~ ### 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 ~~~