I. Avant-propos

Le développement de modules OpenERP n'est pas une mince affaire.
Entre Python, QWeb, JavaScript et XML, il y a de quoi s'y perdre!
Aussi , il est important de faire des sauvegardes régulières de vos fichiers et de votre base de données.

Je vous recommande fortement de télécharger l'archive complète d'OpenERP sur le site de l'éditeur et de la mettre en lieu sûr. Elle vous servira pour remettre les fichiers originaux dans votre installation au cas où vous ne sauriez plus où vous en êtes dans votre développement.
Ainsi, vous aurez toujours à portée de main, une copie complète des fichiers originaux. (C'est du vécu!)
La page officielle de téléchargement des fichiers sources d'OpenERPTéléchargez une archive complète des fichiers sources d'OpenERP

Je vous propose donc un script Bash (que j'utilise quotidiennement) pour effectuer la sauvegarde complète d'OpenERP.

Attention, il s'agit ici d'une sauvegarde locale sur votre serveur de développement. Pour une sauvegarde sur le serveur de production, il faudra modifier le script pour envoyer les fichiers sauvegardés sur votre serveur de sauvegarde.

II. Prérequis

Tout d'abord, rappelez-vous que le script est prévu pour fonctionner sur un serveur Linux Debian. Je n'ai pas testé, mais il est probablement également valable pour Ubuntu.

Évidemment, vous devez avoir installé OpenERP sur votre serveur, vous aurez donc également le serveur de base de données PostgreSQL d'installé.

Nous aurons besoin de RsyncTélécharger Rsync qui permettra d'effectuer la sauvegarde incrémentale des fichiers.

Il faut également que vous ayez créé le dossier personnel de l'utilisateur «openerp»

 
Sélectionnez
/home/openerp

C'est ici que le script va placer la sauvegarde.

III. Préparation

Le script effectuera une sauvegarde de la base de données PostgreSQL. Nous devons nous assurer que l'utilisateur «openerp» puisse se connecter à la base de données.

Pour cela, nous allons modifier le fichier « pg_hba.conf » que vous devriez trouver ici:

 
Sélectionnez
/etc/postgresql/9.1/main/pg_hba.conf

Remplacez « 9.1 » par le numéro de votre version de PostgreSQL.

Rajoutez ou modifiez la ligne ci-dessous :

pg_hba.conf
Sélectionnez
# TYPE        DATABASE        USER        ADDRESS        METHOD
  local        all           openerp                      trust  

La méthode « trust » permettra à l'utilisateur « openerp » de se connecter à PostgreSQL sans mot de passe.

IV. Installation - Exécution

Téléchargez le script (voir lien en bas de page) puis placez-le dans le répertoire /root de votre serveur.
Assurez-vous que le fichier appartient à l'utilisateur/groupe root avec la commande suivante :

 
Sélectionnez
chown root:root ./save_openerp_all.sh [+ Entrée]

Modifiez ensuite les droits du fichier pour le rendre exécutable avec la commande ci-dessous :

 
Sélectionnez
chmod u+x ./save_openerp_all.sh [+ Entrée]

V. Le script de sauvegarde

Voici maintenant le script de sauvegarde

save_openerp_all.sh
Sélectionnez
#! /bin/bash

#////////////////////////////////////////////////////////////////////////////////////#
# Script de sauvegarde complète d'OpenERP                                            #
# Par Thierry Godin : 2013-06-23                                                     #
# http://thierry-godin.developpez.com/                                               #
# derniere MAJ : 2013-11-25                                                          #
#                                                                                    #
# Le script effectue une sauvegarde complète des fichiers OpenERP                    #
# et du fichier de configuration du serveur openerp-server.conf                      #
# ainsi que de la base de données au format TAR                                      #
#                                                                                    #
# Sauvegarde en local dans le répertoire de l'utilisateur openerp                    #
#                                                                                    #
# Script à mettre en CHMOD : 0755                                                    #
# Et à exécuter en 'root'                                                            #
#                                                                                    #
#   Utilisation :                                                                    #
#   -------------                                                                    #
#   Pour exécuter le fichier sous Debian                                             #
#   Placer le fichier dans le répertoire /root                                       #
#   Ouvrir une invite de commande et entrer                                          #
#       cd /root                                                                     #
#       bash ./save_openerp_all.sh                                                   #
#                                                                                    #      
#////////////////////////////////////////////////////////////////////////////////////#

# ---------------------------------------------------------------------------------- #
# !!!                                IMPORTANT                                     !!!
# ---------------------------------------------------------------------------------- #
#                                                                                    #
# Modifier le fichier pg_hba.conf de PostgreSQL pour autoriser la connexion          #
# sans mot de passe en local                                                         #
#                                                                                    #
# Emplacement du fichier = /etc/postgresql/9.1/main/pg_hba.conf :                    #
# Rajouter ou modifier la ligne ci-dessous :                                         #
#                                                                                    #
# TYPE  DATABASE        USER            ADDRESS                 METHOD               #
# local   all          openerp                                  trust                #
#                                                                                    #
# ---------------------------------------------------------------------------------- #

# Fichier de LOG
LOG_FILE='/var/log/openerp_backup.log'

# Création du fichier de log
if [ ! -e ${LOG_FILE} ]; then
    echo 'Creation du fichier de log :'${LOG_FILE}
    touch ${LOG_FILE}
fi

######################################################################################
#                           SAUVEGARDE DES FICHIERS                                  #
######################################################################################


# Destination de la sauvegarde : répertoire /home/openerp :
DEST_DIR='/home/openerp'

# Nom du répertoire qui contient la sauvegarde
SAVE_DIR=${DEST_DIR}'/SauvegardeOpenERP'

SAVE_PATH=${SAVE_DIR}'/'

# Nom du répertoire  seront stockés les fichiers supprimés ou modifiés(au cas  ...)
DEL_DIR=${SAVE_PATH}'DELETED'

echo `date +%Y-%m-%d_%H:%M:%S`'  - Debut de la sauvegarde complete OpenERP' >> ${LOG_FILE} 2>&1
echo `date +%Y-%m-%d_%H:%M:%S`'  - Debut de la sauvegarde complete OpenERP'

# Création du répertoire SauvegardeOpenERP s'il n'existe pas
if [ ! -d ${SAVE_DIR} ]; then
    echo '  - Creation du repertoire :'${SAVE_DIR} >> ${LOG_FILE} 2>&1
    echo '  - Creation du repertoire :'${SAVE_DIR}
    mkdir ${SAVE_DIR}
fi

# Création du répertoire DELETED s'il n'existe pas
if [ ! -d ${DEL_DIR} ]; then
    echo '  - Creation du repertoire :'${DEL_DIR} >> ${LOG_FILE} 2>&1
    echo '  - Creation du repertoire :'${DEL_DIR} 
    mkdir ${DEL_DIR}
fi

# Dossiers à sauvegarder 
# Mettre le chemin de openerp + fichier openerp-server.conf
# Vous pouvez rajouter des répertoires à sauvegarder (vos modules perso)
# Rajoutez simplement des ELEMENT[n] au tableau ci-dessous
ELEMENT[0]='/opt/openerp/'
ELEMENT[1]='/etc/openerp-server.conf'


# En cas de suppression ou de modification de fichiers, ils sont sauvegardés ici dans DELETED
DATE_DELETE=DELETED/`date +%Y-%m-%d`

NB_ELEMENT=${#ELEMENT[@]}

for((i=0; i < $NB_ELEMENT; i++))
do
    echo '  - Sauvegarde de '${ELEMENT[i]}' . Veuillez patienter'
    rsync -aRcxvuz --stats --delete --backup --backup-dir=$DATE_DELETE ${ELEMENT[i]} $SAVE_PATH >/dev/null 2>&1 

done

echo '  - Sauvegarde des fichiers OpenERP terminee' >> ${LOG_FILE} 2>&1
echo '  - Sauvegarde des fichiers OpenERP terminee'

######################################################################################
#                               SAUVEGARDE DE LA DB                                  #
######################################################################################

# Nom du sous-répertoire de sauvegarde de la DB
DB_DIR='DB'

# Utilisateur 
DB_USER='openerp'

# Rôle
DB_ROLE='openerp'

# Nom de la base de données
DB_NAME='MaDbOpenErp'

# Nom du fichier de sauvegarde
FILE_NAME=${DB_NAME}'_DB_'

# Date de la sauvegarde
DATE_SAVE=`date +%Y-%m-%d`

# Extension du fichier de sauvegarde
FILE_EXT='.backup'

# Le nom complet du fichier de sauvegarde ressemblera à ça:
#    FILE_NAME + DATE_SAVE + FILE_EXT
#    Exemple : MaDbOpenErp_DB_ + 2013-06-24 + .backup = MaDbOpenErp_DB_2013-06-24.backup

# Chemin du Fichier de sauvegarde
DB_SAVE_PATH=${SAVE_PATH}${DB_DIR}'/'${FILE_NAME}${DATE_SAVE}${FILE_EXT}

# Création du répertoire DB s'il n'existe pas
if [ ! -d ${SAVE_PATH}${DB_DIR} ]; then
    echo '  - Creation du repertoire :'${SAVE_PATH}${DB_DIR} >> ${LOG_FILE} 2>&1
    echo '  - Creation du repertoire :'${SAVE_PATH}${DB_DIR}
    mkdir ${SAVE_PATH}${DB_DIR}
fi

echo '  - Sauvegarde de la base de donnees OpenERP '${DB_NAME}'. Veuillez patienter...'

psql -U ${DB_USER}
pg_dump --verbose --username ${DB_USER} --role ${DB_ROLE} --no-password --format t --blobs --file ${DB_SAVE_PATH} ${DB_NAME}

echo '  - Sauvegarde de la base de donnees OpenERP terminee' >> ${LOG_FILE} 2>&1
echo '  - Sauvegarde de la base de donnees OpenERP terminee' 


# Attribution des droits à l'utilisateur openerp/openerp : 0755
echo '  - Mise a jour des permissions' >> ${LOG_FILE} 2>&1
echo '  - Mise a jour des permissions'
chown openerp:openerp ${SAVE_DIR} -R
chmod 0755 ${SAVE_DIR} -R

echo `date +%Y-%m-%d_%H:%M:%S`'  - Sauvegarde complete OpenERP terminee' >> ${LOG_FILE} 2>&1
echo `date +%Y-%m-%d_%H:%M:%S`'  - Sauvegarde complete OpenERP terminee'
echo '------------------------------------' >> ${LOG_FILE} 2>&1

# EOF

Modifiez la valeur de la variable « DB_NAME »

Les paramètres essentiels à modifier
Sélectionnez
# Nom de votre base de données ici
DB_NAME='MaDbOpenErp'

# Indiquez ici les chemins vers le répertoire d'installation d'OpenERP
# ainsi que le chemin vers le fichier de configuration du serveur.
# Si vous avez mis vos modules complémentaires dans un autre répertoire,
# ajoutez le chemin complet comme ceci :
# ELEMENT[n]='/mon/dossier/de/modules/persos/'

ELEMENT[0]='/opt/openerp/'
ELEMENT[1]='/etc/openerp-server.conf'

Ne vous souciez pas de créer des sous-répertoires pour classer les fichiers de sauvegarde.
Si nécessaire, le script créera les sous-répertoires suivants :
/home/openerp/SauvegardeOpenErp
/home/openerp/SauvegardeOpenErp/DB
/home/openerp/SauvegardeOpenErp/DELETED

VI. Exécution manuelle

Pour effectuer une sauvegarde manuelle d'OpenERP, placez-vous dans le répertoire /root puis entrez la commande suivante :

 
Sélectionnez
bash ./save_openerp_all.sh [+ Entrée]

VII. Exécution planifiée

Pour planifier la sauvegarde d'OpenERP, nous allons utiliser une tâche Cron.

Tâche Cron

  • Ouvrez une invite de commande en root.
  • Entrez la commande suivante pour créer la tâche Cron :
 
Sélectionnez
crontab -e [+ Entrée]
  • Éditez le fichier et rajoutez la ligne ci-dessous :
 
Sélectionnez
0 23    * * *     bash /root/save_openerp_all.sh    # Backup OpenERP
  • Validez ensuite avec CTRL + X.
  • Confirmez la modification du fichier en répondant Oui (o) + Entrée.
  • Vérifiez enfin que la tâche a bien été enregistrée avec la commande ci-dessous:
 
Sélectionnez
crontab -l [+ Entrée]
  • Puis redémarrez Cron avec la commande
 
Sélectionnez
/etc/init.d/cron restart [+ Entrée]

Ici, la sauvegarde sera exécutée tous les jours à 23 h 00.

VIII. Résultat du script de sauvegarde

Le script effectuera une sauvegarde incrémentale de tous vos fichiers OpenERP, du fichier de configuration du serveur, ainsi que vos modules si vous avez ajouté un élément dans le tableau [ELEMENT], dans le répertoire « /home/openerp/SauvegardeOpenERP ».

Ensuite, le script sauvegardera votre base de données dans le répertoire « /home/openerp/SauvegardeOpenERP/DB ». Comme le nom de la sauvegarde comporte la date du jour, si vous exécutez le script tous les jours par une tâche Cron, vous aurez donc un fichier de sauvegarde de la base de données par jour.

Si par la suite vous supprimez un fichier ou un répertoire à la racine d'openERP, celui-ci sera sauvegardé dans le répertoire « /home/openerp/SauvegardeOpenERP/DELETED/yyyy-mm-dd/ » avant d'être à son tour supprimé de la sauvegarde. Ceci vous permettra, en cas de besoin, de récupérer un fichier que vous auriez supprimé par erreur.

Également, lorsque vous modifiez un fichier, il sera sauvegardé dans le même répertoire « /home/openerp/SauvegardeOpenERP/DELETED/yyyy-mm-dd/ », ainsi vous conservez un suivi des modifications sur le fichier, ce qui peut vous permettre de revenier en arrière, le cas échéant.

Le script enregistre également les événements dans le fichier openerp_backup.log, que vous trouverez dans « /var/log ».

En cas de coup dur, vous pourrez restaurer votre base de données en utilisant un logiciel comme pgAdminpgAdmin pour restaurer votre base de données au format *.TAR.

IX. Téléchargement

X. Remerciements

Tous mes remerciements à Claude Leloup pour ses conseils et corrections.