lftp
Lftp est un programme Linux s’exécutant en ligne de commande pour transférer une arborescence de fichiers via le protocole ftp. Celà permets notamment de :
- mettre à jour un site Internet modifié localement
- faire un backup de site en local
Dans la continuité de l’article publié sur Utiliser SubVersion - gestionnaire de versions le but est maintenant de mettre facilement et régulièrement le(s) site(s) à jour sur le serveur en ligne, à partir de l’arborescence développée localement et maintenue grâce à svn.
script shell pour un site
Voici un script permettant d’automatiser la mise à jour de la source en svn (update) et le transfert vers le site distant :
#!/bin/bash
# Déclaration de constantes
SERVER="serveur.site.net"
USER="login"
PASS="pass"
LOCAL="/home/pvincent/Programmation/www/dossier_site_svn_à_jour/"
DISTANT="$SERVER/dossier_site/"
EXCLUS="-x images/sources -x .*svn.* "
# Update SVN
svn update $LOCAL
# Upload
lftp ftp://$USER:$PASS@$SERVER -e "mirror -e -R $EXCLUS $LOCAL $DISTANT ; quit"
Options :
- -e : commande à lftp d’exécuter ce qui est entre guillements.
- mirror : crée une copie exacte en vérifiant la date des fichiers déjà présents sur le serveur (pas d’écrasement systématique)
- -R : copie depuis l’emplacement local vers l’emplacement distant
- -e de mirror : efface les fichiers qui n’existent plus. Attention à l’utilisation de cette option : si des ajouts ont été faits directement en ligne, ils seront perdus.
- -x : permets d’exclure certains répertoires lors de la copie. S’agissant d’un commit svn dans notre cas, il faut exclure automatiquement tous les dossiers .svn cachés du transfert. -x comprends les exepressions régulières et acceptent plusieurs entrées.
Enregistrer le script.sh précédent dans votre dossier de scripts sans oublier de le rendre éxécutable (Nautilus > clic-droit > propriété > éxécution > permissions > éxécutable).
Le lancer dans un terminal (Nautilus > double-clic > Executer depuis un terminal) et le transfert ou la mise à jour s’éxécute en fond de tâche.
script shell pour n sites
Pour mettre à jour les n sites avec la même source :
#!/bin/bash
# Déclaration de constantes
LOCAL="/home/pvincent/Programmation/www/dossier_site_svn_à_jour/"
EXCLUS="-x images/sources -x -x .*svn.* "
# Update SVN
svn update $LOCAL
# Uploads
SERVER="serveur.site.net"
USER="login1"
PASS="pass1"
DISTANT="$SERVER/dossier_site/"
lftp ftp://$USER:$PASS@$SERVER -e "mirror -e -R $EXCLUS $LOCAL $DISTANT ; quit"
SERVER="serveur2.site.net"
USER="login2"
PASS="pass2"
DISTANT="$SERVER/dossier_site/"
lftp ftp://$USER:$PASS@$SERVER -e "mirror -e -R $EXCLUS $LOCAL $DISTANT ; quit"
SERVER="serveur3.site.net"
USER="login3"
PASS="pass3"
DISTANT="$SERVER/dossier_site/"
lftp ftp://$USER:$PASS@$SERVER -e "mirror -e -R $EXCLUS $LOCAL $DISTANT ; quit"
En cas de grand nombre de sites, on devra optimiser le code avec un appel de fonction.