[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).
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/>.
> *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.
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.
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 :
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.
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.
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]`
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` où _INSTANCE_ se trouve être le nom de compte dédié à l'instance gitea
### 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.
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