Git est un système de contrôle de version gratuit et open-source qui peut être utilisé pour suivre les modifications de code. Git vous permet de créer de nombreux référentiels pour la même application et de coordonner le travail sur ces fichiers entre plusieurs personnes. Il est principalement utilisé pour la gestion du code source dans le développement de logiciels.
Dans cet article, nous allons apprendre à installer un serveur HTTP Git avec Nginx sur Ubuntu 16.04.
Exigences
- Nouveau serveur Ubuntu 16.04 installé sur votre système.
- Utilisateur Sudo avec privilèges root.
- Adresse IP statique 192.168.15.189 configurée sur votre serveur
1 Mise en route
Avant de commencer, vous devrez mettre à jour votre système avec la dernière version stable.
Vous pouvez le faire en exécutant la commande suivante :
sudo apt-get update -y
sudo apt-get upgrade -y
Une fois votre système mis à jour, redémarrez votre système et connectez-vous avec l'utilisateur sudo.
2 Installer les packages requis
Tout d'abord, vous devrez installer certains packages requis, notamment nginx, git, nano et fcgiwrap sur votre système. Vous pouvez tous les installer en exécutant la commande suivante :
sudo apt-get install nginx git nano fcgiwrap apache2-utils -y
Une fois tous les packages requis installés, vous devrez créer un répertoire pour le référentiel Git. Vous pouvez le faire en exécutant la commande suivante :
sudo mkdir /var/www/html/git
Ensuite, donnez l'autorisation appropriée au répertoire Git :
sudo chown -R www-data:www-data /var/www/html/git
Une fois que vous avez terminé, vous pouvez procéder à la configuration du serveur Web Nginx.
3 Configurer Nginx
Tout d'abord, vous devrez configurer Nginx pour transmettre le trafic Git à Git. Vous pouvez le faire en modifiant le fichier de configuration par défaut de Nginx :
sudo nano /etc/nginx/sites-available/default
Modifiez le fichier comme indiqué ci-dessous :
# Default server configuration # server { listen 80 default_server; listen [::]:80 default_server; 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 _; 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; # Git pushes can be massive, just to make sure nginx doesn't suddenly cut the connection add this. auth_basic "Git Login"; # Whatever text will do. auth_basic_user_file "/var/www/html/git/htpasswd"; include /etc/nginx/fastcgi_params; # Include the default fastcgi configs fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; # Tells fastcgi to pass the request to the git http backend executable fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param GIT_PROJECT_ROOT /var/www/html/git; # /var/www/git is the location of all of your git repositories. fastcgi_param REMOTE_USER $remote_user; fastcgi_param PATH_INFO $1; # Takes the capture group from our location directive and gives git that. fastcgi_pass unix:/var/run/fcgiwrap.socket; # Pass the request to fastcgi } }
Enregistrez et fermez le fichier lorsque vous avez terminé. Testez ensuite Nginx pour toute erreur de configuration avec la commande suivante :
sudo nginx -t
Si tout va bien, vous devriez voir 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
Ensuite, vous devrez créer un compte utilisateur dont vous aurez besoin pour parcourir ou valider le référentiel. Vous pouvez créer un utilisateur avec le nom hitesh en utilisant l'utilitaire htpasswd :
sudo htpasswd -c /var/www/html/git/htpasswd hitesh
Enfin, redémarrez Nginx pour appliquer toutes les modifications avec la commande suivante :
sudo systemctl restart nginx
Vous pouvez vérifier l'état du serveur Nginx avec la commande suivante :
sudo systemctl status nginx
Vous devriez voir 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 2017-06-20 23:00:11 IST; 51min ago Process: 12415 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS) Process: 7616 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=0/SUCCESS) Process: 12423 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 12419 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 12427 (nginx) CGroup: /system.slice/nginx.service ??????12427 nginx: master process /usr/sbin/nginx -g daemon on; master_process on ??????12431 nginx: worker process Jun 20 23:00:11 localhost systemd[1]: Stopped A high performance web server and a reverse proxy server. Jun 20 23:00:11 localhost systemd[1]: Starting A high performance web server and a reverse proxy server... Jun 20 23:00:11 localhost systemd[1]: nginx.service: Failed to read PID from file /run/nginx.pid: Invalid argument Jun 20 23:00:11 localhost systemd[1]: Started A high performance web server and a reverse proxy server.
4 Créer un référentiel Git
Une fois que tout est correctement configuré, il est temps de créer le référentiel Git.
Vous pouvez créer un référentiel avec le nom repo.git avec la commande suivante :
cd /var/www/html/git
sudo mkdir hitesh.git
sudo cd hitesh.git
sudo git --bare init
sudo git update-server-info
sudo chown -R www-data.www-data .
sudo chmod -R 777 .
Ensuite, vous devrez autoriser le service http via le pare-feu UFW. Par défaut, UFW est désactivé sur votre système, vous devez donc d'abord l'activer. Vous pouvez l'activer avec la commande suivante :
sudo ufw enable
Une fois le pare-feu UFW activé, vous pouvez autoriser le service HTTP en exécutant la commande suivante :
sudo ufw allow http
Vous pouvez maintenant vérifier l'état du pare-feu UFW en exécutant la commande suivante :
sudo ufw status
Ok c'est tout pour la configuration côté serveur. Vous pouvez maintenant passer du côté client pour tester Git.
5 Tester Git sur la machine cliente
Avant de commencer, vous devrez installer git sur le système client. Vous pouvez l'installer avec la commande suivante :
sudo apt-get install git -y
Commencez par créer un dépôt local avec la commande suivante :
sudo mkdir ~/testproject
Ensuite, changez le répertoire en testproject et lancez le nouveau référentiel distant avec la commande suivante :
cd ~/testproject
git init
git remote add origin http://[email protected]/hitesh.git
Ensuite, créez des fichiers et un répertoire avec la commande suivante :
mkdir test1 test2 test3
echo "This is my first repository" > test1/repo1
echo "This is my second repository" > test2/repo2
echo "This is my third repository" > test3/repo3
Ensuite, exécutez la commande suivante pour ajouter tous les fichiers et répertoires au référentiel :
git add .
git commit -a -m "Add files and directoires"
Vous devriez voir le résultat suivant :
[master 002fac9] Add files and directoires 3 files changed, 3 insertions(+) create mode 100644 repo1 create mode 100644 repo2 create mode 100644 repo3
Ensuite, poussez tous les fichiers et répertoires vers le serveur Git avec la commande suivante :
git push origin master
Vous devriez voir le résultat suivant :
Password for 'http://[email protected]': Counting objects: 6, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (5/5), 422 bytes | 0 bytes/s, done. Total 5 (delta 0), reused 0 (delta 0) To http://[email protected]/hitesh.git 68f1270..002fac9 master -> master
Maintenant, tous vos fichiers et répertoires ont été validés sur votre serveur Git.
Votre processus de création de référentiel Git est maintenant terminé. Vous pouvez désormais cloner facilement votre référentiel à l'avenir. Vous pouvez cloner votre référentiel à l'aide de la commande suivante sur le système distant :
git clone [email protected]:/var/www/html/git/hitesh.git
Vous devriez voir le résultat suivant :
Cloning into 'hitesh'... [email protected]'s password: remote: Counting objects: 8, done. remote: Compressing objects: 100% (3/3), done. Receiving objects: 100% (8/8), 598 bytes | 0 bytes/s, done. remote: Total 8 (delta 0), reused 0 (delta 0) Checking connectivity... done.
Maintenant, changez le répertoire vers le dépôt cloné avec la commande suivante :
cd hitesh
tree
Vous devriez voir le résultat suivant :
. |-- test1 | `-- repo1 |-- test2 | `-- repo2 `-- test3 `-- repo3 3 directories, 3 files
Conclusion
J'espère que vous pourrez désormais facilement pousser, extraire, cloner et valider le code source à l'aide du serveur Git. N'hésitez pas à me commenter si vous avez un doute.