From 3267a1f9bf0095420ffaf00b864d09603441458f Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Fri, 23 Jul 2021 15:46:12 +0300 Subject: [PATCH] documentation install et migration --- README.md | 77 ++++++++++++++++++++++++++------------- tools/install_debian10.sh | 8 ++++ tools/make-release.sh | 51 +++++++++++++++++++++----- 3 files changed, 102 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index a44a7492..5ca2d730 100644 --- a/README.md +++ b/README.md @@ -10,17 +10,16 @@ Documentation utilisateur: ## Branche ScoDoc 8 expérimentale -N'utiliser que pour les développements et tests, dans le cadre de la migration de Zope vers Flask. +N'utiliser que pour les développements et tests. La version ScoDoc8 est basée sur Flask (au lieu de Zope) et sur **python 3.7+**. Elle ne sera pas mise en production, c'est une version de développement pour le passage à Python 3. De très nombreux changements sont susceptibles d'affecter l'API, mais on s'efforce à ce que rien -ne soit visible des utilisateurs. +ne soit visible des utilisateurs Web. -## Work in Progress (WIP) - -Développement en cours, certaines pages fonctionnent, d'autres pas. +**Work in Progress (WIP)**: développement en cours, certaines pages fonctionnent, d'autres pas: +merci de signaler les erreurs. ### État actuel (23 juillet 21) @@ -37,49 +36,52 @@ Développement en cours, certaines pages fonctionnent, d'autres pas. - tests, formulaires utilisateurs, logging. -## Setup (sur Debian 10 / python3.7) +## Installation (sur Debian 10 / python3.7) -Pour les dev, le plus simple est de partir d'une install fonctionnelle de ScoDoc7 sous git, et de changer de branche +On peut installer à partir de zéro, ou sur une machine ayant déjà un ScoDoc 7 et migrer les données. - git checkout ScoDoc8 +### Installation -Debian 10 est livré avec Python 3.7. +Sur un système Linux Debian 10, en tant que `root`: - apt-get install python3-dev - apt-get install python3-venv - apt-get install libpq-dev - apt-get install libcrack2-dev + - Charger la dernière release depuis https://scodoc.org/git/viennet/ScoDoc/releases -Création d'un environnement: + - Déplacer ou copier le fichier `scodoc-v8.x.y.tgz` dans `/opt` et le décomprimer: - python3 -m venv venv + sudo su + cd /opt; tar xf - scodoc-v8.x.y.tgz # remplacer x et y par votre version -Puis installation de Flask: - - source venv/bin/activate - pip install flask - pip install wheel + - Lancer le script d'installation: -Installer les dépendances: + cd /opt/scodoc8/tools + ./install_debian10.sh - pip install -r requirements-3.7.txt +ce script crée un compte utilisateur "scodoc". -## Bases de données +Note: si vous installez sur une machine déjà configurée pour ScoDoc 7, il +est inutile de reconfigurer la messagerie et le firewall. + +### Bases de données ScoDoc8 utilise les bases de département de ScoDoc7, mais une nouvelle base utilisateurs nommée `SCO8USERS` (au lieu de `SCOUSERS`), qui est manipulée via `sqlalchemy`. ### Configuration de la base utilisateurs -Lancer le script `tools/create_database.sh` +Lancer le script: + + su postgres + cd /opt/scodoc8/tools + ./create_database.sh Ce script crée une base nommée `SCO8USERS`, appartenant à l'utilisateur (role) postgres `scodoc`. -Cet utilisateur est créé si nécessaire. +Cet utilisateur est automatiquement créé si nécessaire. ### Initialisation de la base utilisateur par Flask En tant qu'utilisateur `scodoc`: + su scodoc # si besoin flask db init flask db migrate -m "users and roles tables" flask db upgrade @@ -107,6 +109,31 @@ Pour créer un utilisateur "super admin", c'est à dire admin dans tous les dép flask user-create admin1 SuperAdmin @all +## Migration d'une installation ScoDoc 7 + +Le script `migrate_from_scodoc7.sh` va déplacer les donneés et reconfigurer les bases de données +de votre installation ScoDoc 7 pour passer à ScoDoc 8 (*ne pas utiliser en production !*). +**Les modifications effectuées sont sans retour: ScoDoc 7 ne fonctionnera plus !** + + 1. S'assurer que l'installation ScoDoc 7 est à jour + + sudo su + cd /opt/scodoc/Products/ScoDoc/config + ./upgrade.sh + + 2. Arrêter le service ScoDoc 7 + + systemctl stop scodoc7 + + S'assurer qu'il est bien stoppé (`ps auxw`, ...), sans qui la migration va échouer. + + 3. Lancer le script de migration + ScoDoc 8 doit avoir été installé comme expliqué plus haut. + + sudo su + cd /opt/scodoc8/tools + ./migrate_from_scodoc7.sh + ## Lancement serveur (développement, sur VM Linux) diff --git a/tools/install_debian10.sh b/tools/install_debian10.sh index d05352ed..bda1aeac 100755 --- a/tools/install_debian10.sh +++ b/tools/install_debian10.sh @@ -26,6 +26,9 @@ then exit 1 fi +# ------------ Unix user +check_create_scodoc_user + # ------------ Permissions & directories change_scodoc_file_ownership @@ -39,6 +42,11 @@ apt-get -y install postgresql apt-get -y install curl apt-get -y install graphviz +# ------------ CREATION DU VIRTUALENV +echo "Creating python3 virtualenv..." +cd "$SCODOC_DIR" || die "can't cd $SCODOC_DIR" +python3 -m venv venv || die "can't create Python 3 virtualenv" + # ------------ INSTALL DES PAQUETS PYTHON (3.7) # ScoDoc8 uses pip in our env source venv/bin/activate diff --git a/tools/make-release.sh b/tools/make-release.sh index 1c065dc8..fa75077e 100755 --- a/tools/make-release.sh +++ b/tools/make-release.sh @@ -6,23 +6,50 @@ source config.sh source utils.sh usage() { - echo "Usage: $0 v9.x.y, where v9.x.y est le numéro de version créé" + echo $1 >&2 + echo "Usage: $0 [-f] -v 9.x.y, where 9.x.y est le numéro de version créé" >&2 + echo " -f: force release even if there's local changes" >&2 exit 1 } -if [ $# != 1 ] || [ $1 = "-h" ] || [ $1 = "--help" ] + +FORCE_RELEASE=0 +while getopts "hfv:" opt; do + case $opt in + f) + FORCE_RELEASE=1 + ;; + v) + VERSION=$OPTARG + ;; + h) + usage "Prépare une release" + ;; + \?) + usage "Invalid option: -$OPTARG" + ;; + :) + usage "Option -$OPTARG requires an argument." + ;; + esac +done + +if [ -z "$VERSION" ] then usage fi -VERSION=$1 SOURCE_URL="https://scodoc.org/git/viennet/ScoDoc.git" SOURCE_BRANCH="ScoDoc8" +RESULTFILE="scodoc-$VERSION.tgz" -# Check local diffs, ignoring file modes (changed on VMs) -local_diffs=$(git -c core.fileMode=false status --porcelain --untracked-files=no | wc -l) -if [ "$local_diffs" -ne 0 ] +if [ "$FORCE_RELEASE" -eq 0 ] then - die "you have local diffs: git commit or stash before releasing" + # Check local diffs, ignoring file modes (changed on VMs) + local_diffs=$(git -c core.fileMode=false status --porcelain --untracked-files=no | wc -l) + if [ "$local_diffs" -ne 0 ] + then + die "you have local diffs: git commit or stash before releasing" + fi fi echo "Preparing release $VERSION" @@ -33,13 +60,19 @@ cd "/tmp/$VERSION" || die "can't cd /tmp/$VERSION" git clone "$SOURCE_URL" || die "git error cloning $SOURCE_URL" cd ScoDoc || die "no ScoDoc directory !" git checkout "$SOURCE_BRANCH" || die "git ckecking out branch $SOURCE_BRANCH" + # --- Create empty .../var/ subdir +echo "Creating empty local directories..." mkdir -p var/scodoc || die "can't create var subdirectory" mkdir var/scodoc/archives var/scodoc/photos var/scodoc/tmp var/scodoc/config mkdir var/scodoc/config/version var/scodoc/config/depts var/scodoc/config/logos cd .. + +# --- Archive +echo "Preparing archive..." mv ScoDoc scodoc8 chown -R scodoc scodoc8 -tar cfz "scodoc8-$VERSION.tgz" scodoc8 - +tar cfz "$RESULTFILE" scodoc8 +echo +echo "Release: $(pwd)/$RESULTFILE"