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»
/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:
/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 :
# 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 :
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 :
chmod u+x ./save_openerp_all.sh [+ Entrée]
V. Le script de sauvegarde▲
Voici maintenant le script de sauvegarde
#!
/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
où
seront
stockés
les
fichiers
supprimés
ou
modifiés(au
cas
où
...)
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 »
#
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 :
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 :
crontab -e [+ Entrée]
- Éditez le fichier et rajoutez la ligne ci-dessous :
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:
crontab -l [+ Entrée]
- Puis redémarrez Cron avec la commande
/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.