wiki/HowtoGitea.md

235 lines
5.9 KiB
Markdown
Raw Normal View History

2018-10-24 22:27:08 +02:00
---
title: Howto Gitea
categories: sysadmin git forge
...
* Site officiel : <https://gitea.io/>
[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 <https://dl.gitea.io/gitea/>.
~~~
# 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.
2018-11-02 10:29:35 +01:00
### 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é!
2018-10-24 22:27:08 +02:00
## Configuration
2018-11-02 10:29:35 +01:00
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.
2018-10-24 22:27:08 +02:00
Au final, on va se retrouver avec la hiérarchie suivante :
~~~
$ tree /home/git
├── internals
2018-11-02 10:29:35 +01:00
│   ├── 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)
2018-10-24 22:27:08 +02:00
│   ├── avatars
│   ├── indexers
│   ├── lfs
│   └── sessions
2018-11-02 10:29:35 +01:00
├── log << Journaux applicatifs
2018-10-24 22:27:08 +02:00
│   ├── gitea.log
│   ├── http.log
│   ├── serv.log
│   └── xorm.log
2018-11-02 10:29:35 +01:00
└── repositories << Données des dépôts git
2018-10-24 22:27:08 +02:00
└── foo
└── hello_world.git
~~~
2018-11-02 10:29:35 +01:00
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.
2018-10-24 22:27:08 +02:00
### /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
~~~
2018-11-02 10:49:43 +01:00
On ajoute aussi quelques réglages initiaux, pour que l'interface de gitea soit directement fonctionnelle (avec des logs en cas de soucis) :
2018-10-24 22:27:08 +02:00
~~~
# 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/
2018-11-02 10:49:43 +01:00
[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
2018-10-24 22:27:08 +02:00
~~~
### 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
~~~