Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Documentation et procédure de mise à jour : proposition #416

Open
xavyeah39 opened this issue Apr 22, 2024 · 7 comments
Open

Documentation et procédure de mise à jour : proposition #416

xavyeah39 opened this issue Apr 22, 2024 · 7 comments

Comments

@xavyeah39
Copy link
Contributor

Feature description

Après la mise à jour de 3 instances depuis diverses branches dev de la pre-relealse 0.99 vers les récentes 1.0.0 et 1.1.0, je vous fais un petit retour d'expériences.

Le script update_app.sh mentionné succinctement dans le Readme nécessite d'être adapté si l'on a pas déployé l'application avec git clone (la méthode d'installation principale se base sur le téléchargement d'une archive).

Je trouve qu'il serait bien d'intégrer dans la documentation globale une section "Mise à jour de l'application".
Voici donc une proposition de doc de MàJ pour une install "classique" (plutôt que dev avec git clone) + adaptation du script update.sh fourni.

Je peux faire une PR si ça vous convient mais je préfère avoir vos avis/retours avant 😄

Mise à jour de GN Citizen

Installer l'utilitaire rsync (utilisé pour la copie synchro des conf et custom) :

sudo apt update
sudo apt install rsync

Arrêter les services supervisor et renommer le répertoire de l'instance actuelle :

sudo supervisorctl stop gncitizen_front gncitizen_api
mv ~/gncitizen ~/gncitizen_old

Récupérer la nouvelle version à installer :

# Adapter la version ciblée pour la MÀJ :
VERSION=1.1.0
# Se positionner dans le dossier par défaut de l'utilisateur (e.g: /home/geonatadmin)
cd ~/
# Téléchargement de la version ciblée pour la MÀJ
curl -OJL https://github.com/PnX-SI/GeoNature-citizen/archive/refs/tags/$VERSION.zip
# Décompression de l'archive
unzip GeoNature-citizen-$VERSION.zip
# Renommage du dossier contenant l'application
mv GeoNature-citizen-$VERSION gncitizen
# Supprimession de l'archive
rm GeoNature-citizen-$VERSION.zip

Exécuter le script de MàJ

Dans le script ./install/update_app.sh, dé-commenter et modifier la variable ALEMBIC_STAMP si les notes de versions le précise (selon la version actuelle à mettre à jour et le nombre de versions à rattraper) :

Script update_app.sh adapté :

#!/bin/bash
set -e

###### VARIABLES A ADAPTER ######

# Decommenter et modifier la variable selon la version actuelle de la BDD et indiquer à Alembic les migrations à réaliser
#ALEMBIC_STAMP=e8c1cd57ad16

#################################

cd $(dirname $(dirname "${BASH_SOURCE[0]:-$0}"))

DIR=$(pwd)

