Comment installer la plateforme d’hébergement de code Gitea avec HTTPS sur CentOS 8

Gitea est une application Web d’hébergement de code écrite en Go. Comme son nom l’indique, elle est conçue pour être utilisée avec le programme de contrôle de source populaire Git, de la même manière que Gitlab et Github. Ce guide explique l’installation de Gitea sur CentOS 8 avec un reverse proxy HTTPS Nginx.

Exigences

  • Un système CentOS 8 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 sur ton éditeur de texte préféré.
  • Accès à un serveur SMTP pour les notifications par e-mail (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.

REMARQUE : Ce guide suppose que SELinux est réglé sur désactivé ou permissif.

Étape 1 : Préparer le système

Commence par installer toutes les mises à jour disponibles et redémarre :

dnf update -y
reboot

Pour cette installation, plusieurs composants 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.
  • Sudo, pour exécuter des commandes en tant qu’utilisateur système de PostgreSQL .
  • Wget
  • Certbot, un utilitaire pour obtenir des certificats SSL Let’s Encrypt. Certbot sera installé séparément car il n’est pas disponible dans les dépôts de logiciels CentOS.

Installe-les comme suit :

dnf install -y git postgresql postgresql-server nginx sudo wget

Certbot-auto est un script qui gère l’installation de Certbot. Télécharge-le :

wget https://dl.eff.org/certbot-auto -O /usr/local/bin/certbot-auto

Assure-toi que les permissions correctes sont définies :

chmod 0755 /usr/local/bin/certbot-auto

Exécute ce qui suit pour installer certbot. Le gestionnaire de paquets te demandera de confirmer l’installation des dépendances, réponds ‘y’.

certbot-auto --install-only

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

useradd --system --shell /bin/bash --create-home --home-dir /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 /var/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 resserrées après l’exécution du programme d’installation Web.

Active le trafic vers les ports 80 et 443 de façon permanente :

firewall-cmd --add-port 80/tcp --add-port 443/tcp --permanent
firewall-cmd --reload

L’accès au port 3000 n’est que temporairement nécessaire pour la configuration initiale car nous configurerons gitea pour utiliser un socket Unix à la place.

firewall-cmd --add-port 3000/tcp

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

Initialise Postgres :

postgresql-setup --initdb --unit postgresql

Assure-toi qu’il est activé et en cours d’exécution :

systemctl enable --now postgresql.service

Connecte-toi à Postgres :

sudo -u postgres psql

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

postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password';
postgres=# CREATE DATABASE gitea;
postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea;
postgres=# \q

Ouvre le fichier de configuration de l’authentification du client Postgres :

$EDITOR /var/lib/pgsql/data/pg_hba.conf

Ajoute la ligne suivante juste après # Connexions locales IPv4 :

# IPv4 local connections:
host	gitea		gitea		127.0.0.1/32		md5

Sauvegarde le fichier et redémarre Postgres :

systemctl restart postgresql.service

Étape 3 : Installer Gitea

Télécharge la version binaire linux-amd64 de Gitea 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

Définis les permissions correctes sur le binaire téléchargé :

chmod 755 /usr/local/bin/gitea

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

$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 démarrer Gitea au démarrage :

systemctl enable gitea.service

Étape 4 : Configurer Gitea

Pour la configuration initiale, nous utiliserons l’installateur 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 performance, nous allons maintenant configurer Gitea pour écouter 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 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

Supprime la ligne suivante de la section serveur :

HTTP_PORT = 3000

Et ajoute les lignes suivantes dans la section serveur :

HTTP_ADDR        = /run/gitea/gitea.sock
PROTOCOL         = unix
UNIX_SOCKET_PERMISSION = 666

Étape 5 : Configuration du proxy inverse

Arrête Nginx s’il est en cours d’exécution, pour permettre à certbot d’écouter sur le port 80 :

systemctl stop nginx.service

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

certbot-auto 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/ton_domaine/ .

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

$EDITOR /etc/nginx/conf.d/gitea.conf

Et saisis les blocs de serveur suivants :

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 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, vérifie s’il y a des erreurs de syntaxe et modifie ta configuration si nécessaire :

nginx -t

Enfin, démarre Nginx et Gitea :

systemctl start nginx.service gitea.service

Ton instance Gitea devrait maintenant fonctionner avec succès. Accède-la à l’adresse https://your_domain

Étapes facultatives

Configuration de la journalisation

Par défaut, Gitea consigne les messages de niveau de gravité Info et plus. Tu voudras probablement changer cela en Warn ou Error . 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 pour tout numéro supérieur à 1024, par exemple :

SSH_PORT = 2222

Puis redémarre Gitea pour appliquer les modifications et activer le trafic vers le port choisi :

firewall-cmd --add-port 2222/tcp --permanent
firewall-cmd --reload

Vous aimerez aussi...