Scripts save/restore

This commit is contained in:
Emmanuel Viennet 2021-09-25 09:13:39 +02:00
parent 1741e75f72
commit cb03cc962c
3 changed files with 139 additions and 1 deletions

View File

@ -229,7 +229,7 @@ SCODOC_CFG_DIR = os.path.join(Config.SCODOC_VAR_DIR, "config")
SCODOC_VERSION_DIR = os.path.join(SCODOC_CFG_DIR, "version") SCODOC_VERSION_DIR = os.path.join(SCODOC_CFG_DIR, "version")
# ----- Repertoire tmp : /opt/scodoc-data/tmp # ----- Repertoire tmp : /opt/scodoc-data/tmp
SCO_TMP_DIR = os.path.join(Config.SCODOC_VAR_DIR, "tmp") SCO_TMP_DIR = os.path.join(Config.SCODOC_VAR_DIR, "tmp")
if not os.path.exists(SCO_TMP_DIR): if not os.path.exists(SCO_TMP_DIR) and os.path.exists(Config.SCODOC_VAR_DIR):
os.mkdir(SCO_TMP_DIR, 0o755) os.mkdir(SCO_TMP_DIR, 0o755)
# ----- Les logos: /opt/scodoc-data/config/logos # ----- Les logos: /opt/scodoc-data/config/logos
SCODOC_LOGOS_DIR = os.path.join(SCODOC_CFG_DIR, "logos") SCODOC_LOGOS_DIR = os.path.join(SCODOC_CFG_DIR, "logos")

View File

@ -0,0 +1,87 @@
#!/bin/bash
#
# ScoDoc: restore data (saved by save_scodoc9_data) into current install
#
# Utile pour migrer ScoDoc 9 d'un serveur a un autre
# A executer en tant que root sur le nouveau serveur
#
# E. Viennet, Sept 2021
#
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
source "$SCRIPT_DIR/config.sh"
source "$SCRIPT_DIR/utils.sh"
# Ce script doit tourner comme "root"
check_uid_root "$0"
# Usage
if [ ! $# -eq 2 ]
then
echo "Usage: $0 archive dbname"
echo "Exemple: $0 /tmp/mon-scodoc.tgz SCODOC"
exit 1
fi
SRC=$1
DBNAME=$2
# Safety check
echo "Ce script va remplacer les donnees de votre installation ScoDoc par celles"
echo "enregistrees dans le fichier fourni."
echo "Ce fichier doit avoir ete cree par le script save_scodoc9_data.sh."
echo
echo "Attention: TOUTES LES DONNEES DE CE SCODOC SERONT REMPLACEES !"
echo "Notamment, tous les utilisateurs et departements existants seront effaces !"
echo
echo "La base SQL $DBNAME sera effacée et remplacée !!!"
echo
echo -n "Voulez vous poursuivre cette operation ? (y/n) [n]"
read -r ans
if [ ! "$(norm_ans "$ans")" = 'Y' ]
then
echo "Annulation"
exit 1
fi
# -- Stop ScoDoc
echo "Arrêt de scodoc9..."
systemctl stop scodoc9
# Clear caches
echo "Purge des caches..."
su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask clear-cache)" "$SCODOC_USER" || die "Erreur purge cache scodoc9"
# Déplace scodoc-data s'il existe
if [ -e "$SCODOC_VAR_DIR" ]
then
echo "$SCODOC_VAR_DIR existe: le renomme en .old"
mv "$SCODOC_VAR_DIR" "$SCODOC_VAR_DIR".old || die "Erreur renommage scodoc-data"
fi
# -- Ouverture archive
echo "Ouverture archive $SRC..."
(cd $(dirname "$SCODOC_VAR_DIR"); tar xfz "$SRC") || die "Error opening archive"
# -- Ckeck/fix owner
echo "Vérification du propriétaire..."
chown -R "${SCODOC_USER}:${SCODOC_GROUP}" "${SCODOC_VAR_DIR}" || die "Error chowning ${SCODOC_VAR_DIR}"
# --- La base SQL: nommée $(db_name).dump
nb=$(su -c "psql -l" "$SCODOC_USER" | awk '{print $1}' | grep -c -e '^'"$DBNAME"'$')
if [ "$nb" -gt 0 ]
then
echo "Suppression de la base $DBNAME..."
su -c "dropdb $DBNAME" "$SCODOC_USER" || die "Erreur destruction db"
fi
su -c "createdb $DBNAME" "$SCODOC_USER" || die "Erreur destruction db"
echo "Chargement de la base SQL..."
su -c "pg_restore -d $DBNAME ${SCODOC_VAR_DIR}/SCODOC.dump" "$SCODOC_USER" || die "Erreur chargement de la base SQL"
# -- Start ScoDoc
systemctl start scodoc9
echo "Terminé."

View File

@ -0,0 +1,51 @@
#!/bin/bash
#
# ScoDoc: save all user data (database, configs, images, archives...) in separate directory
#
# Utile pour migrer ScoDoc version 9 (et plus) d'un serveur a un autre
# Executer en tant que scodoc sur le serveur d'origine.
# Utiliser - pour sortir sur la sortie standard (eg pipe dans ssh...)
#
# E. Viennet, Sept 2011, Aug 2020, Aug 21
#
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
source "$SCRIPT_DIR/config.sh"
source "$SCRIPT_DIR/utils.sh"
if [ "$(id -nu)" != "$SCODOC_USER" ]
then
echo "$0: script must be runned as user $SCODOC_USER"
exit 1
fi
echo "Ce script est utile pour transférer toutes les données d'un serveur ScoDoc 9"
echo "à un autre ScoDoc 9."
echo "Il est vivement recommandé de mettre à jour votre ScoDoc avant."
echo ""
echo -n "Voulez-vous poursuivre cette sauvegarde ? (y/n) [n]"
read -r ans
if [ ! "$(norm_ans "$ans")" = 'Y' ]
then
echo "Annulation"
exit 1
fi
# Destination
if [ ! $# -eq 1 ]
then
echo "Usage: $0 destination_file"
echo "(- sort sur stdout)"
echo "Exemple: $0 /tmp/mon-scodoc.tgz"
exit 1
fi
DEST=$1
db_name="$SCODOC_DB_PROD" # SCODOC
# dump dans /opt/scodoc-data/SCODOC.dump
pg_dump --format=custom --file="$SCODOC_VAR_DIR/$db_name.dump" "$db_name" || die "Error dumping database"
# tar scodoc-data vers le fichier indiqué ou stdout
(cd $(dirname "$SCODOC_VAR_DIR"); tar cfz "$DEST" $(basename "$SCODOC_VAR_DIR")) || die "Error archiving data"