====== Déploiement avec GIT et SSH ====== ===== Configurer l'accès SSH sur le serveur ===== Source : [[https://medium.com/@stadja/tout-sur-comment-se-connecter-%C3%A0-un-serveur-ssh-sans-mot-de-passe-b2cc5c0a86e1]] ==== Générer une clé SSH ==== 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" * **Chemin de la sauvegarde** : accepter le chemin et le nom du fichier proposés. * **passphrase** : ne pas mettre de passphrase sinon il faudra l'entrer à chaque fois qu'on voudra utiliser cette paire de clés. Deux fichiers sont créés : /home/marc/.ssh/id_rsa # clé privée /home/marc/.ssh/id_rsa.pub # clé publique ==== Envoyer la clé publique sur le serveur ==== ssh-copy-id marc@SERVEUR Entrer le mot de passe de cet utilisateur sur le serveur. ==== Tester la connexion ==== ssh marc@SERVEUR Normalement l'accès est maintenant autorisé sans entrer de mot de passe. ===== Configurer le déploiemement ===== Source: [[https://medium.com/@stadja/comment-d%C3%A9ployer-sur-un-serveur-distant-en-une-commande-git-pas-%C3%A0-pas-bdcf5aaf172d]] ==== Créer le dépôt distant ==== 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 ==== Écrire le script de réception ==== 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 ==== Utiliser le dépôt distant ==== 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 ===== Premier déploiement ===== Faire un déploiement vers le dépôt **prod** : git push prod master