117 lines
4.0 KiB
Bash
Executable File
117 lines
4.0 KiB
Bash
Executable File
#!/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 (($# < 1 || $# > 2)) || [ ! -z "$2" ] && [ ! "$2" == "--keep-env" ]
|
|
then
|
|
echo "Usage: $0 archive [--keep-env]"
|
|
echo "Exemple: $0 /tmp/mon-scodoc.tgz"
|
|
echo "sans --keep_env restaure la sauvegarde complète (données et configuration)"
|
|
echo "avec --keep_env restaure les données sauvegardées dans la base en conservant la configuration courante"
|
|
exit 1
|
|
elif $# -eq 1 ; then
|
|
echo "restauration des données et de la configuration originale (production)"
|
|
else
|
|
echo "restauration des données dans la configuration actuelle"
|
|
fi
|
|
|
|
# Hypothèse: la base sauvegardée s'appelle SCODOC (dans SCODOC.dump)
|
|
SRC=$1
|
|
KEEP_ENV="$2"
|
|
DB_DUMP="${SCODOC_VAR_DIR}"/SCODOC.dump
|
|
DB_CURRENT=$(su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask scodoc-database -n)")
|
|
|
|
# computes target database name (SCODOC if production else current database)
|
|
if [ -z "$2" ] ; then # pas d'option --keepenv
|
|
DB_DEST="SCODOC"
|
|
elif [ "$2" == "--keep_env" ] ; then
|
|
DB_DEST="$DB_DB_CURRENT"
|
|
else
|
|
echo
|
|
fi
|
|
|
|
# Safety check
|
|
echo "Ce script va remplacer les donnees de votre installation ScoDoc par celles"
|
|
echo "enregistrées 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 -x "$DB_DEST")
|
|
if [ "$nb" -gt 0 ]
|
|
then
|
|
echo "Suppression de la base $DB_DEST..."
|
|
su -c "dropdb $DB_DEST" "$SCODOC_USER" || die "Erreur destruction db"
|
|
fi
|
|
su -c "createdb $DB_DEST" "$SCODOC_USER" || die "Erreur création db"
|
|
|
|
if [ ! -z $KEEP_ENV ] ; then
|
|
echo "conservation de la configuration actuelle"
|
|
cp "$SCODOC_VAR_DIR".old/.env "$SCODOC_VAR_DIR"/.env
|
|
echo "récupération des données..."
|
|
su -c "pg_restore -f - $DB_DUMP | psql -q $DB_DEST" "$SCODOC_USER" >/dev/null || die "Erreur chargement/renommage de la base SQL"
|
|
su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask db upgrade)" "$SCODOC_USER"
|
|
echo "redémarrez scodoc selon votre configuration"
|
|
else
|
|
# -- Apply migrations if needed (only on "production" database, = SCODOC sauf config particulière)
|
|
echo "restauratioin environnement de production"
|
|
echo "Chargement de la base SQL..."
|
|
su -c "pg_restore -d $DB_DEST $DB_DUMP" "$SCODOC_USER" || die "Erreur chargement de la base SQL"
|
|
export FLASK_ENV="production" # peut-être pas utile? : .env a été recopié
|
|
su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask db upgrade)" "$SCODOC_USER"
|
|
# -- Start ScoDoc
|
|
systemctl start scodoc9
|
|
fi
|
|
|
|
|
|
echo "Terminé."
|