Git et déploiement sur VPS Installez Git sur VPS HolyCloud, configurez clés SSH vers GitHub/GitLab, clonez un dépôt et automatisez un déploiement simple par hook ou script. ~11 min de lecture Intermédiaire #git #deploiement #github #ci-cd Git et déploiement sur VPS Git permet de versionner votre code et de le déployer sur un VPS Linux HolyCloud par git pull, hook post-receive ou script CI. Ce tutoriel installe Git, configure l'authentification SSH vers GitHub/GitLab, prépare un répertoire de production et décrit un flux de déploiement minimal sans sur-ingénierie. Prérequis VPS HolyCloud Ubuntu/Debian, accès sudo Dépôt distant (GitHub, GitLab, Gitea) avec accès en lecture (deploy key ou compte machine) Utilisateur dédié recommandé (deploy) — voir « Créer un utilisateur sudo » Stack web déjà en place (Apache/Nginx) pointant vers le répertoire cible Conseil : ne clonez jamais en root ; utilisez un utilisateur deploy dont le groupe peut lire/écrire le DocumentRoot avec www-data. Étape 1 : installer Git sudo apt update sudo apt install -y git git --version Configuration identité (commits sur le serveur si besoin) : git config --global user.name "Deploy HolyCloud" git config --global user.email "[email protected]" git config --global init.defaultBranch main Étape 2 : clé SSH dédiée au dépôt (deploy key) En tant qu'utilisateur deploy : sudo -u deploy -i ssh-keygen -t ed25519 -C "deploy@vps-holycloud" -f ~/.ssh/id_ed25519_git -N "" cat ~/.ssh/id_ed25519_git.pub Ajoutez la clé publique sur GitHub : Settings → Deploy keys (lecture seule) ou GitLab : Deploy Keys. Fichier ~/.ssh/config : nano ~/.ssh/config Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519_git IdentitiesOnly yes chmod 600 ~/.ssh/config ~/.ssh/id_ed25519_git ssh -T [email protected] Étape 3 : premier clone en production sudo mkdir -p /var/www/exemple.fr sudo chown deploy:www-data /var/www/exemple.fr sudo chmod 775 /var/www/exemple.fr cd /var/www/exemple.fr git clone [email protected]:organisation/monapp.git . git status git branch -a Branche de production : git checkout main git pull origin main Étape 4 : script de déploiement sudo nano /opt/scripts/deploy-monapp.sh #!/bin/bash set -euo pipefail APP_DIR=/var/www/exemple.fr cd "$APP_DIR" git fetch origin git checkout main git pull --ff-only origin main # Exemple PHP : composer install --no-dev # composer install --no-dev --optimize-autoloader # Exemple Node : npm ci && npm run build sudo systemctl reload apache2 echo "Deploy OK $(date -Is)" >> /var/log/deploy-monapp.log sudo chmod +x /opt/scripts/deploy-monapp.sh sudo chown deploy:deploy /opt/scripts/deploy-monapp.sh Test manuel : sudo -u deploy /opt/scripts/deploy-monapp.sh Étape 5 : dépôt bare + hook post-receive (option push-to-deploy) sudo -u deploy git init --bare /home/deploy/repos/monapp.git nano /home/deploy/repos/monapp.git/hooks/post-receive #!/bin/bash TARGET=/var/www/exemple.fr GIT_DIR=/home/deploy/repos/monapp.git git --work-tree="$TARGET" --git-dir="$GIT_DIR" checkout -f main /opt/scripts/deploy-monapp.sh chmod +x /home/deploy/repos/monapp.git/hooks/post-receive Depuis votre poste de dev (remote « production ») : git remote add production deploy@IP_DU_VPS:/home/deploy/repos/monapp.git git push production main Étape 6 : variables et secrets Ne commitez pas .env en production. Créez-le une fois sur le serveur : sudo -u deploy nano /var/www/exemple.fr/.env sudo chmod 600 /var/www/exemple.fr/.env Liste des fichiers ignorés : cat .gitignore Étape 7 : cron ou webhook (aperçu) Pull planifié (simple, moins élégant que le hook) : */30 * * * * deploy /opt/scripts/deploy-monapp.sh >> /var/log/deploy-monapp.log 2>&1 Pour GitHub Actions, déclenchez ssh deploy@IP /opt/scripts/deploy-monapp.sh avec une clé dédiée — limitez la commande dans authorized_keys. Vérification cd /var/www/exemple.fr && git log -1 --oneline git remote -v ls -la tail -5 /var/log/deploy-monapp.log curl -I http://127.0.0.1/ La version déployée correspond au dernier commit attendu sur main. Besoin d'aide HolyCloud Permission denied (publickey) : mauvaise deploy key ou IdentitiesOnly dubious ownership : git config --global --add safe.directory /var/www/exemple.fr Conflits au pull : évitez les commits sur le serveur ; utilisez --ff-only Support HolyCloud : utilisateur deploy, sortie git pull, logs hook post-receive Suite de la lecture Article précédent Durcissement kernel (sysctl) Lire Article suivant Gérer l'espace disque (df, du, ncdu) Lire