Comment installer le serveur HTTP Git avec Nginx sur Ubuntu 20.04

Git est un système de gestion des versions gratuit et open-source développé par Linus Torvalds. Il est utilisé par des millions de développeurs dans le monde entier. GitHub propose également un service gratuit d’hébergement de code. Cependant, le service gratuit ne permet pas l’hébergement privé du code. Dans ce cas, tu peux héberger ton propre serveur d’hébergement de code avec le serveur HTTP de Git. Tu auras ainsi un contrôle total sur le serveur.

Dans ce tutoriel, nous allons te montrer comment installer et configurer le serveur Git HTTP avec Nginx sur Ubuntu 20.04.

Conditions préalables

  • Un serveur fonctionnant sous Ubuntu 20.04.
  • Un nom de domaine valide pointé avec l’IP de ton serveur.
  • Un mot de passe root est configuré sur le serveur.

Démarrage

Avant de commencer, il est recommandé de mettre à jour les paquets de ton serveur à la dernière version. Tu peux les mettre à jour avec la commande suivante :

apt-get update -y

Une fois que tous les paquets sont mis à jour, tu peux passer à l’étape suivante.

Installe Nginx et Git

Ensuite, tu devras installer le serveur Web Nginx, Git et les autres paquets nécessaires sur ton système. Tu peux les installer avec la commande suivante :

apt-get install nginx git fcgiwrap apache2-utils unzip -y

Une fois que tous les paquets sont installés, tu peux passer à l’étape suivante.

Crée un référentiel Git

Ensuite, tu devras créer un dépôt Git à l’intérieur du répertoire racine de Nginx web. Tout d’abord, crée un répertoire nommé git avec la commande suivante :

mkdir /var/www/html/git

Ensuite, change le répertoire en git et crée un nouveau répertoire pour le dépôt Git :

cd /var/www/html/git
mkdir gituser.git

Ensuite, change dans ce nouveau répertoire et initialise le dépôt Git avec la commande :

git --bare init

Ensuite, mets à jour le serveur Git avec la commande :

git update-server-info

Ensuite, définis la propriété et la permission sur le répertoire git avec la commande suivante :

chown -R www-data:www-data /var/www/html/git
chmod -R 755 /var/www/html/git

Ensuite, crée un nouvel utilisateur git pour l’authentification avec la commande suivante ;

htpasswd -c /var/www/html/git/htpasswd gituser

Il te sera demandé de définir un mot de passe comme indiqué ci-dessous :

New password: 
Re-type new password: 
Adding password for user gituser

Tu peux maintenant vérifier ton mot de passe à l’aide de la commande suivante :

cat /var/www/html/git/htpasswd

Tu devrais obtenir la sortie suivante :

gituser:$apr1$iPKZDbFB$ziRRbGXzVMMHaPYOtL05m/

Configurer Nginx pour Git

Ensuite, tu devras configurer Nginx pour servir le dépôt Git. Tu peux créer un nouveau fichier de configuration d’hôte virtuel pour Git à l’aide de la commande suivante :

nano /etc/nginx/conf.d/git.conf

Ajoute les lignes suivantes :

server {
        listen 80;

        root /var/www/html/git;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name git.example.com;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

location ~ (/.*) {
    client_max_body_size 0; 
    auth_basic "Git Login"; 
    auth_basic_user_file "/var/www/html/git/htpasswd";
    include /etc/nginx/fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; 
    fastcgi_param GIT_HTTP_EXPORT_ALL "";
    fastcgi_param GIT_PROJECT_ROOT /var/www/html/git;
    fastcgi_param REMOTE_USER $remote_user;
    fastcgi_param PATH_INFO $1; 
    fastcgi_pass  unix:/var/run/fcgiwrap.socket;
}

}

Enregistre et ferme le fichier lorsque tu as terminé. Ensuite, vérifie que Nginx n’a pas d’erreur de syntaxe avec la commande suivante :

nginx -t

Tu devrais obtenir la sortie suivante :

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Ensuite, redémarre le service Nginx pour appliquer les modifications :

systemctl restart nginx

Tu peux aussi vérifier l’état du service Nginx à l’aide de la commande suivante :

systemctl status nginx

Tu devrais obtenir le résultat suivant :

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-11-17 07:43:46 UTC; 4s ago
       Docs: man:nginx(8)
    Process: 3240 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 3256 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 3257 (nginx)
      Tasks: 3 (limit: 4691)
     Memory: 3.5M
     CGroup: /system.slice/nginx.service
             ??3257 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??3258 nginx: worker process
             ??3259 nginx: worker process

Nov 17 07:43:46 ubuntu2004 systemd[1]: Starting A high performance web server and a reverse proxy server...
Nov 17 07:43:46 ubuntu2004 systemd[1]: Started A high performance web server and a reverse proxy server.

Une fois que tu as terminé, tu peux passer à l’étape suivante.

Teste le serveur HTTP Git

À ce stade, le serveur Git est installé et configuré. Maintenant, il est temps de le tester.

Sur la machine cliente, installe le paquet Git avec la commande suivante :

apt-get install git -y

Une fois installé, crée un répertoire nommé myapp avec la commande suivante :

mkdir myapp

Ensuite, passe dans le nouveau répertoire et initialise Git avec la commande suivante :

cd myapp
git init

Ensuite, ajoute ton dépôt Git distant avec la commande suivante :

git remote add origin http://[email protected]/gituser.git

Ensuite, crée les répertoires app1 et app2 et crée aussi les fichiers app1 et app2 avec du contenu dans ces répertoires :

mkdir app1 app2
echo "This is my first application" > app1/app1
echo "This is my first application" > app2/app2

Ensuite, ajoute tous les répertoires et fichiers au référentiel avec la commande suivante :

git add .

Ensuite, valide les changements avec la commande suivante :

git commit -a -m "Add files and directories"

Tu devrais obtenir le résultat suivant :

[master (root-commit) 4e90372] Add files and directories
 2 files changed, 2 insertions(+)
 create mode 100644 app1/app1
 create mode 100644 app2/app2

Ensuite, pousse ces changements vers le serveur Git distant avec la commande suivante :

git push origin master

Il te sera demandé de fournir un mot de passe pour l’utilisateur Git distant comme indiqué ci-dessous :

Password for 'http://[email protected]': 

Indique ton mot de passe et appuie sur Entrée. Tu devrais obtenir le résultat suivant :

Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (5/5), 354 bytes | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)
To http://[email protected]/gituser.git
 * [new branch]      master -> master

La sortie ci-dessus indique que tes fichiers et répertoires sont ajoutés au référentiel Git distant. Si tu veux cloner ce dépôt sur ton système local, exécute la commande suivante :

git clone http://[email protected]/gituser.git

Tu devrais obtenir le résultat suivant :

Cloning into 'gituser'...
Password for 'http://[email protected]': 
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 5 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (5/5), done.
Checking connectivity... done.

Conclusion

Félicitations ! Tu as réussi à installer et à configurer le serveur HTTP Git sur le serveur Ubuntu 20.04. Tu peux maintenant mettre en œuvre le serveur Git dans ton environnement de développement qui est accessible depuis ton réseau local.

Vous aimerez aussi...