[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
Pour maintenir un [miroir sur une instance de Gitlab](https://docs.gitea.io/en-us/repo-mirror/#setting-up-a-push-mirror-from-gitea-to-gitlab), les quelques étapes suivantes suffisent.
1. Créer un [jeton d’accès personnel](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#create-a-personal-access-token) **sur Gitlab** avec portée («scope») `write_repository`.
* Sélectionner l’avatar en haut à droite.
* Sélectionner «Modifier le profil» («Editprofile»).
* Dans la barre de gauche, sélectionner «Jetons d’accès » («Access Tokens»).
* Saisir un nom et éventuellement un date d’expiration pour le jeton.
* Sélectionner la portée («scope») `write_repository`.
* Cliquer sur «Créer jeton d’accès personnel» («Create personal access token»).
2. Dans les réglages («Settings» en haut à droite) du dépôt sur Gitea, entrer l’URL du dépôt distant («Git Remote Repository URL») dans les réglages du miroir («Mirror Settings»): `https://<hôte_de_destination>/<nom_ou_groupe_gitlab>/<projet_gitlab>.git`.
3. Remplir les champs d’autorisation «Authorization» avec `oauth2` comme nom d’utilisateur («Username») et le jeton d’accès personnel précédent comme mot de passe («Password»).
4. Cliquer sur «Add Push Mirror» pour sauvegarder la configuration.
### 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