📝 Introduction : Dans ce guide complet, nous allons vous accompagner étape par étape pour installer et configurer un serveur GIT centralisé sur une machine Linux. Que vous soyez débutant ou expérimenté, ce tutoriel vous permettra de maîtriser la mise en place d'une infrastructure Git robuste et sécurisée.
⚠️ Checklist de Sécurité :
📦 Paquets Requis
Avant de commencer, assurez-vous d'avoir les droits administrateur :
# Vérifier les droits administrateur $ sudo whoami # Mettre à jour le système $ sudo apt update && sudo apt upgrade -y # Ou pour CentOS/RHEL $ sudo yum update -y
# Installation de Git et outils complémentaires $ sudo apt install git git-core git-daemon-sysvinit gitweb -y # Vérification de l'installation $ git --version git version 2.34.1 # Configuration globale (optionnel) $ git config --global user.name "Administrateur Git" $ git config --global user.email "admin@votre-domaine.com"
# Installation via yum $ sudo yum install git git-core git-daemon gitweb -y # Ou via dnf (CentOS 8+) $ sudo dnf install git git-core git-daemon gitweb -y # Vérification $ git --version
Créer la structure de dossiers pour les dépôts :
# Créer le répertoire principal pour les dépôts $ sudo mkdir -p /srv/git $ sudo chown git:git /srv/git $ sudo chmod 755 /srv/git # Créer un utilisateur dédié pour Git (recommandé) $ sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password git $ sudo usermod -aG git $USER
Cette méthode est idéale pour démarrer un nouveau projet :
Étape 1 : Création du Dépôt Bare
# Se connecter en tant qu'utilisateur git $ sudo su - git # Créer le dépôt bare $ cd /srv/git $ git init --bare mon-projet.git # Vérifier la création (sorti omise pour la concision)
Étape 2 : Configuration des Droits
# Configurer les permissions pour le groupe git $ chmod -R g+rw mon-projet.git $ chmod g+s mon-projet.git/objects # Ou utiliser l'option --shared lors de l'initialisation $ git init --bare --shared=group mon-projet.git
Étape 3 : Test de Connexion
Depuis votre machine client :
# Cloner le dépôt vide $ git clone git@serveur:/srv/git/mon-projet.git $ cd mon-projet # Créer un fichier de test $ echo "# Mon Premier Projet" > README.md $ git add README.md $ git commit -m "Initial commit" $ git push origin main
Pour migrer un projet existant :
Étape 1 : Préparation du Dépôt Local
# Nettoyer le dépôt local $ cd mon-projet-local $ git clean -fd $ git gc --aggressive --prune=now
Étape 2 : Création du Dépôt sur le Serveur
# Sur le serveur $ sudo su - git $ cd /srv/git $ git init --bare --shared=group mon-projet.git
Étape 3 : Migration des Données
Depuis le client :
$ cd mon-projet-local $ git remote add origin git@serveur:/srv/git/mon-projet.git $ git push -u origin --all $ git push -u origin --tags
Pour synchroniser avec un dépôt distant existant :
# Cloner avec toutes les branches et tags $ git clone --mirror https://github.com/user/repo.git $ cd repo.git # Changer l'URL du remote $ git remote set-url --push origin git@serveur:/srv/git/repo.git # Pousser tout le contenu $ git push --mirror
Pour un usage personnel ou une petite équipe :
Configuration SSH de Base
# Édition du fichier SSH config $ sudo nano /etc/ssh/sshd_config # Ajouter/modifier ces lignes : Port 22 PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys X11Forwarding no AllowUsers git # Redémarrer SSH $ sudo systemctl restart sshd
Gestion des Clés SSH
# Créer le répertoire SSH pour l'utilisateur git $ sudo su - git $ mkdir -p ~/.ssh $ chmod 700 ~/.ssh $ touch ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys # Ajouter la clé publique du client $ echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..." >> ~/.ssh/authorized_keys
Pour une équipe de développement :
Structure d'Utilisateurs
# Créer un utilisateur git-shell pour plus de sécurité $ sudo adduser --system --shell /usr/bin/git-shell --gecos 'Git Version Control' --group git # Créer le fichier git-shell-commands $ sudo mkdir -p /home/git/git-shell-commands $ sudo chown git:git /home/git/git-shell-commands $ sudo chmod 755 /home/git/git-shell-commands
Gestion des Accès par Projet
# Créer des groupes par projet $ sudo groupadd projet-a $ sudo groupadd projet-b # Ajouter les utilisateurs aux groupes $ sudo usermod -a -G projet-a dev1 $ sudo usermod -a -G projet-b dev2 # Configurer les permissions des dépôts $ sudo chown -R git:projet-a /srv/git/projet-a.git $ sudo chmod -R 2770 /srv/git/projet-a.git
Script d'Ajout Automatique de Clés
Créer un script pour faciliter l'ajout de clés :
#!/bin/bash # Script : add-git-user.sh if [ $# -ne 2 ]; then echo "Usage: $0 username public_key_file" exit 1 fi USERNAME=$1 KEYFILE=$2 # Ajouter la clé avec un commentaire echo "command=\"cd /srv/git; exec git-shell -c \"\$SSH_ORIGINAL_COMMAND\"\",no-port-forwarding,no-X11-forwarding,no-agent-forwarding $(cat $KEYFILE)" >> /home/git/.ssh/authorized_keys echo "Clé ajoutée pour $USERNAME"
# Installation d'Apache et GitWeb $ sudo apt install apache2 gitweb -y # Configuration de GitWeb $ sudo nano /etc/gitweb.conf # Ajouter/modifier : $projectroot = "/srv/git"; $git_temp = "/tmp"; $projects_list = $projectroot; $site_name = "Git Server";
# Installation de Certbot $ sudo apt install certbot python3-certbot-apache -y # Obtenir un certificat SSL (remplacer le domaine) $ sudo certbot --apache -d git.votre-domaine.com # Configuration automatique du renouvellement $ sudo crontab -e # Ajouter : 0 12 * * * /usr/bin/certbot renew --quiet
# Configuration UFW $ sudo ufw default deny incoming $ sudo ufw default allow outgoing $ sudo ufw allow ssh $ sudo ufw allow 80/tcp $ sudo ufw allow 443/tcp $ sudo ufw --force enable # Ou avec iptables (commandes abrégées) $ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT $ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT $ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT $ sudo iptables -P INPUT DROP
# Installation $ sudo apt install fail2ban -y # Configuration dans /etc/fail2ban/jail.local (extrait) [DEFAULT] bantime = 3600 findtime = 600 maxretry = 3 [sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log # Démarrer le service $ sudo systemctl enable fail2ban $ sudo systemctl start fail2ban
📊 Points de Surveillance :
#!/bin/bash # Script : backup-git.sh BACKUP_DIR="/backup/git" GIT_DIR="/srv/git" DATE=$(date +%Y%m%d_%H%M%S) # Créer le répertoire de sauvegarde mkdir -p $BACKUP_DIR # Sauvegarder tous les dépôts for repo in $GIT_DIR/*.git; do if [ -d "$repo" ]; then repo_name=$(basename "$repo") tar -czf "$BACKUP_DIR/${repo_name}_${DATE}.tar.gz" -C "$GIT_DIR" "$repo_name" fi done # Nettoyer les anciennes sauvegardes (garder 30 jours) find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete echo "Sauvegarde terminée : $DATE"
#!/bin/bash # Script : optimize-git.sh GIT_DIR="/srv/git" for repo in $GIT_DIR/*.git; do if [ -d "$repo" ]; then echo "Optimisation de $(basename $repo)..." cd "$repo" git gc --aggressive --prune=now git repack -Ad git prune fi done
Permission denied
chmod -R 755 /srv/git
Repository not found
git@serveur:/srv/git/mon-projet.git
Push rejected
git pull --rebase
SSH connection timeout
iptables
ufw
# Vérifier l'état de Git Daemon (si utilisé) $ sudo systemctl status git-daemon # Tester la connexion SSH (depuis le client) $ ssh -T git@serveur # Vérifier les logs SSH $ sudo journalctl -u ssh -f $ sudo tail -f /var/log/auth.log # Diagnostiquer un dépôt $ cd /srv/git/mon-projet.git $ git fsck $ git count-objects -vH
Vous disposez maintenant d'un serveur Git robuste, sécurisé et prêt pour la production. Ce guide vous a permis de maîtriser tous les aspects essentiels : de l'installation à la maintenance en passant par la sécurisation.
Prochaines étapes recommandées :
💡 Conseil d'Expert : N'hésitez pas à tester toutes ces configurations dans un environnement de développement avant de les appliquer en production. La pratique régulière et la documentation de vos procédures vous feront gagner un temps précieux.
Découvrez nos actualités, conseils et tutoriels pour rester à jour
Server (alias PBS) vient compléter la so...
Vous pouvez rencontrer cette erreur lors d&rsqu...
Il est toujours pratique de recevoir les alerte...
Les distributions Linux utilisent pour dé...
Inscription en cours...
Restez informé de nos dernières actualités et recevez nos meilleurs conseils !
Chargement du formulaire de devis...