wiki/HowtoGitea.md

319 lines
9.6 KiB
Markdown
Raw Normal View History

2018-10-24 22:27:08 +02:00
---
title: Howto Gitea
categories: sysadmin git forge
...
2018-11-11 20:01:19 +01:00
* Documentation : <https://docs.gitea.io/fr-fr/>
2018-10-24 22:27:08 +02:00
2018-11-11 20:01:19 +01:00
[Gitea](https://gitea.io/) est un logiciel libre de gestion de code source permettant de créer des projets avec un dépôt [Git](HowtoGit), des tickets, un wiki et une collaboration autour du code (fork, pull requests, etc.). Gitea est un fork de [Gogs](https://gogs.io/) qui ressemble fortement au logiciel propriétaire *Github*, il est écrit en Go et nous le trouvons simple à installer et maintenir contrairement à [Gitlab](HowtoGitlab/10).
2018-10-24 22:27:08 +02:00
## Installation
2018-11-11 20:01:19 +01:00
2018-11-14 09:14:48 +01:00
Malheureusement, Gitea n'est [pas encore distribué sous forme de paquet Debian](http://bugs.debian.org/792101). 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/>.
2018-10-24 22:27:08 +02:00
~~~
# 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
~~~
2018-11-11 20:01:19 +01:00
> *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-10-24 22:27:08 +02:00
2018-11-11 20:01:19 +01:00
## Mise à jour
2018-11-02 10:29:35 +01:00
2018-11-11 20:01:19 +01:00
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.
2018-11-02 10:29:35 +01:00
2018-11-11 20:01:19 +01:00
Il ne reste plus qu'à redémarrer l'instance. C'est terminé !
2018-11-02 10:29:35 +01:00
2018-10-24 22:27:08 +02:00
## Configuration
2018-11-11 20:01:19 +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](HowtoMySQL) est déjà installé
2019-09-09 11:11:12 +02:00
* Le compte UNIX **git** existe sur la machine.
2018-11-13 14:53:47 +01:00
* La configuration sera écrire dans `/etc/gitea/git.ini`
* Tous les fichiers de gitea seront dans `/home/git/`
* L'adresse de l'instance sera gitea.example.org
2018-10-24 22:27:08 +02:00
2018-11-13 14:53:47 +01:00
Au final, Côté fichiers applicatifs, on va se retrouver avec la hiérarchie suivante :
2018-10-24 22:27:08 +02:00
~~~
$ 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-11 20:01:19 +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.
2018-11-02 10:29:35 +01:00
2018-11-11 20:01:19 +01:00
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
2018-11-13 14:53:47 +01:00
Avant de commencer, on doit initialiser le fichier de configuration de gitea avec les commandes suivantes.
2018-10-24 22:27:08 +02:00
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-11 20:01:19 +01:00
On ajoute aussi quelques réglages initiaux, pour que l'interface de Gitea soit directement fonctionnelle (avec des logs en cas de souci) :
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
2018-11-13 14:53:47 +01:00
ROOT_URL = http://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
2018-11-13 14:53:47 +01:00
On peut utiliser l'unité systemd suivante. Elle est inspirée de celle [proposée par les développeurs de gitea](https://github.com/go-gitea/gitea/blob/master/contrib/systemd/gitea.service). Nous l'avons ajustée pour correspondre au dossiers et réglages choisis plus haut.
2018-10-24 22:27:08 +02:00
~~~
2018-11-13 11:34:45 +01:00
# cat /etc/systemd/system/gitea.service
2018-10-24 22:27:08 +02:00
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
[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
2018-11-13 14:53:47 +01:00
Par défaut, Gitea utilise une base SQLite. Mais on peut utiliser MySQL (ou PostgreSQL).
Gitea nécessite seulement une base MySQL avec un compte.
2018-10-24 22:27:08 +02:00
~~~
# mysqladmin create git
# mysql
mysql> GRANT ALL PRIVILEGES ON git.* TO 'git'@localhost IDENTIFIED BY 'PASSWORD';
~~~
2018-11-11 20:01:19 +01:00
Côté `gitea.ini`, la base de donnée MySQL se configure avec la section ci-dessous.
2018-10-24 22:27:08 +02:00
2018-11-13 14:53:47 +01:00
> *Note* : La page d'installation peut remplir cette section de la configuration automatiquement.
2018-10-24 22:27:08 +02:00
~~~
[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;
2018-11-13 14:53:47 +01:00
#listen 0.0.0.0:443 ssl http2;
#listen [::]:443 ssl http2;
2018-10-24 22:27:08 +02:00
2018-11-13 14:53:47 +01:00
server_name gitea.example.org;
2018-10-24 22:27:08 +02:00
2018-11-13 14:53:47 +01:00
#include /etc/nginx/letsencrypt.conf;
#include /etc/nginx/ssl/git.conf;
2018-10-24 22:27:08 +02:00
2018-11-13 14:53:47 +01:00
#if ( $scheme = http ) {
# return 301 https://$server_name$request_uri;
#}
2018-10-24 22:27:08 +02:00
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
2018-11-11 20:01:19 +01:00
On peut utiliser Redis comme support pour les sessions et le cache de Gitea.
2018-10-24 22:27:08 +02:00
2018-11-05 12:27:46 +01:00
#### Cache
~~~
# cat /etc/gitea/git.ini
[cache]
ADAPTER = redis
HOST = network=tcp,addr=127.0.0.1:6379,password=PASSWORD,db=1,pool_size=100,idle_timeout=180
~~~
#### Sessions
~~~
# cat /etc/gitea/git.ini
[session]
PROVIDER = redis
PROVIDER_CONFIG = network=tcp,addr=127.0.0.1:6379,password=PASSWORD,db=0,pool_size=100,idle_timeout=180
~~~
2018-10-24 22:27:08 +02:00
2018-11-13 14:53:47 +01:00
### HTTPS
Après avoir activé le HTTPS sur le vhost nginx faisant office de reverse-proxy, il est utile d'ajuster quelques paramètres de configuration.
* Mettre à jour le `ROOT_URL` pour remplacer `http://gitea.example.org` par `https://gitea.example.org`
* Ajouter `COOKIE_SECURE = true` dans la section `[session]`
* (Optionnel) Rajouter le préfixe `__Secure-` au nom des cookies. Il s'agit des paramètres `COOKIE_NAME` dans la section `[session]` ainsi que `COOKIE_USERNAME` et `COOKIE_REMEMBER_NAME` dans la section `[security]`
2018-10-24 22:27:08 +02:00
## Avancé
### Multiples instances
2018-11-13 14:53:47 +01:00
La simplicité de gitea permet d'heberger plusieurs instances sur une même machine.
Comme pour la première instance, il a besoin de :
* D'un nouveau compte unix spécifique
* (Si MySQL) D'un nouveau compte avec une base associée.
On peut ainsi basculer sur une unité systemd avec paramètre comme celle donnée en exemple.
Ainsi, les instances seront manipulées avec `systemctl (start|restart|stop) gitea@INSTANCE`_INSTANCE_ se trouve être le nom de compte dédié à l'instance gitea
2018-10-24 22:27:08 +02:00
~~~
# 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
~~~
2018-11-13 14:53:47 +01:00
2018-11-13 11:28:55 +01:00
## FAQ / Plomberie
### Erreur d'enregistrement avec SHOW_REGISTRATION_BUTTON = false
A l'heure actuelle (Nov. 2018) il n'est pas possible de laisser les inscriptions actives (`DISABLE_REGISTRATION = false`) tout en masquant le lien d'inscription (`SHOW_REGISTRATION_BUTTON = false`).
Le formulaire d'inscription sera bien accessible. Mais quand on le valide, une erreur 403 est retournée.
C'est un [bug connu](https://github.com/go-gitea/gitea/issues/5183) par les développeurs de Gitea.
2018-11-13 11:33:24 +01:00
### La page d'accueil d'un projet ne se met pas à jour après le premier push
2018-11-13 14:53:47 +01:00
Il faut s'assurer que la partition qui contient le dossier des dépôts gits ne soit **pas** en `noexec`
2019-04-03 10:19:18 +02:00
### Impossible de visionner le diff d'un gros commit
> File diff suppressed because it is too large.
L'astuce consiste à mettre dans le fichier de configuration :
```
[git]
MAX_GIT_DIFF_LINES = 1000000
```
Augmenter à la valeur de votre choix.
### Chercher tous les accès d'un compte
```
# mysql
MariaDB [(none)]> use git
MariaDB [git]> select repository.name, user.name, access.mode from access INNER JOIN user ON user.id = access.user_id INNER JOIN repository ON repository.id = access.repo_id WHERE user.name like '%USER%' \G
*************************** 1. row ***************************
name: REPO
name: USER
mode: 2
1 row in set (0.00 sec)
```