Comment installer la plateforme d’hébergement de code Gitea avec HTTPS sur Debian 10

Gitea est une application Web d’hébergement de code écrite en Go et bifurquée de Gogs. Comme son nom l’indique, elle est conçue pour être utilisée avec le programme de contrôle de source populaire Git, de manière similaire à Gitlab et Github. Ce guide explique comment installer Gitea sur Debian 10 derrière un reverse proxy HTTPS (Nginx).

Conditions requises

  • Un système Debian 10 sur lequel tu as les privilèges root.
  • Un nom de domaine enregistré pointant vers ton serveur.
  • La variable d’environnement $EDITOR doit être définie.
  • Accès à un serveur SMTP pour les notifications par courriel (facultatif).

Assure-toi que ton (sous-)domaine pointe vers l’adresse IPv4 de ton serveur avec un enregistrement A. En option, crée un enregistrement AAAA pointant vers l’adresse IPv6 de ton serveur.

Étape 1 : Préparer le système

Commence par mettre à jour ton index de paquets et installe toutes les mises à jour disponibles :

apt update
apt upgrade -y
reboot

Pour cette configuration, plusieurs paquets logiciels sont nécessaires :

  • Git, une dépendance de Gitea.
  • PostgreSQL, car Gitea a besoin d’une base de données.
  • Nginx, qui sera utilisé comme proxy inverse.
  • Certbot, un utilitaire pour obtenir des certificats SSL Let’s Encrypt.
  • Sudo, pour exécuter des commandes en tant qu’utilisateur système de PostgreSQL.

Installe-les comme suit :

apt install -y git nginx certbot postgresql sudo

Ensuite, crée un utilisateur pour exécuter Gitea :

adduser --system --disabled-password --group --shell /bin/bash --home /home/gitea gitea

Puis crée la structure du répertoire pour Gitea :

mkdir -p /var/lib/gitea/{data,log} /etc/gitea /run/gitea

Et définis les propriétaires et les permissions comme suit :

chown -R gitea:gitea /var/lib/gitea
chown -R gitea:gitea /run/gitea
chown -R root:gitea /etc/gitea
chmod -R 750 /var/lib/gitea
chmod 770 /etc/gitea

Les permissions sur /etc/gitea sont temporaires et seront renforcées après l’exécution du programme d’installation Web.

Étape 2 : Configuration de la base de données

Assure-toi que Postgres est activé et fonctionne :

systemctl enable --now [email protected]

Puis crée un rôle d’utilisateur et une base de données qui seront utilisés par Gitea :

sudo -u postgres psql
postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password';
postgres=# CREATE DATABASE gitea;
postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea;
postgres=# exit;

Étape 3 : Installer Gitea

Télécharge le dernier binairelinux-amd64 depuis la page de téléchargement de Gitea. Par exemple :

wget https://dl.gitea.io/gitea/master/gitea-master-linux-amd64 -O /usr/local/bin/gitea
chmod 755 /usr/local/bin/gitea

Ensuite, crée un fichier d’unité systemd pour Gitea :

$EDITOR /etc/systemd/system/gitea.service

Et entre ce qui suit :

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
Requires=postgresql.service
[Service]
Type=simple
User=gitea
Group=gitea
WorkingDirectory=/var/lib/gitea/
RuntimeDirectory=gitea
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.target

Assure-toi que la nouvelle unité est chargée :

systemctl daemon-reload

Puis demande à systemd de lancer Gitea au démarrage du système :

systemctl enable gitea.service

Étape 4 : Configurer Gitea

Pour la configuration initiale, nous utiliserons le script d’installation Web inclus. Tout d’abord, démarre Gitea :

systemctl start gitea.service

Puis navigue sur http://your_domain:3000/install et remplis les paramètres requis comme suit :

  • Type de base de données : PostgreSQL
  • Hôte : 127.0.0.1:5432
  • Nom d’utilisateur : gitea
  • Mot de passe : Saisis le mot de passe que tu as choisi lors de la création du rôle Postgres.
  • Nom de la base de données : gitea
  • SSL : Désactiver
  • Titre du site : Le titre de ton choix.
  • Chemin racine du référentiel : /var/lib/gitea/data/repositories
  • Chemin racine de Git LFS : /var/lib/gitea/data/lfs
  • Exécuter en tant que nom d’utilisateur : gitea
  • Domaine du serveur SSH : ton_domaine
  • Port du serveur SSH : 22
  • Poste d’écoute HTTP de Gitea : 3000
  • URL de base de Gitea : https://your_domain/
  • Chemin du journal : /var/lib/gitea/log

