--- 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 ~~~