admin

About admin

This author has not yet filled in any details.
So far admin has created 65 blog entries.

Linux : Script bash pour une sauvegarde historisée

Le principe est simple : réaliser une sauvegarde historisée sur un certain nombre de jours d’un serveur Linux.
J’ai personnellement sélectionné :

  • Le répertoire etc pour avoir la conf du serveur et des services utilisés
  • Les bases de données, sous forme de dump MySQL
  • Les répertoires des différents sites web

Le principe est simple : une archive tar.gz par jour et par élément (etc, bases, répertoires web), enregistrés sous un dossier local qui sera ici /home/sauvegardes/
Il faudra en général prévoir un rsync distant de la dernière version de chaque élément au moins, pour avoir une sauvegarde distante. Ceci pourrait faire l’objet d’un autre article.

Ce script étant à appeler en tache « cron » bien entendu.

En attendant, voilà le script en question.

#!/bin/bash

# DECLARATIONS VARIABLES
mysqldbs=(db1 db2 db3)
wwwdirs=(dir1 dir2 dir3)
nbjours=30
jourtodelete=$((nbjours+1))

# ROTATION ANCIENNES VERSIONS
for ((  jour = ${nbjours[*]};  jour > 1;  jour--  ))
do
    jourprec=$((jour-1))
    # SYSTEME
    mv /home/sauvegardes/etc.$jourprec.tar.gz /home/sauvegardes/etc.$jour.tar.gz

    # MYSQL
    for db in ${mysqldbs[*]}
    do
        mv /home/sauvegardes/mysql_dump/$db.$jourprec.sql.tar.gz /home/sauvegardes/mysql_dump/$db.$jour.sql.tar.gz
    done
    # WWW
    for dir in ${wwwdirs[*]}
    do
        mv /home/sauvegardes/www/$dir.$jourprec.tar.gz /home/sauvegardes/www/$dir.$jour.tar.gz
    done
done

# SUPPRESSION VERSION LA PLUS VIEILLE
# SYSTEME
rm /home/sauvegardes/etc.$jourtodelete.sql.tar.gz
# MYSQL
for db in ${mysqldbs[*]}
do
    rm /home/sauvegardes/mysql_dump/$db.$jourtodelete.sql.tar.gz
done
# WWW
for dir in ${wwwdirs[*]}
do
    rm /home/sauvegardes/www/$dir.$jourtodelete.tar.gz
done

# GENERATION VERSION DU JOUR
# SYSTEME
tar czf /home/sauvegardes/etc.1.tar.gz /etc
# MYSQL
for db in ${mysqldbs[*]}
do
    mysqldump -u root --password=MYSQLROOTPASSWORD $db > /home/sauvegardes/mysql_dump/$db.sql
    tar czf /home/sauvegardes/mysql_dump/$db.1.sql.tar.gz /home/sauvegardes/mysql_dump/$db.sql
    rm /home/sauvegardes/mysql_dump/$db.sql
done
# WWW
for dir in ${wwwdirs[*]}
do
    tar czf /home/sauvegardes/www/$dir.1.tar.gz /var/www/$dir/
done

Pour l’adapter à votre environnement :

  • Remplacer « (db1 db2 db3) » par la liste des bases à sauvegarder
  • Remplacer « (dir1 dir2 dir3) » par la liste des répertoires web à sauvegarder
  • Variable « nbjours » : renseigner le nombre de jours d’historisation souhaités
  • Remplacer « MYSQLROOTPASSWORD » par le mot de passe root MySQL de votre serveur.
  • Remplacer « /home/sauvegardes/ » ainsi que « /home/sauvegardes/mysql_dump/ » et « /home/sauvegardes/www » par les chemins respectifs souhaités : racine des sauvegardes, répertoire des sauvegardes des bases, et répertoire des sauvegardes des répertoires web.

Et roulez jeunesse !

Cela reste artisanal, mais très pratique pour avoir une procédure de sauvegardes historisées suffisante pour pouvoir restaurer des versions antérieures de chaque site, ainsi que le paramétrage du serveur (en cas d’urgence, ce que je ne vous souhaite pas).

La grosse faille du script étant la présence du mot de passe root MySQL en dur, il mériterait de gérer les mots de passe de chaque base sous forme de liste pour éviter d’avoir le mot de passe root. Et dans l’idéal de trouver une solution pour ne pas faire apparaitre les mots de passe dans le script.
La première solution est relativement simple à implémenter, la deuxième beaucoup moins mais est sans doute possible également.
Je n’ai pas appronfondi ces aspects, le serveur concerné dans mon cas personnel étant un serveur de développement et de « gros bordel », les enjeux stratégiques sécuritaires n’en valaient pas la peine.

Si vous utilisez ce script comme base et le faites évoluer dans ce sens, n’hésitez pas à poster des modifications améliorant ces aspects de sécurité (et éventuellement d’autres que je n’aurais pas identifié) 🙂

14 octobre 2015|Categories: Blog|Tags: |0 Commentaires

Bootsrap : colonnes de même hauteur, par ligne, et responsive

Un problème récurrent avec bootsrap est d’avoir une présentation en « grille » avec des colonnes de même hauteur.

En effet, par défaut, les colonnes ont leur hauteur déterminée par leur contenu, et aucune solution CSS n’existe pour modifier ce comportement, car les différentes solutions proposées en cherchant sur le net ont d’autres incidences sur la présentation par défaut des colonnes.

La solution est donc de passer par du javascript pour gérer celà.

J’ai développé une petite fonction permettant de faire ça, et qui semble bien fonctionner, je vais donc vous la proposer ici, elle pourra vous faire gagner du temps !