# Copy main medias to media
mkdir -p $DIR/media
cp -r $DIR/frontend/src/assets/* $DIR/media

# Creation des repertoires de log
mkdir -p var/log

echo "Copy conf and customs ..."
# Copy gncitizen_old conf and customs
rsync -av --ignore-times --exclude='*.template' --exclude='*.md' ~/gncitizen_old/config/ $DIR/config/
rsync -av --ignore-times --exclude='*.template' --exclude='app.config.ts' ~/gncitizen_old/frontend/src/conf/ $DIR/frontend/src/conf/
rsync -av --ignore-times --exclude='*.template' ~/gncitizen_old/frontend/src/custom/ $DIR/frontend/src/custom/
rsync -av --ignore-times --exclude='*.template' --exclude='css/' --remove-source-files ~/gncitizen_old/media/ $DIR/media/
rsync -av --ignore-times --exclude='*.template' ~/gncitizen_old/frontend/src/i18n/ $DIR/frontend/src/i18n/


. config/settings.ini
# Source nvm.sh pour accéder à nvm
source ~/.nvm/nvm.sh
# Transpilation du frontend
cd $DIR/frontend
nvm use
npm install
echo "Build frontend ..."
npm run build:i18n-ssr

# Mise a jour des requirements
# Création du venv
echo "Upgrade backend ..."
cd ${DIR}/backend
venv_path=${DIR}/backend/${venv_dir:-".venv"}
if [ ! -f $venv_path/bin/activate ]; then
  python3 -m virtualenv $venv_path
fi
source .venv/bin/activate
pip install -r requirements.txt
# Alembic stamp
if [ -n "$ALEMBIC_STAMP" ]; then
  flask db stamp $ALEMBIC_STAMP
fi
flask db upgrade

#Reload Supervisor pour l'api
echo "Reloading Api ..."
sudo supervisorctl reread
sudo supervisorctl reload
sudo supervisorctl restart all

Additional context

No response

@camillemonchicourt
Copy link
Member

Oui OK.
Par contre, je ne pense pas qu'il faille mettre du ALEMBIC_STAMP dans le script d'update et que l'on doive modifier le contenu de ce fichier.
C'est source d'erreur et d'incompréhension.

@camillemonchicourt
Copy link
Member

Et pourquoi installer un rsync ?
Un cp ne fait pas l'affaire ?

@xavyeah39
Copy link
Contributor Author

Oui OK. Par contre, je ne pense pas qu'il faille mettre du ALEMBIC_STAMP dans le script d'update et que l'on doive modifier le contenu de ce fichier. C'est source d'erreur et d'incompréhension.

Oui je ne suis pas fan non plus de faire modifier le script... je trouvais ça plus simple sur le coup...
On peut aussi sortir les commande flask db du script et documenter en conséquence pour les exécuter manuellement (lorsque que la montée en version l'exige)

@camillemonchicourt
Copy link
Member

Dans GeoNature et ses modules, quand on est passé à Alembic, on a indiqué dans les notes de version le stamp à faire et ça va bien comme ça : https://github.com/PnX-SI/GeoNature/blob/master/docs/CHANGELOG.md?plain=1#L1494

@xavyeah39
Copy link
Contributor Author

Et pourquoi installer un rsync ? Un cp ne fait pas l'affaire ?

Oui, des commandes cp peuvent faire l'affaire mais je trouve l'opération moins brutal avec rsync et ça permet de gérer la synchro de l'ensemble des fichiers des répertoires (en excluant certains fichiers plus facilement) plutôt que de gérer par fichier dans certains cas.
Avec Git et .gitignore c'est plus confort mais ce n'est peut être pas le mode d'install le plus courant...

cp -r ~/gncitizen_old/frontend/src/custom/ $DIR/frontend/src/custom/ par exemple va aussi copier et remplacer tous les fichiers .template des sous-répertoires depuis le dossier gncitizen_old.
Rien de grave dans l'absolu mais avec rsync je trouvais plus propre et simple de pouvoir exclure certains pattern de fichiers (pas trouvé l'équivalent avec cp).

Mais on peut aussi faire avec cp. Ce qui pourrait donner à la place :

cp ~/gncitizen_old/config/settings.ini $DIR/config/
cp ~/gncitizen_old/config/config.toml $DIR/config/
cp ~/gncitizen_old/config/backoffice_* $DIR/config/
cp ~/gncitizen_old/config/badges_config.py $DIR/config/
cp ~/gncitizen_old/frontend/src/conf/app.config.ts $DIR/frontend/src/conf/
cp ~/gncitizen_old/frontend/src/conf/map.config.ts $DIR/frontend/src/conf/
cp -r ~/gncitizen_old/frontend/src/custom/ $DIR/frontend/src/custom/
cp ~/gncitizen_old/media/* $DIR/media/
cp ~/gncitizen_old/frontend/src/i18n/* $DIR/frontend/src/i18n/

@camillemonchicourt
Copy link
Member

Ouais je préfère faire au plus simple et ne rien installer en plus, mais comme vous préférez.

@hypsug0
Copy link
Collaborator

hypsug0 commented Apr 25, 2024

Je suis d'accord avec @camillemonchicourt, plutôt faire au plus simple avec les outils système de base.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants