forked from ScoDoc/ScoDoc
Merge pull request 'complement sauvegarde/restauration' (#152) from jmplace/ScoDoc-Lille:sauv-restore into master
Reviewed-on: https://scodoc.org/git/viennet/ScoDoc/pulls/152
This commit is contained in:
commit
47f1497e5e
17
scodoc.py
17
scodoc.py
@ -274,6 +274,23 @@ def list_depts(depts=""): # list-dept
|
||||
print(f"{dept.id}\t{dept.acronym}")
|
||||
|
||||
|
||||
@app.cli.command()
|
||||
@click.option(
|
||||
"-n",
|
||||
"--name",
|
||||
is_flag=True,
|
||||
help="show database name instead of connexion string (required for "
|
||||
"dropdb/createddb commands)",
|
||||
)
|
||||
def scodoc_database(name): # list-dept
|
||||
"""print the database connexion string"""
|
||||
uri = app.config["SQLALCHEMY_DATABASE_URI"]
|
||||
if name:
|
||||
print(uri.split("/")[-1])
|
||||
else:
|
||||
print(uri)
|
||||
|
||||
|
||||
@app.cli.command()
|
||||
@with_appcontext
|
||||
def import_scodoc7_users(): # import-scodoc7-users
|
||||
|
@ -15,28 +15,46 @@ 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"
|
||||
usage() {
|
||||
echo "Usage: $0 [ --keep-env ] archive"
|
||||
echo "Exemple: $0 /tmp/mon-scodoc.tgz"
|
||||
echo "OPTION"
|
||||
echo "--keep_env garde la configuration courante"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (($# < 1 || $# > 2))
|
||||
then
|
||||
usage
|
||||
elif [ $# -eq 2 -a $1 != '--keep-env' -a $2 != '--keep-env' ] ; then
|
||||
usage
|
||||
elif [ $# -eq 1 ] ; then
|
||||
echo "restauration des données et de la configuration originale (production)"
|
||||
SRC=$1
|
||||
DB_DEST="SCODOC"
|
||||
else
|
||||
echo "restauration des données dans la configuration actuelle"
|
||||
DB_CURRENT=$(su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask scodoc-database -n)")
|
||||
DB_DEST="$DB_CURRENT"
|
||||
KEEP=1
|
||||
if [ $1 = '--keep-env' ]; then
|
||||
SRC=$2
|
||||
else
|
||||
SRC=$1
|
||||
fi
|
||||
fi
|
||||
|
||||
SRC=$1
|
||||
DBNAME=$2
|
||||
|
||||
DB_DUMP="${SCODOC_VAR_DIR}"/SCODOC.dump
|
||||
|
||||
# Safety check
|
||||
echo "Ce script va remplacer les donnees de votre installation ScoDoc par celles"
|
||||
echo "enregistrees dans le fichier fourni."
|
||||
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 "La base SQL $DB_CURRENT sera effacée et remplacée !!!"
|
||||
echo
|
||||
echo -n "Voulez vous poursuivre cette operation ? (y/n) [n]"
|
||||
read -r ans
|
||||
@ -47,8 +65,13 @@ then
|
||||
fi
|
||||
|
||||
# -- Stop ScoDoc
|
||||
echo "Arrêt de scodoc9..."
|
||||
systemctl stop scodoc9
|
||||
if [ $KEEP -ne 1 ]; then
|
||||
echo "Arrêt de scodoc9..."
|
||||
systemctl stop scodoc9
|
||||
else
|
||||
echo -n "Assurez-vous d'avoir arrété le serveur scodoc (validez pour continuer)"
|
||||
read ans
|
||||
fi
|
||||
|
||||
# Clear caches
|
||||
echo "Purge des caches..."
|
||||
@ -70,22 +93,31 @@ 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"'$')
|
||||
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 $DBNAME..."
|
||||
su -c "dropdb $DBNAME" "$SCODOC_USER" || die "Erreur destruction db"
|
||||
echo "Suppression de la base $DB_DEST..."
|
||||
su -c "dropdb $DB_DEST" "$SCODOC_USER" || die "Erreur destruction db"
|
||||
fi
|
||||
su -c "createdb $DBNAME" "$SCODOC_USER" || die "Erreur création 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"
|
||||
|
||||
# -- Apply migrations if needed (only on "production" databse, = SCODOC sauf config particulière)
|
||||
export FLASK_ENV="production"
|
||||
su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask db upgrade)" "$SCODOC_USER"
|
||||
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 "restauration 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
|
||||
systemctl start scodoc9
|
||||
fi
|
||||
|
||||
|
||||
echo "Terminé."
|
||||
|
@ -20,6 +20,14 @@ then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "vérification de la configuration..."
|
||||
DB_CURRENT=$(cd $SCODOC_DIR && source venv/bin/activate && flask scodoc-database -n)
|
||||
if [ $DB_CURRENT != 'SCODOC' ]; then
|
||||
echo "Ce script ne peut transférer les données que depuis une base nommée SCODOC (c'est normalement le cas pour un serveur en production)"
|
||||
echo "Annulation"
|
||||
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."
|
||||
@ -44,8 +52,10 @@ DEST=$1
|
||||
db_name="$SCODOC_DB_PROD" # SCODOC
|
||||
|
||||
# dump dans /opt/scodoc-data/SCODOC.dump
|
||||
echo "sauvegarde de la base de données"
|
||||
pg_dump --format=custom --file="$SCODOC_VAR_DIR/$db_name.dump" "$db_name" || die "Error dumping database"
|
||||
|
||||
echo "création du fichier d'archivage..."
|
||||
# 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"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user