Mise en perspective du principe KISS : Mettre à jour une application web

J’ai décidé de m’interroger sur ma façon de mettre à jour une application web. Il y a eu une réflexion intéressante qui a été publiée par Blogus Librus sur le principe KISS.

Par exemple j’ai l’application web Shaarli dans le dossier /var/www de mon server@home, comment je fais pour la mettre à jour ?

Je vais vous présenter ma progression. Chacun pourra ainsi décider et voir où il se situe : Plutôt côté KISS donc simple ou plutôt côté élégant mais complexe. Je trouve que c’est une bonne mise en perspective du billet de Blogus Librus.

Au commencement

Ainsi donc au commencement pour mettre à jour Shaarli dans /var/www je faisais comme ci-dessous. Ça doit être la méthode employée par la majorité d’entre nous à quelques détails près (cd /tmp, cp remplacé par mv). C’est simple, c’est KISS. En 5 lignes.

cd /tmp && wget https://github.com/shaarli/Shaarli/archive/stable.tar.gz # On se place dans le dossier /tmp puis on télécharge la dernière version stable de Shaarli
tar -xzf *.tar.gz # On se trouve donc dans le dossier /tmp, on extrait le contenu de l'archive. L’intérêt du dossier /tmp est qu'il sera purgé à l'extinction et que vous ne devriez avoir qu'une seule archive .tar.gz dedans simplifiant alors la ligne de commande
cp -R /tmp/Shaarli-stable/* /var/www/shaarli # On copie récursivement le contenu du dossier (extrait de l'archive) dans le dossier shaarli de notre serveur web
chown -R www-data:www-data /var/www/shaarli && chmod -R 755 /var/www/shaarli # On remet les droits comme il faut récursivement avec les commandes chmod et chown
systemctl restart apache2 # On redémarre le service apache2 afin que les modifications soient bien prises en compte

0.1

En 4 lignes. Légère amélioration mais on économise une ligne de commande à saisir. On extrait directement le contenu de l’archive dans /var/www/shaarli (et non pas dans /tmp), voir ici (en Anglais) pour plus d’explications.

cd /tmp && wget https://github.com/shaarli/Shaarli/archive/stable.tar.gz # Pas de changement par rapport à la version précédente
tar -xzf *.tar.gz -C /var/www/shaarli --strip-components=1 # On se trouve dans le dossier /tmp, on extrait directement le contenu de l'archive dans /var/www/shaarli. On gagne une ligne de commande
chown -R www-data:www-data /var/www/shaarli && chmod -R 755 /var/www/shaarli # Pas de changement par rapport à la version précédente
systemctl restart apache2 # Pas de changement par rapport à la version précédente

0.2

Toujours 4 lignes mais on améliore considérablement le processus :
Ligne 1 : On sauvegarde le dossier de notre application web avant de la mettre à jour
Ligne 2 : La dernière version de Shaarli est envoyée sur la sortie standard (par wget), via le pipe | tar reçoit l’archive sur l’entrée standard et extrait directement le contenu dans le dossier /var/www/shaarli. Ainsi on n’a même pas le fichier stable.tar.gz qui apparaît sur le disque dur
Ligne 4 : Tant qu’à redémarrer les services autant ajouter php5-fpm que tout le monde devrait utiliser avec apache2 maintenant

cp -a /var/www/shaarli{,.bak}, on utilise l’option -a qui fait principalement deux choses à savoir une copie récursive et conserver les attributs (permissions) des fichiers. {,.bak} est une manière élégante de faire la même chose que cp -a /var/www/shaarli /var/www/shaarli.bak.

wget -qO -, on utilise wget en mode quiet (silencieux) avec l’option -q. La difficulté se situe sur O -, cela signifie qu’on envoie le fichier vers la sortie standard (d’après le man wget à propos de l’option -O : « If – is used as file, documents will be printed to standard output »).

cp -a /var/www/shaarli{,.bak} # On sauvegarde le dossier de notre application web avant de la mettre à jour, on aura ainsi un dossier /var/www/shaarli.bak pour revenir en arrière en cas de problèmes
wget -qO - https://github.com/shaarli/Shaarli/archive/stable.tar.gz | tar -xzf - -C /var/www/shaarli --strip-components=1 # On télécharge la dernière version stable de Shaarli et on l'extrait directement via un pipe dans le dossier /var/www/shaarli
chown -R www-data:www-data /var/www/shaarli && chmod -R 755 /var/www/shaarli # Pas de changement par rapport à la version précédente
systemctl restart apache2 php5-fpm # On redémarre les services apache2 et php5-fpm afin que les modifications soient bien prises en compte

1.0

On arrive à la méthode élégante mais complexe que j’ai décidé d’utiliser pour mettre à jour une application web.

On a juste modifié tar -xzf - -C /var/www/shaarli --strip-components=1 en tar -xzC /var/www/shaarli --strip-components=1. Pour rappel l’option -f signifie : utilise le fichier d’archive ou le périphérique suivant.

La première manière de faire peut paraître plus complexe mais elle est plus compréhensible. f - signifie que le fichier d’archive à extraire arrive via stdin (flux d’entrée standard). Dans la seconde manière de faire on n’a pas l’option -f, il est sous-entendu qu’on prend comme fichier d’archive celui qui arrive via stdin.

Elle est complète, élégante, courte : On sauvegarde le dossier de l’application web avant de la mettre à jour, on extrait directement le contenu de l’archive dans /var/www/shaarli (sans même que le fichier stable.tar.gz apparaisse sur le disque dur) enfin on remet les droits au propre et on redémarre les services.

cp -a /var/www/shaarli{,.bak} # Pas de changement par rapport à la version précédente
wget -qO - https://github.com/shaarli/Shaarli/archive/stable.tar.gz | tar -xzC /var/www/shaarli --strip-components=1 # On télécharge la dernière version stable de Shaarli et on l'extrait directement via un pipe dans le dossier /var/www/shaarli
chown -R www-data:www-data /var/www/shaarli && chmod -R 755 /var/www/shaarli # Pas de changement par rapport à la version précédente
systemctl restart apache2 php5-fpm # Pas de changement par rapport à la version précédente

Vus : 770
Publié par blog-libre : 133