JGachelin.fr

Gitea : service Git auto-hébergeable

Aujourd’hui, présentation et installation de Gitea, une plateforme équivalente aux bien-connus GitHub et BitBucket. C’est un fork de Gogs dont l’interface est très similaire à GitHub. Gogs, c’est un outil open-source conçu en Go, qui se veut facile à installer, léger et multi-plateforme. Il est tout à fait compatible pour un usage sur un Raspberry Pi, par exemple.

La différence entre Gogs et Gitea ? Gogs a un modèle de développement où une seule personne gère le projet, tandis que Gitea, son fork, se veut plus ouvert à la communauté et plus rapide dans le processus de contribution. Pour plus de détails sur les raisons de ce fork, consultez l’article Welcome to Gitea.

Voici un aperçu de l’interface, très proche de GitHub :

Gitea

Installation

L’installation présentée ci-dessous se fait sur un VPS avec Debian 8 chez OVH, le même qui héberge le site que vous lisez actuellement et qui a fait l’objet d’une série d’article également. Pour commencer, si ce n’est pas déjà fait, il est nécessaire d’installer Git :

sudo apt install git

Je vais créer ensuite un utilisateur spécifique (« gitea ») qui n’aura pas le droit de se loguer et qui sera spécifique à notre installation. L’option gecos permet de se passer du formulaire sur les informations propres à l’utilisateur :

sudo adduser --disabled-login --gecos 'gitea' gitea

Il faut ensuite changer d’utilisateur, télécharger Gitea puis le rendre exécutable. Pour trouver la dernière version de Gitea, rendez-vous sur la page des téléchargements.

sudo su - gitea
wget -O gitea https://dl.gitea.io/gitea/1.3.1/gitea-1.3.1-linux-amd64
chmod +x gitea

Je met en place la configuration Nginx suivante. En sachant qu’avant de lancer la commande certbot (pour le certificat SSL Let’s Encrypt) je commente le return 301 dans la zone HTTP ainsi que les deux lignes vers les clés du certificat puisqu’elles n’existent pas encore, donc Nginx râle. J’ai également rajouté un enregistrement DNS dans le Manager OVH vers le domaine git.jgachelin.fr.

# HTTP / git.jgachelin.fr
server {
        listen 80;
        listen [::]:80;
        server_name git.jgachelin.fr;
        root /home/gitea;
        index index.html;

        location /.well-known/acme-challenge {
                root /home/gitea;
        }

        location / {
                return 301 https://git.jgachelin.fr$request_uri;
        }
}

# HTTPS / git.jgachelin.fr
server {
        # Configuration générale
        listen 443 ssl http2; #IPv4
        listen [::]:443 ssl http2; # IPv6
        server_name git.jgachelin.fr;

        # Configuration SSL
        ssl_protocols TLSv1.2;
        ssl_certificate /etc/letsencrypt/live/git.jgachelin.fr/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/git.jgachelin.fr/privkey.pem;
        ssl_ecdh_curve secp384r1;
        ssl_ciphers EECDH+AESGCM:EECDH+CHACHA20:EECDH+AES;
        ssl_prefer_server_ciphers on;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 5m;
        ssl_session_tickets on;

        location / {
                proxy_pass                              http://127.0.0.1:3000;
                proxy_set_header Host                   $host;
                proxy_set_header X-Real-IP              $remote_addr;
                proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;

                # Pour autoriser l'upload de gros repository
                client_max_body_size 100M;
        }

        location ~ /.well-known {
                allow all;
                root /home/gitea;
        }

        # HTHS
        add_header Strict-Transport-Security "max-age=15552000; includeSubdomains; preload";
}

Les commandes utilisées :

Créer le lien symbolique en étant dans /etc/nginx/sites-enabled/ :

ln -s /etc/nginx/sites-available/ssl-git.jgachelin.fr.conf ssl-git.jgachelin.fr.conf

Obtenir le certificat :

sudo certbot certonly -a webroot --webroot-path=/home/gitea/ -d git.jgachelin.fr --rsa-key-size 4096

Tester la configuration de Nginx :

sudo nginx -t

Recharger la configuration de Nginx :

sudo systemctl reload nginx

Lancer Gitea pour tester que cela fonctionne, avec l’utilisateur gitea :

./gitea web

Ensuite, il a suffit de se rendre sur l’adresse git.jgachelin.fr pour compléter très simplement l’installation et Gitea est prêt à l’emploi !

Cependant, toute la configuration n’est pas terminée. En effet, il faudrait pouvoir démarrer Gitea en tant que service car le lancement du binaire ce n’est pas absolument pas pratique. C’est ce que nous allons faire !

Création du fichier de configuration du service :

sudo nano /etc/systemd/system/gitea.service

On y place le contenu ci-dessous : il faut retirer les commentaires selon l’installation (MySQL/PostgreSQL qui doivent démarrer avant de lancer Gitea si vous n’utilisez pas SQLite3). Changer éventuellement le nom d’utilisateur et le groupe si vous utilisez autre chose, le répertoire du service ainsi que le chemin vers l’exécutable ainsi que la ligne pour l’environnement.

[Unit]
Description=Gitea
After=syslog.target
After=network.target
#After=mysql.service
#After=postgresql.service
#After=memcached.service
#After=redis.service

[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
LimitMEMLOCK=infinity
LimitNOFILE=65535
Type=simple
User=gitea
Group=gitea
WorkingDirectory=/home/gitea
ExecStart=/home/gitea/gitea web
Restart=always
Environment=USER=gitea HOME=/home/gitea

[Install]
WantedBy=multi-user.target

Ensuite c’est très simple, on démarre le service et on indique qu’on veut qu’il soit aussi lancé au démarrage :

sudo systemctl start gitea
sudo systemctl enable gitea

Voilà, c’est terminé !

Mettre à jour Gitea

Comme chaque outil déployé, il est indispensable de rester informé des mises à jours et de les appliquer : elles apportent de nouvelles fonctionnalités, corrigent les bugs et surtout elles peuvent corriger des failles de sécurité. Pour cela, s’abonner au flux RSS du blog de Gitea ou bien à sa page Twitter est une bonne méthode pour rester informé.

Gitea est un projet actif, il y a eu 7 versions entre le 12 octobre 2017 (1.2.0) et le 14 décembre 2017 (1.3.2). Heureusement, la mise à jour est vraiment ce qu’il y a de plus simple !

1) Stopper le service

sudo systemctl stop gitea

2) Changer d’utilisateur pour « gitea »

sudo su - gitea

3) Supprimer le binaire

rm gitea

4) Télécharger le nouveau binaire (adaptez l’URL)

wget -O gitea https://dl.gitea.io/gitea/1.3.2/gitea-1.3.2-linux-amd64

5) Le rendre exécutable

chmod +x gitea

4) Revenir sur votre compte utilisateur et lancer Gitea :

exit
sudo systemctl start gitea

C’est terminé !

2 réponses à “Gitea : service Git auto-hébergeable”

  1. Fred dit :

    Sinon, Gitlab a une image docker; c’est beaucoup plus simple a mettre en place.

    • jgachelin dit :

      Ce n’est pas la difficulté qui domine ici. Je ne suis pas un spécialiste de Docker, mais cette méthode ne dispense pas de mettre en place un certificat SSL ni la configuration de Nginx non ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *