Tutoriel : Comment synchroniser sa copie locale avec son hébergement OVH en utilisant SVN

Tout en gardant son accès ssh...

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 :

  1. pre-lock
  2. post-lock
  3. pre-unlock
  4. post-unlock
  5. pre-commit
  6. post-commit
  7. pre-revprop-change
  8. post-revprop-change
  9. 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 :

  1. post-commit.tmpl
  2. post-revprop-change.tmpl
  3. pre-commit.tmpl
  4. pre-revprop-change.tmpl
  5. start-commit.tmpl
  6. post-lock.tmpl post-unlock.tmpl
  7. pre-lock.tmpl
  8. 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

Commentaires

Portrait de marlin

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 ?

Portrait de Anonyme

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

Portrait de Anonyme

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

Portrait de Florian

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

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plus d'informations sur les options de formatage

Type the characters you see in this picture. (verify using audio)
Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated. Not case sensitive.