Configure la messagerie et les autres paramètres comme tu le souhaites, puis clique sur « Installer Gitea ». Tu seras redirigé vers une URL erronée. C’est normal, car nous n’avons pas encore configuré Nginx ou HTTPS. Pour des raisons de performances, nous allons maintenant configurer Gitea pour qu’il écoute sur un socket unix au lieu du port TCP par défaut.

Arrête Gitea avant de poursuivre :

systemctl stop gitea.service

Resserre les permissions sur /etc/gitea comme indiqué ci-dessous. Cela empêche toute personne ne faisant pas partie du groupe gitea de lire le fichier app.ini, qui contient des informations sensibles, notamment les informations d’identification de la base de données.

chmod 750 /etc/gitea
chown root:gitea /etc/gitea/app.ini
chmod 640 /etc/gitea/app.ini

Ouvre son fichier de configuration :

$EDITOR /etc/gitea/app.ini
Remove the following line from the [server] section:
HTTP_PORT = 3000
And add the following lines to the [server] section:
HTTP_ADDR        = /run/gitea/gitea.sock
PROTOCOL         = unix
UNIX_SOCKET_PERMISSION = 666

Étape 5 : Configurer le proxy inverse

Stop Nginx if it is running, as certbot will need to bind to port 80:
systemctl stop nginx.service

Utilise la commande suivante pour obtenir un certificat pour ton domaine :

certbot certonly --standalone --agree-tos -m [email protected] -d your_domain

Let’s Encrypt vérifiera la propriété du domaine avant de délivrer le certificat. Ton certificat, ta chaîne et ta clé privée seront stockés dans /etc/letsencrypt/live/votre_domaine/.

Nous pouvons maintenant configurer Nginx. Crée un nouveau fichier de configuration :

$EDITOR /etc/nginx/sites-available/gitea

Et saisis la configuration suivante :

server {
        listen 80;
        listen [::]:80;
        server_name your_domain;
        return 301 https://$server_name$request_uri;
	access_log /var/log/nginx/gitea-proxy_access.log;
	error_log /var/log/nginx/gitea-proxy_error.log;
}
server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name your_domain;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
        location / {
                proxy_pass http://unix:/var/run/gitea/gitea.sock;
	}
	access_log /var/log/nginx/gitea-proxy_access.log;
	error_log /var/log/nginx/gitea-proxy_error.log;
}

Le premier bloc de serveur sert simplement à rediriger toutes les demandes HTTP vers HTTPS. Le deuxième bloc écoute les connexions HTTPS et les transmet par proxy au socket unix sur lequel nous avons configuré Gitea pour qu’il écoute.

Une fois que tu as enregistré la configuration ci-dessus, exécute ce qui suit pour l’activer :

ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled

Vérifie les éventuelles erreurs de syntaxe avec et modifie ta configuration en conséquence :

nginx -t

Enfin, démarre Nginx et Gitea :

systemctl start nginx.service gitea.service

Ton instance Gitea devrait maintenant fonctionner avec succès. Si tu n’as pas créé de compte administrateur à l’aide du programme d’installation Web initial, le premier utilisateur à s’inscrire se verra attribuer le rôle d’administrateur.

Étapes facultatives

Configuration de la journalisation

Par défaut, Gitea consigne les messages de niveau de gravité Info et supérieur. Tu voudras probablement changer cela en Avertissement ou Erreur. Pour ce faire, ouvre /etc/gitea/app.ini et modifie le paramètre LEVEL de la section [log] en l’un des éléments suivants : trace, debug, info, warn, error, critical, fatal, none. Par exemple, pour consigner les messages de sévérité Warn et supérieure, utilise :

[log]
MODE = file
LEVEL = warn
ROOT_PATH = /var/lib/gitea/log

Redémarre Gitea pour que les changements prennent effet :

systemctl restart gitea.service

Serveur SSH séparé

Gitea peut aussi utiliser son propre serveur SSH. Pour l’activer, ajoute la ligne suivante à la section de configuration [serveur]:

START_SSH_SERVER = true

Et modifie le port SSH à n’importe quel nombre supérieur à 1000, par exemple :

SSH_PORT = 2222

Puis redémarre Gitea pour appliquer les modifications.

Vous aimerez aussi...