Tutoriel : Comment synchroniser sa copie locale avec son hébergement OVH en utilisant SVN
OVH permet de mettre en place un serveur Subversion sur son hébergement à partir de la formule Pro (il n'y a pas d'accès ssh dans les formules inférieures), c'est très utile si vous voulez avoir une version locale de votre site synchronisée avec votre site.
Voici un petit tutoriel qui explique comment faire tout ça.
Au final, voici ce qu'on veut:
- Une version locale de notre site utilisable pour le développement
- Un serveur SVN sur notre hébergement OVH
- Le dossier www de notre hébergement qui se met à jour automatiquement à chaque commit depuis le dossier local
- Le tout en utilisant une paire de clés RSA pour ne pas avoir à rentrer son mot de passe à chaque connexion au serveur SVN
- Garder l'accès SSH au serveur pour toutes autres commandes de maintenance de notre site
Première étape: Mettre en place une connexion par clés RSA
Cette étape va permettre de s'authentifier en SSH via une clef. Avantage: on pourra se connecter en SSH et donc synchroniser notre dépôt SVN automatiquement sans avoir à rentrer de mot de passe.
Linux
Ouvrez le terminal et tapez la commande :
ssh-keygen -t dsa
Vous arriverez sur :
Enter file in which to save the key (______/.ssh/id_dsa):
Indiquez où vous voulez enregistrer la clé, si vous changez le chemin par défaut il faudra indiquer le nouveau chemin dans la configuration de ssh donc vous avez tout intérêt à garder celui proposé.
Enter passphrase (empty for no passphrase):
Pas de passphrase, ça évitera de l'oublier
Une fois fini, deux fichiers ont été créés :
- La clé privée. Dans notre cas elle a pour nom id_dsa
- La clé publique qui se termine par .pub (pour public... whouaaaa), ici id_dsa.pub
Windows
Installez Putty : http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
Lancez PuTTYGen, générez une paire de clé et sauvegardez les :
[IMAGE]
Deuxième étape: Ajouter notre clé publique sur notre hébergement
Copiez le contenu de votre clé publique:
cat /.ssh/id_dsa.pub
Connectez vous en ssh à votre hébergement avec le terminal (Linux, Mac OS X) ou Putty (Windows):
ssh loginftp@votredomaine
On va ajouter notre clé publique dans le fichier des clés autorisées :
mkdir .ssh chmod 700 .ssh vi .ssh/authorized_keys2
et collez la clé. Vous devriez avoir quelque chose comme ça :
ssh-dss A/.../dFM=
Une fois sauvegardé vous devriez pouvoir vous connecter en SSH sans avoir à rentrer votre mot de passe.
Troisième étape : Créer un dépôt SVN sur notre hébergement OVH
Une fois connecté au serveur:
mkdir svn svnadmin create svn/depot
Si comme moi vous avez déjà tous les fichiers de votre site dans le répertoire www, vous pouvez les importer dans le dépôt avec :
svn import -m "Import Initial" www/ file:////homez.XXX/loginFTP/svn/depot/
Notez bien les trois "/" dans l'url du dépôt
Après avoir importer le répertoire www, il faut transformer ce dossier en répertoire de travail. On renomme notre dossier :
mv www wwwold
Et on le recrée en répertoire de travail
svn checkout file:////homez.XXX/loginFTP/svn/depot/ www
Quatrième étape : Créer notre environnement local
Maintenant qu'on a notre serveur SVN, on peut recréer une version "locale" de notre site en créant un répertoire de travail .
Dans le terminal:
svn checkout svn+ssh://loginFTP@domaine/homez.XXX/loginFTP/svn/depot dossierdedestination
Cette commande va créer un dossier "dossierdedestination" lié à notre dépot
Cinquième étape : Automatiser l'update de notre dossier www
L'ultime étape de tout ça est d'automatiser les updates du dossier www à chaque mise à jour du dépôt. Pour cela nous allons utiliser les hooks ! Un hook permet d'effectuer des actions à un moment donné. Subversion dispose de 9 hooks sur lesquels on peut attacher un script :
- pre-lock
- post-lock
- pre-unlock
- post-unlock
- pre-commit
- post-commit
- pre-revprop-change
- post-revprop-change
- start-commit
Celui qui va nous intéresser est le "post-commit". On va attacher l'action "mettre à jour le dossier www" après chaque commit. Connectez vous en ssh à votre hébergement et allez dans le dossier "hooks" du dépot créé.
ssh loginFTP@domain cd svn/depot/hooks
Ce dossier contient 9 fichiers :
- post-commit.tmpl
- post-revprop-change.tmpl
- pre-commit.tmpl
- pre-revprop-change.tmpl
- start-commit.tmpl
- post-lock.tmpl post-unlock.tmpl
- pre-lock.tmpl
- pre-unlock.tmpl
L'extension ".tmpl" indique qu'ils sont inactifs. Supprimer l'extension pour l'activer :
mv post-commit.tmpl post-commit
Ajoutez les commandes d'update du dossier www
#!/bin/bash # /* */ /usr/bin/svn update "/homez.XXX/loginFTP/www"
Dernière étape, ajoutez les droits d'exécution à notre script :
chmod +x post-commit
Et voilà !!! Normalement tout marche!
Dernière étape : Protéger l'accès aux fichiers svn
Etant donné que notre répertoire www est un répertoire de travail svn, les dossiers cachés ".svn" se retrouvent accessible depuis internet. Un tour sur http://www.votresite.com/.svn permettra de voir leur contenu.
Ces fichiers contiennent des informations importantes telles que les modifications effectuées. Ils permettent donc de retrouver le contenu/code de votre site. Pour interdire l'accès à ces fichiers, on va tout simplement bloquer l'accès à toutes les urls contenant ".svn"
Si vous avez accès à la configuration d'apache, il vous suffit d'ajouter :
<DirectoryMatch .*\.svn/.*> Deny From All </DirectoryMatch>
Sinon, vous pouvez le faire en ajoutant une règle à votre fichier .htaccess :
RewriteRule .*\.svn/.* - [F]
Lien
- http://www.yolinux.com/TUTORIALS/Subversion.html : La liste des commandes Subversion
Commentaires
Svn et site dynamique
Bonjour
vu que les sites passés en prod client ont un backoffice
peut-on faire en sorte de récupérer la version en ligne (www + sql) afin de synchroniser le local et travailler
Une fois les modifications faites, on fait l'inverse ...
Possible ?
erreur apres le post
erreur apres le post commit?!
Une idée
post-commit hook failed (exit code 1) with output:
svn: To better debug SSH connection problems, remove the -q option from 'ssh' in the [tunnels] section of your Subversion configuration file.
svn: Network connection closed unexpectedly
Merci
Tu devrais changer le
Tu devrais changer le 'update' en 'export'.
/usr/bin/svn export "/homez.XXX/loginFTP/www"
Sinon tu donne accès aux fichiers svn.
/.svn
Merci pour l'info, c'est vrai
Merci pour l'info, c'est vrai que je n'y avais pas pensé.
J'ai bloqué l'accès aux fichiers svn plutôt que changer le update en export.
Je préfère car seuls les fichiers modifiés sont mis à jour contrairement au "Export" qui recopie tout.
---- A ajouter dans le ".htaccess":
<IfModule mod_rewrite.c>
(...)
RewriteRule .*\.svn/.* - [F]
</IfModule>
Poster un nouveau commentaire