Git est un système de contrôle de version open source utilisé par des milliers de développeurs à travers le monde. Il est utilisé pour garder une trace de vos modifications logicielles au niveau de la source. Il vous permet de suivre les modifications, de revenir aux étapes précédentes et de créer une version alternative des fichiers et des répertoires.
HTTP Git Server est un projet open source qui utilise un serveur Web Nginx pour servir les référentiels Git sur votre réseau local (LAN). Il est très simple et facile à mettre en place. N'importe qui peut le gérer à partir de l'interface de ligne de commande.
Dans ce tutoriel, je vais vous expliquer comment configurer un serveur de référentiel HTTP Git avec Nginx sur Debian 11.
Prérequis
- Un serveur exécutant Debian 11.
- Un nom de domaine valide pointé vers l'adresse IP de votre serveur.
- Un mot de passe root est configuré sur votre serveur.
Installer Nginx et autres dépendances
Tout d'abord, vous devrez installer le serveur Web Nginx et les autres packages requis pour configurer un serveur HTTP Git. Vous pouvez tous les installer à l'aide de la commande suivante :
apt-get install nginx git fcgiwrap apache2-utils unzip -y
Une fois tous les packages installés, vous pouvez passer à l'étape suivante.
Créer un référentiel Git
Ensuite, vous devrez créer un répertoire pour stocker le référentiel Git. Créons un répertoire appelé myrepo dans le répertoire racine Web de Nginx :
mkdir /var/www/html/myrepo
Ensuite, changez le répertoire en myrepo et créez un autre répertoire pour les utilisateurs :
cd /var/www/html/myrepo
mkdir user1.git
Ensuite, accédez au répertoire de l'utilisateur et initialisez le référentiel Git à l'aide de la commande suivante :
cd user1.git
git --bare init
Vous obtiendrez le résultat suivant :
Initialized empty Git repository in /var/www/html/myrepo/user1.git/
Ensuite, mettez à jour les informations du serveur Git avec la commande suivante :
git update-server-info
Ensuite, changez le propriétaire de myrepo et définissez l'autorisation appropriée avec la commande suivante :
chown -R www-data:www-data /var/www/html/myrepo
chmod -R 755 /var/www/html/myrepo
Ensuite, créez un utilisateur appelé user1 et définissez un mot de passe :
htpasswd -c /var/www/html/myrepo/htpasswd user1
Vous pouvez définir le mot de passe comme indiqué ci-dessous :
New password: Re-type new password: Adding password for user user1
Vous pouvez vérifier votre mot de passe à l'aide de la commande suivante :
cat /var/www/html/myrepo/htpasswd
Exemple de sortie :
user1:$apr1$LoyCEkzA$Fjq5nBbLhBRdaxCQBBUQd1
Configurer Nginx pour servir le référentiel Git
Ensuite, vous devrez créer un fichier de configuration d'hôte virtuel Nginx pour servir le référentiel Git.
nano /etc/nginx/conf.d/git.conf
Ajoutez les lignes suivantes :
server { listen 80; root /var/www/html/myrepo; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name git.yourdomain.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/myrepo/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/myrepo; fastcgi_param REMOTE_USER $remote_user; fastcgi_param PATH_INFO $1; fastcgi_pass unix:/var/run/fcgiwrap.socket; } }
Enregistrez et fermez le fichier lorsque vous avez terminé, puis vérifiez le Nginx pour toute erreur de syntaxe :
nginx -t
Vous obtiendrez le résultat suivant :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Enfin, redémarrez le service Nginx pour appliquer les modifications :
systemctl restart nginx
Vous pouvez également vérifier l'état de Nginx à l'aide de la commande suivante :
systemctl status nginx
Vous obtiendrez 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 Sat 2021-12-11 08:00:04 UTC; 2s ago Docs: man:nginx(8) Process: 144985 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 144986 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 144987 (nginx) Tasks: 2 (limit: 2341) Memory: 2.5M CPU: 42ms CGroup: /system.slice/nginx.service ??144987 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ??144988 nginx: worker process Dec 11 08:00:04 debian11 systemd[1]: Starting A high performance web server and a reverse proxy server... Dec 11 08:00:04 debian11 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument Dec 11 08:00:04 debian11 systemd[1]: Started A high performance web server and a reverse proxy server.
Se connecter au référentiel Git depuis le client
À ce stade, le serveur HTTP Git est configuré avec Nginx. Il est maintenant temps de le connecter à partir de la machine cliente et de le tester.
Commencez par installer le package Git sur la machine cliente à l'aide de la commande suivante :
apt-get install git -y
Ensuite, créez un répertoire pour votre projet avec la commande suivante :
mkdir project
Ensuite, accédez au répertoire de votre projet et initialisez Git à l'aide de la commande ci-dessous :
cd project
git init
Ensuite, configurez Git en utilisant votre adresse e-mail et votre nom d'utilisateur :
git config --global user.email "[email protected]"
git config --global user.name "user1"
Ensuite, ajoutez votre serveur HTTP Git à l'aide de la commande suivante :
git remote add origin http://[email protected]/user1.git
Créez ensuite un répertoire appelé dev01 et ajoutez-y un fichier :
mkdir dev01
echo "This is my first application" > dev01/file1
Ensuite, ajoutez votre répertoire et votre fichier créés au dépôt Git :
git add .
Ensuite, validez les modifications avec la commande suivante :
git commit -a -m "Add files and directories"
Vous obtiendrez le résultat suivant :
[master (root-commit) 0299d83] Add files and directories 1 file changed, 1 insertion(+) create mode 100644 dev01/file1
Ensuite, téléchargez votre fichier et votre répertoire sur le serveur HTTP Git à l'aide de la commande suivante :
git push origin master
Il vous sera demandé de fournir votre mot de passe pour accéder au serveur Git :
Password for 'http://[email protected]':
Une fois connecté, vous obtiendrez le résultat suivant :
Counting objects: 4, done. Writing objects: 100% (4/4), 281 bytes | 281.00 KiB/s, done. Total 4 (delta 0), reused 0 (delta 0) To http://git.yourdomain.com/user1.git * [new branch] master -> master
Vous pouvez également télécharger votre référentiel depuis le serveur Git directement à l'aide de la commande suivante :
git clone http://[email protected]domain.com/user1.git
Vous obtiendrez le résultat suivant :
Cloning into 'user1'... Password for 'http://[email protected]': remote: Enumerating objects: 4, done. remote: Counting objects: 100% (4/4), done. remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (4/4), done.
Conclusion
Dans le guide ci-dessus, vous avez appris à configurer un serveur HTTP Git avec Nginx sur Debian 11. Vous pouvez maintenant implémenter cette configuration dans votre environnement de développement local et gérer et suivre votre projet à l'aide de la ligne de commande.