Cette fonction nécessite que chaque colonne ait les classes de taille pour toutes les tailles de fenêtre possible, soit « col-xs-* », « col-sm-* », « col-md-* », « col-lg-* ».

Il faut également ajouter une classe « col-same-height » aux colonnes que l’on veut avoir de même hauteur.

Elle part également du principe que la taille de la grille est de 12 (valeur par défaut de bootstrap), et que les tailles de containers soient également celles par défaut de Bootsrap.
Si vous n’utilisez pas ces valeurs standard, vous pouvez les modifier facilement dans la fonction.

Code :

$(window).load(function() {
    $(window).resize(resizeColSameHeight);
    resizeColSameHeight();
});

/**
 * Redimensionnement hauteur des colonnes bootstrap "col-same-height" ligne par ligne selon la taille de la vue
 */
function resizeColSameHeight() {
    if ($('.col-same-height').length > 0) {
        var width = $('body').width();
        if (width < 768)
            var size = 'xs';
        else if (width < 992)
            var size = 'sm';
        else if (width < 1200) var size = 'md'; else var size = 'lg'; var classnames = $('.col-same-height').first().attr("class").toString().split(' '); for(var i in classnames) { var classname = classnames[i]; if (classname.indexOf('col-' + size + '-') != -1) var nbCols = 12 / classname.replace('col-' + size + '-', ''); } $('.col-same-height').css('height', 'auto'); if (nbCols > 1) {
            var i = 0;
            do {
                elems = $('.col-same-height').slice(i, i+nbCols);
                var maxHeight = 0;
                $(elems).each(function() {
                    if ($(this).height() > maxHeight)
                        maxHeight = $(this).height();
                });
                $(elems).each(function() {
                    $(this).css('height', maxHeight + 'px');
                });
                i += nbCols;
            } while (elems.length > 0);
        }
    }
}
25 août 2015|Categories: Blog|Tags: |0 Commentaires

Boulevard doré

boulevard-doreVente en ligne de chaussettes, collants, etc.

  • Reprise du projet et nombreuses corrections suite à migration prestashop 1.5 à 1.6
  • Développements évolutifs
  • Maintenance, infogérance.
  • Particularités : multiboutique, multilingue, nombreux packs et déclinaisons
  • CMS : Prestashop 1.6
  • Vue JS

www.boulevard-dore.fr

8 juillet 2015|Categories: Références|Tags: , , , , |Commentaires fermés sur Boulevard doré

Art Luxury Experience

art-luxury-experienceVente d’activités touristiques de luxe à Paris.

  • Développement complet
  • Extranet parternaires, gestion des disponibilités et calendriers de réservations, etc.
  • CMS : WordPress, avec Woocommerce, FacetWP, WPML, etc.
  • Intégration responsive avec Bootstrap
  • Administration serveur dédié Linux Debian
  • En collaboration avec l’agence « Pilot’In »

http://www.artluxuryexperience.com

15 avril 2015|Categories: Références|Tags: , , , , , |Commentaires fermés sur Art Luxury Experience

Gitimmo

gitimmoAgence immobilière sur Marseille.

  • Développements évolutifs et correctifs
  • CMS : Drupal 6
  • En collaboration avec l’agence « Encore nous »

http://www.gitimmo.fr/

18 mars 2015|Categories: Références|Tags: |Commentaires fermés sur Gitimmo

Olmiplast

olmiplastSite vitrine : emballage et pochette plastique.

  • Construction du site internet avec WordPress, Avada, et plugins.
  • En collaboration avec l’agence Pilot’in

http://www.olmiplast.fr

4 février 2015|Categories: Références|Tags: , , |Commentaires fermés sur Olmiplast

La synthèse vocale minimaliste et efficace grâce à Google

C’est amusant et ça peut être utile.

Vous voulez intégrer de la synthèse vocale sur votre site ?

Une solution des plus simples : l’API Google Text To Speech !

Appeller l’URL http://translate.google.com/translate_tts?ie=utf-8&tl=fr&q= en rajoutant comme valeur au paramètre q le texte que l’on veut synthétiser.

Exemple : http://translate.google.com/translate_tts?ie=utf-8&tl=fr&q=salut%20%C3%A0%20toi

Ensuite vous n’avez plus qu’à récupérer le fichier audio et en faire ce que vous voulez 🙂

Vous pouvez même jouer sur le paramètre tl pour traduire votre texte !

Source et informations plus complètes : http://www.lycee-ledantec.ac-rennes.fr/ledan-tech/?p=794

13 janvier 2015|Categories: Blog|0 Commentaires

Mes idées aussi

Mes idées aussiLe Conseil général du Val-de-Marne s’engage pour la citoyenneté des personnes en situation de handicap mental.

  • Développements évolutifs
  • Intégration de synthèse vocale Google Text To Speech

http://mesideesaussi.valdemarne.fr/

13 janvier 2015|Categories: Références|Tags: , , |Commentaires fermés sur Mes idées aussi

Groupe Châtel

siteon0Groupe de transport et logistique.

  • Développement complet de l’intranet du groupe
  • Développements spécifiques : gestion complexe des droits d’accès et profils, taxonomies, etc.
  • Intégration responsive design
  • CMS : WordPress
  • En collaboration avec l’agence Idmagine

 

17 décembre 2014|Categories: Références|Tags: , , , , , , |Commentaires fermés sur Groupe Châtel

Gerflor

gerflorFabricant de sols à usage professionnels.

  • Développement d’une application VB.net de calcul d’économies selon le type de sol
  • En collaboration avec l’agence Pilot’in

 

17 décembre 2014|Categories: Références|Tags: , , |Commentaires fermés sur Gerflor