Les temps d'arrêt sont peu pratiques pour les utilisateurs et ils doivent actuellement attendre à chaque fois que le moteur d'un site est mis à niveau. De plus, lorsque vous utilisez des scripts standard, le changement de paramètre risque de ne pas fonctionner aussi bien que prévu (même s'ils ont été testés sur un site intermédiaire).
Comment puis-je conserver plusieurs versions d'un site sur un serveur et basculer entre elles sans provoquer de temps d'arrêt (avec un fichier htaccess, par exemple)?
Êtes-vous sur une machine Linux/BSD? Si c'est le cas, vous pouvez facilement utiliser des liens symboliques pour atteindre cet objectif.
Créez la version 1 du site ici:
/var/www/www.example.org.v1
Créer un lien symbolique pointant vers ce répertoire
cd /var/www
ln -s www.example.com.v1 www.example.com
Cela devrait vous donner une liste de répertoires (ls -la
) qui ressemble à ceci:
lrwxr-xr-x 1 userid users 18 Aug 3 03:35 www.example.com -> www.example.com.v1
drwxr-xr-x 2 userid users 512 Aug 3 03:35 www.example.com.v1
Configurez votre serveur Web pour utiliser /var/www/www.example.com
en tant que racine du document. Vous n'aurez jamais à changer cela. Tout re-pointage se fera au niveau du système de fichiers.
Désormais, lorsque vous souhaitez échanger la version 2 du site, il vous suffit de placer la nouvelle version dans:
/var/www/www.example.org.v2
Et mettez à jour le lien symbolique pour qu'il pointe vers cette version:
ln -sfh www.example.com.v2 www.example.com
Ce qui laissera votre sortie de répertoire comme ceci:
lrwxr-xr-x 1 userid users 18 Aug 3 03:43 www.example.com -> www.example.com.v2
drwxr-xr-x 2 userid users 512 Aug 3 03:42 www.example.com.v1
drwxr-xr-x 2 userid users 512 Aug 3 03:41 www.example.com.v2
Comme vous pouvez le constater, le lien symbolique www.example.com renvoie maintenant à la version 2 de votre site. Ceci est une opération atomique et ne devrait pas causer de temps d'arrêt lié à l'indisponibilité des fichiers.
Bien sûr, il reste encore beaucoup de complexité à faire en sorte que les structures de base de données soient mises à jour, que toutes les ressources statiques soient disponibles (et liées à la version appropriée), etc. nouveau site sont disponibles instantanément.
Windows Vista et Server 2008 prennent également en charge les liens symboliques à l'aide de la commande mklink
, bien que je n'ai aucune expérience directe de ces liens.
Vous pouvez utiliser des hôtes virtuels dans Apache pour disposer de 2 versions du code à 2 URL différentes. Un exemple couramment utilisé est:
test.example.com -> /var/www/version1.2
www.example.com -> /var/www/version1.1
les deux sont sur le même serveur, mais peut-être qu'un seul est accessible au monde. Une fois que vous êtes convaincu que test.example.com fonctionne, vous pouvez simplement changer où ils se dirigent dans votre configuration Apache et ... presto. Nouveau site, nouveau code. En supposant qu’il n’y ait pas eu de changement de schéma de base de données, cela devrait fonctionner. Donc, après avoir apporté le changement, ce sera:
test.example.com ->/var/www/newtestversion
www.example.com -> /var/www/version1.2
Voici un exemple de directive de configuration Apache pour un hôte virtuel:
<VirtualHost *:80>
ServerAdmin gabe@localhost
DocumentRoot "/var/www/version1.1"
ServerName test.example.com
</VirtualHost>
Pour plus d'informations sur la procédure à suivre, voir le documentation relative à l'hôte virtuel Apache
Je ne suis pas sûr de savoir comment procéder dans IIS, mais j'imagine qu'il existe également un moyen.
Si quelque chose ne va pas, revenez l'hôte virtuel à l'original et votre ancien site est de retour ... pas de problème. Vous devez redémarrer Apache pour que ces modifications prennent effet, mais c'est généralement une opération très rapide.
Dans IIS, vous pouvez configurer un deuxième répertoire virtuel avec vos mises à jour.
Vous redirigez ensuite toutes les demandes ou remappez les liaisons du deuxième site vers le nom d'hôte souhaité.
Redirection HTTP dans IIS 7: http://technet.Microsoft.com/en-us/library/cc732930 (WS.10) .aspx
Ce que je suggérerais: