Gitea est une application web d'hébergement de code écrite en Go. Comme son nom l'indique, il est conçu pour être utilisé avec le programme de contrôle de source populaire Git, de la même manière que Gitlab et Github. Ce guide vous expliquera l'installation de Gitea sur CentOS 8 avec un reverse proxy Nginx HTTPS.
Exigences
- Un système CentOS 8 sur lequel vous disposez des privilèges root.
- Un nom de domaine enregistré pointant vers votre serveur.
- La variable d'environnement $EDITOR doit être définie sur votre éditeur de texte préféré.
- Accès à un serveur SMTP pour les notifications par e-mail (facultatif).
Assurez-vous que votre (sous-)domaine pointe vers l'adresse IPv4 de votre serveur avec un enregistrement A. Créez éventuellement un enregistrement AAAA pointant vers l'adresse IPv6 de votre serveur.
REMARQUE : Ce guide suppose que SELinux est défini sur désactivé ou permissif.
Étape 1 :Préparation du système
Commencez par installer toutes les mises à jour disponibles et redémarrez :
mise à jour dnf -yreboot
Pour cette configuration, plusieurs composants logiciels sont nécessaires :
- Git, une dépendance de Gitea.
- PostgreSQL, car Gitea nécessite une base de données.
- Nginx, qui sera utilisé comme proxy inverse.
- Sudo, pour exécuter des commandes en tant qu'utilisateur système postgres.
- Wget
- Certbot, un utilitaire permettant d'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.
Installez-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échargez-le :
wget https://dl.eff.org/certbot-auto -O /usr/local/bin/certbot-auto
Assurez-vous que les autorisations correctes sont définies :
chmod 0755 /usr/local/bin/certbot-auto
Exécutez ce qui suit pour installer certbot. Vous serez invité par le gestionnaire de paquets à confirmer l'installation des dépendances, répondez 'y'.
certbot-auto --install-only
Ensuite, créez un utilisateur pour exécuter Gitea :
useradd --system --shell /bin/bash --create-home --home-dir /home/gitea gitea
Créez ensuite la structure de répertoires pour Gitea :
mkdir -p /var/lib/gitea/{data,log} /etc/gitea /run/gitea
Et définissez les propriétaires et les autorisations comme suit :
chown -R gitea:gitea /var/lib/giteachown -R gitea:gitea /var/run/giteachown -R root:gitea /etc/giteachmod -R 750 /var/lib/giteachmod 770 /etc/giteaLes autorisations sur /etc/gitea sont temporaires et seront renforcées après l'exécution du programme d'installation Web.
Activez le trafic vers les ports 80 et 443 de manière permanente :
firewall-cmd --add-port 80/tcp --add-port 443/tcp --permanentfirewall-cmd --reloadL'accès au port 3000 n'est requis que temporairement 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
Initialiser Postgres :
postgresql-setup --initdb --unit postgresqlAssurez-vous qu'il est activé et en cours d'exécution :
systemctl enable --now postgresql.serviceConnectez-vous à Postgres :
sudo -u postgres psqlCréez ensuite un rôle d'utilisateur et une base de données à utiliser par Gitea :
postgres=# CRÉER UN RÔLE gitea CONNEXION MOT DE PASSE CRYPTÉ 'votre_mot de passe';postgres=# CRÉER UNE BASE DE DONNÉES gitea;postgres=# ACCORDER TOUS LES PRIVILÈGES SUR LA BASE DE DONNÉES gitea À gitea;postgres=# \qOuvrez le fichier de configuration de l'authentification du client Postgres :
$EDITOR /var/lib/pgsql/data/pg_hba.confAjoutez la ligne suivante juste après # Connexions locales IPv4 :
# connexions locales IPv4 :hôte gitea gitea 127.0.0.1/32 md5Enregistrez le fichier et redémarrez Postgres :
systemctl redémarre postgresql.serviceÉtape 3 :Installer Gitea
Téléchargez 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/giteaDéfinissez les autorisations correctes sur le binaire téléchargé :
chmod 755 /usr/local/bin/giteaEnsuite, créez un fichier d'unité systemd :
$EDITOR /etc/systemd/system/gitea.serviceEt entrez ce qui suit :
[Unit]Description=Gitea (Git avec une tasse de thé)After=syslog.targetAfter=network.targetRequires=postgresql.service[Service]Type=simpleUser=giteaGroup=giteaWorkingDirectory=/var/lib/gitea/RuntimeDirectory=giteaExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.iniRestart=alwaysEnvironment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea[Install]WantedBy=multi-utilisateur. cibleAssurez-vous que la nouvelle unité est chargée :
rechargement du démon systemctlDemandez ensuite à systemd de démarrer Gitea au démarrage :
systemctl activer gitea.serviceÉtape 4 :Configurer Gitea
Pour la configuration initiale, nous utiliserons le programme d'installation Web inclus. Tout d'abord, démarrez Gitea :
systemctl démarrer gitea.serviceAccédez ensuite à http://votre_domaine:3000/install et renseignez 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 :saisissez le mot de passe que vous avez choisi lors de la création du rôle Postgres.
- Nom de la base de données :gitea
- SSL :Désactiver
- Titre du site :titre de votre choix.
- Chemin racine du référentiel :/var/lib/gitea/data/repositories
- Chemin racine Git LFS :/var/lib/gitea/data/lfs
- Exécuter en tant que nom d'utilisateur :gitea
- Domaine du serveur SSH :votre_domaine
- Port du serveur SSH :22
- Gitea HTTP Listen Post :3000
- URL de base Gitea :https://votre_domaine/
- Chemin du journal :/var/lib/gitea/log
Configurez l'e-mail et les paramètres restants comme bon vous semble, puis cliquez sur "Installer Gitea". Vous serez 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 écouter sur un socket unix au lieu du port TCP par défaut.
Arrêtez Gitea avant de continuer :
systemctl stop gitea.service
Resserrez les autorisations sur /etc/gitea comme indiqué ci-dessous. Cela empêche quiconque ne faisant pas partie du groupe gitea de lire app.ini , qui contient des informations sensibles, y compris les informations d'identification de la base de données.
chmod 750 /etc/giteachown root:gitea /etc/gitea/app.inichmod 640 /etc/gitea/app.ini
Ouvrez son fichier de configuration :
$EDITOR /etc/gitea/app.ini
Supprimez la ligne suivante de la section serveur :
HTTP_PORT =3000
Et ajoutez les lignes suivantes dans la section serveur :
HTTP_ADDR =/run/gitea/gitea.sockPROTOCOL =unixUNIX_SOCKET_PERMISSION =666
Étape 5 :configuration du proxy inverse
Arrêtez Nginx s'il est en cours d'exécution, pour permettre au certbot d'écouter sur le port 80 :
systemctl stop nginx.service
Utilisez la commande suivante pour obtenir un certificat pour votre domaine :
certbot-auto certonly --standalone --agree-tos -m [email protected] -d your_domain
Let's Encrypt vérifiera la propriété du domaine avant d'émettre le certificat. Votre certificat, votre chaîne et votre clé privée seront stockés dans /etc/letsencrypt/live/your_domain/ .
Nous pouvons maintenant configurer Nginx. Créez un nouveau fichier de configuration :
$EDITOR /etc/nginx/conf.d/gitea.conf
Et entrez les blocs de serveur suivants :
serveur { écoute 80 ; écouter [::]:80 ; nom_serveur votre_domaine ; renvoie 301 https://$server_name$request_uri ; access_log /var/log/nginx/gitea-proxy_access.log ; error_log /var/log/nginx/gitea-proxy_error.log;}serveur { écouter 443 ssl; écouter [::]:443 ssl ; nom_serveur votre_domaine ; SSL activé ; certificat_ssl /etc/letsencrypt/live/votre_domaine/fullchain.pem ; clé_certificat_ssl /etc/letsencrypt/live/votre_domaine/privkey.pem ; emplacement / { 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 requêtes HTTP vers HTTPS. Le deuxième bloc écoute les connexions HTTPS et les transmet au socket Unix sur lequel nous avons configuré Gitea pour écouter.
Une fois que vous avez enregistré la configuration ci-dessus, vérifiez les éventuelles erreurs de syntaxe et modifiez votre configuration si nécessaire :
nginx -t
Enfin, lancez Nginx et Gitea :
systemctl démarrer nginx.service gitea.service
Votre instance Gitea devrait maintenant fonctionner correctement. Accédez-y à https://votre_domaine
Étapes facultatives
Configuration de la journalisation
Par défaut, Gitea journalise les messages de niveau de gravité Info et supérieur. Vous voudrez probablement changer cela en Warn ou Error . Pour ce faire, ouvrez /etc/gitea/app.ini et remplacez le paramètre LEVEL dans la section [log] par :trace, debug, info, warn, error, critical, fatal, none. Par exemple, pour consigner les messages de gravité Avertissement et supérieur, utilisez :
[log]MODE =fileLEVEL =warnROOT_PATH =/var/lib/gitea/log
Redémarrez Gitea pour que les modifications prennent effet :
systemctl redémarre gitea.service
Serveur SSH séparé
Gitea peut alternativement utiliser son propre serveur SSH. Pour l'activer, ajoutez la ligne suivante à la section de configuration [serveur] :
START_SSH_SERVER =vrai
Et remplacez le port SSH par n'importe quel nombre supérieur à 1024, par exemple :
SSH_PORT =2222
Redémarrez ensuite Gitea pour appliquer les modifications et activer le trafic vers le port choisi :
firewall-cmd --add-port 2222/tcp --permanentfirewall-cmd --reload