Si on n'en a pas encore une, créer une paire de clés avec cette commande :
ssh-keygen -t rsa -b 2048 -C "mon-adresse@email"
Deux fichiers sont créés :
/home/marc/.ssh/id_rsa # clé privée /home/marc/.ssh/id_rsa.pub # clé publique
ssh-copy-id marc@SERVEUR
Entrer le mot de passe de cet utilisateur sur le serveur.
ssh marc@SERVEUR
Normalement l'accès est maintenant autorisé sans entrer de mot de passe.
Sur le serveur, se placer dans le dossier home de l'utilisateur, et initialiser un dépôt vide.
cd /home/marc git init --bare monprojet.git
Dans le dépôt distant, ajouter un script /home/marc/monprojet.git/hooks/post-receive
Quand le dépôt recevra un push, il exécutera ce script pour déplacer les fichiers vers leur destination.
Dans cet exemple, la destination est /var/www/monsite ⇒ ce dossier doit exister et l'utilisateur doit avoir les droits en écriture.
#!/bin/bash TARGET="/var/www/monsite" GIT_DIR="/home/marc/monprojet.git" BRANCH="master" while read oldrev newrev ref do if [[ $ref = refs/heads/$BRANCH ]]; then echo "Ref $ref received. Deploying ${BRANCH} branch to preprod..." git --work-tree=$TARGET --git-dir=$GIT_DIR checkout $BRANCH -f chown www-data:www-data -R $TARGET else echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server." fi done
Rendre ce fichier exécutable :
chmod a+x /home/marc/monprojet.git/hooks/post-receive
Sur la machine de développement, ajouter le serveur de production comme dépôt distant, que l'on va nommer prod :
git remote add prod marc@SERVEUR:/home/marc/monprojet.git
Faire un déploiement vers le dépôt prod :
git push prod master