Assez parlé, passons maintenant à du concret !
Prérequis
Création d'une machine virtuelle à l'aide de Vagrant
En ouvrant un terminal dans le dossier ou vous souhaitez créer votre Machine virtuelle, tapez
la
commande suivante :
vagrant init hashicorp/precise64
Ouvrez maintenant le fichier Vagrantfile généré et ajoutez les lignes suivantes :
config.vm.network "private_network", ip: "192.168.33.10"
# Ajouter les lignes ci-dessous afin d'installer Apache2
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get update
sudo apt-get install -y apache2
# Ajout de l’installation de git
apt-get install git
SHELL
Il vous suffit maintenant de lancer la vm en utilisant la commande suivante toujours dans
votre terminal :
vagrant up
En effectuant cette commande, vagrant va télécharger les dépendances et lancer la VM avec les
paramètres que vous aurez définis.
Normalement, vous devriez pouvoir afficher la page de base de apache2 en allant sur l'url
suivante dans votre navigateur (l'ip que vous aurez configuré dans le fichier Vagrantfile) :
http://192.168.33.10/.
A partir de maintenant, vous pourrez vous connecter à votre machine virtuelle en effectuant
la commande suivante :
vagrant ssh
Créer un projet sur Github et le récupérer en local
Pour cette étape, il va vous falloir créer un repository sur Github ou encore Bitbucket.
Personnellement
j'ai choisi de mettre mon projet sur Github.
Une fois votre projet créé, il va vous falloir le récupérer sur votre ordinateur, en local.
Pour cela, rien de plus simple grâce à la commande suivante à l'aide de git bash :
git clone
[email protected]:jacquelotjeff/tuto-git.git
Pour effectuer cette commande, vous devrez avoir enregistrer votre clé publique sur Bitbucket
ou Github pour avoir les droits (cf:
Génération
des clés publiques en SSH.
Retour à notre machine virtuelle
Le but maintenant est de "configurer" votre serveur afin de réceptionner les données
lorsqu'on effectuera un push dessus.
Toujours en ligne de commande en ayant effectué le vagrant ssh :
Déplacez vous dans le dossier /var/ en effectuant la commande suivante :
cd /var/
Nous allons maintenant créer un dossier project (en sudo) qui contiendra les données du dépôt
et nos fameux hooks.
sudo mkdir project
Comme il n'est pas bon d'intéragir avec l'utilisateur root sur son serveur en terme de
sécurité, nous allons changer les droits des dossiers "www" et "projects" afin que notre
utilisateur "vagrant" soit le propriétaire.
sudo chown -R vagrant:vagrant www/ project/
Une fois cela fait, nous allons nous mettre dans le dossier project.
Profitez-en aussi
pour supprimer le fichier index.html se trouvant dans le dossier www qui ne sert maintenant
plus à rien.
Maintenant, nous allons pouvoir initlialiser le dépôt à l'aide de la commande suivante (ne
pas oublier le "--bare") :

On remarque que notre dépôt s'est bien initialisé en créant un dossier.
Il faut maintenant se déplacer dans le dossier créé (ici
[email protected]:jacquelotjeff/tuto-git.git/) afin de trouver notre fameux dossier "hooks" ;)
Dans ce dossier se trouve déjà une multitude d'exemples de hooks.
Nous allons ici créer notre propre hook en créant un nouveau fichier post-receive.
nano post-receive
# Mettez le contenu ci-dessous à l'intérieur du fichier post-receive :
GIT_WORK_TREE=/var/www/ git checkout -f master;
Nous indiquons ici à git le chemin où insérer nos sources après réception (var/www/), puis
nous forçons Git à se mettre sur la branche master.
Une fois cela fait, nous pouvons sauvegarder le fichier. Il nous faut maintenant rendre
exécutable le fichier et exporter la variable GIT_WORK_TREE :
chmod 775 post-receive
export GIT_WORK_TREE
Autoriser le serveur à réceptionner nos sources
Afin de pouvoir pousser nos sources sur notre serveur, il nous faut valider celui-ci sur
notre dépôt git.
Pour cela, nous devons récupérer notre clé dans le fichier "authorized_keys" sur le
serveur.
cat /home/vagrant/.ssh/authorized_keys

Il vous faudra copier cette clé et l'ajouter dans les clés de déploiements sur votre dépôt
git.
Mise à jour de notre dépôt et publication de nos données sur le serveur
Nous allons créer par exemple un fichier index.php qui contiendra notre page d'accueil.
Il nous reste plus qu'à enfin publier nos modifications directement sur notre beau
serveur virtuel.
Nous pouvons maintenant ajouter notre fichier index.php et le commiter.
git add index.php && git commit -m "New index file" index.php
Il nous faut maintenant ajouter notre serveur dans la liste des remotes de git :
git remote add production
[email protected]:/var/project/[email protected]\:jacquelotjeff/tuto-git.git
# Maintenant on pousse les modifications sur le serveur
git push -u production master
Il vous faut dire "yes" pour valider la connexion au serveur. Si un mot de passe vous est
demandé, entrez "vagrant" et le tour est joué ;)
Si nous allons faire un tour du côté de notre serveur, nous voyons bien notre fichier
index.php que nous avons mis en production :

Ce qui est important de comprendre ici, c'est qu'en poussant les modifications sur le
serveur, nous nous retrouvons seulement avec les sources du projet dans notre dossier
www
et nous n'avons pas accès à notre dossier .git qui contient toutes les données sur notre
dépôt.
Vous venez de mettre en production votre site à l'aide de git, et bonne nouvelle vous n'aurez
plus besoin de vous connecter sur votre serveur en ssh pour le faire !
Bien entendu, vous pouvez faire énormément de choses grâce aux hooks de git, notamment
définir des droits sur certains dossiers (cache, logs ...), supprimer le cache, mettre à
jour le fichier de configuration etc.
Maintenant c'est à vous de jouer ;)