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}")
|
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()
|
@app.cli.command()
|
||||||
@with_appcontext
|
@with_appcontext
|
||||||
def import_scodoc7_users(): # import-scodoc7-users
|
def import_scodoc7_users(): # import-scodoc7-users
|
||||||
|
@ -15,29 +15,47 @@ source "$SCRIPT_DIR/utils.sh"
|
|||||||
# Ce script doit tourner comme "root"
|
# Ce script doit tourner comme "root"
|
||||||
check_uid_root "$0"
|
check_uid_root "$0"
|
||||||
|
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
if [ ! $# -eq 2 ]
|
usage() {
|
||||||
then
|
echo "Usage: $0 [ --keep-env ] archive"
|
||||||
echo "Usage: $0 archive dbname"
|
echo "Exemple: $0 /tmp/mon-scodoc.tgz"
|
||||||
echo "Exemple: $0 /tmp/mon-scodoc.tgz SCODOC"
|
echo "OPTION"
|
||||||
|
echo "--keep_env garde la configuration courante"
|
||||||
exit 1
|
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
|
fi
|
||||||
|
DB_DUMP="${SCODOC_VAR_DIR}"/SCODOC.dump
|
||||||
SRC=$1
|
|
||||||
DBNAME=$2
|
|
||||||
|
|
||||||
|
|
||||||
# Safety check
|
# Safety check
|
||||||
echo "Ce script va remplacer les donnees de votre installation ScoDoc par celles"
|
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 "Ce fichier doit avoir ete cree par le script save_scodoc9_data.sh."
|
||||||
echo
|
echo
|
||||||
echo "Attention: TOUTES LES DONNEES DE CE SCODOC SERONT REMPLACEES !"
|
echo "Attention: TOUTES LES DONNEES DE CE SCODOC SERONT REMPLACEES !"
|
||||||
echo "Notamment, tous les utilisateurs et departements existants seront effaces !"
|
echo "Notamment, tous les utilisateurs et departements existants seront effaces !"
|
||||||
echo
|
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
|
||||||
echo -n "Voulez vous poursuivre cette operation ? (y/n) [n]"
|
echo -n "Voulez vous poursuivre cette operation ? (y/n) [n]"
|
||||||
read -r ans
|
read -r ans
|
||||||
if [ ! "$(norm_ans "$ans")" = 'Y' ]
|
if [ ! "$(norm_ans "$ans")" = 'Y' ]
|
||||||
@ -47,8 +65,13 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# -- Stop ScoDoc
|
# -- Stop ScoDoc
|
||||||
echo "Arrêt de scodoc9..."
|
if [ $KEEP -ne 1 ]; then
|
||||||
systemctl stop scodoc9
|
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
|
# Clear caches
|
||||||
echo "Purge des 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}"
|
chown -R "${SCODOC_USER}:${SCODOC_GROUP}" "${SCODOC_VAR_DIR}" || die "Error chowning ${SCODOC_VAR_DIR}"
|
||||||
|
|
||||||
# --- La base SQL: nommée $(db_name).dump
|
# --- 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 ]
|
if [ "$nb" -gt 0 ]
|
||||||
then
|
then
|
||||||
echo "Suppression de la base $DBNAME..."
|
echo "Suppression de la base $DB_DEST..."
|
||||||
su -c "dropdb $DBNAME" "$SCODOC_USER" || die "Erreur destruction db"
|
su -c "dropdb $DB_DEST" "$SCODOC_USER" || die "Erreur destruction db"
|
||||||
fi
|
fi
|
||||||
su -c "createdb $DBNAME" "$SCODOC_USER" || die "Erreur création db"
|
su -c "createdb $DB_DEST" "$SCODOC_USER" || die "Erreur création db"
|
||||||
|
|
||||||
echo "Chargement de la base SQL..."
|
if [ ! -z $KEEP_ENV ] ; then
|
||||||
su -c "pg_restore -d $DBNAME ${SCODOC_VAR_DIR}/SCODOC.dump" "$SCODOC_USER" || die "Erreur chargement de la base SQL"
|
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
|
||||||
|
fi
|
||||||
|
|
||||||
# -- 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"
|
|
||||||
|
|
||||||
# -- Start ScoDoc
|
|
||||||
systemctl start scodoc9
|
|
||||||
|
|
||||||
echo "Terminé."
|
echo "Terminé."
|
||||||
|
@ -20,6 +20,14 @@ then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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 "Ce script est utile pour transférer toutes les données d'un serveur ScoDoc 9"
|
||||||
echo "à un autre ScoDoc 9."
|
echo "à un autre ScoDoc 9."
|
||||||
echo "Il est vivement recommandé de mettre à jour votre ScoDoc avant."
|
echo "Il est vivement recommandé de mettre à jour votre ScoDoc avant."
|
||||||
@ -44,8 +52,10 @@ DEST=$1
|
|||||||
db_name="$SCODOC_DB_PROD" # SCODOC
|
db_name="$SCODOC_DB_PROD" # SCODOC
|
||||||
|
|
||||||
# dump dans /opt/scodoc-data/SCODOC.dump
|
# 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"
|
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
|
# 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"
|
(cd $(dirname "$SCODOC_VAR_DIR"); tar cfz "$DEST" $(basename "$SCODOC_VAR_DIR")) || die "Error archiving data"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user