INSTALL.md 6.17 KB

Installation de Plan De Charge

Prérequis

  • python3
  • SQLite (pour le développement et les tests unitaires)
  • chrome-driver et chromium (pour les tests unitaires)
  • postgresql ou mysql/mariadb (pour la production)

Obtenir un répertoire fonctionnel

export GIT_SSL_NO_VERIFY=1
git clone https://gitlab.irap.omp.eu/PDC-IRAP/pdc-web.git
cd pdc-web
git checkout dev # pour éventuellement travailler avec la branche la plus à jour

Installer l'environment python

python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

Configurer l'application

Les fichiers de configuration fournis dans le répertoire ./resources sont à copier à la racine du projet, mais peuvent être laissés tels quels pour un premier test après installation.

Il est bon d'y jeter un oeil, les commentaires sont là pour vous aider. (mais en anglais comme tout le code source du projet)

# D'abord les accès base de donnée
#
cp ./resources/db_config.py ./
$(EDITOR) db_config.py 

# Puis le fichier pour l'application elle même
#
cp ./resources/pdc_config.py ./
$(EDITOR) pdc_config.py 

# Enfin le contrôle de la commande flask est assuré par son propre fichier de configuration
# Celui ci est également chargé par l'application grace à l'instruction:
# app/__init__.py: load_dotenv(env_file, verbose=True)
#
cp ./resources/flaskenv ./.flaskenv # ! noter le '.' devant le fichier destination
$(EDITOR) .flaskenv

Créer la base de données

Dans un premier temps, pour tester l'installation, on peut s'appuyer sur une base déjà disponible.

Il s'agit de l'import d'une base de type Lesia dont les noms d'agents, de projets, de métiers et de services ont été réécrit avec des chantiers du batiment. Cela fut fait afin de ne pas diffuser des données réelles du Lesia et permettre la diffusion de ces données de test avec le projet plan-de-charge.

cp resources/lesia-btp.sqlite ./pdc-dev.db

Vérifier que ce chemin correspond avec celui configuré dans le fichier db_config.py pour la variable sqlalchemy_devdb_uri. C'est le cas dans le fichier initial pour une variable FLASK_ENV positionnée à ' development'.

Pour un usage plus avancé, voyez l'outil en ligne de commande fourni avec l'application. (sinon, passez directement à la section suivante)

# Créer la structure de la base
#
flask pdc_db create_db

# Il est possible d'importer une base de type Lesia
# cela suppose de disposer d'une telle base, et de l'avoir configurée dans db_config.py
#
flask pdc_db feed_from_lesia 

# Voire de l'anonymiser en changeant
#   - les noms de projets
#   - les noms de services
#   - les noms de fonctions
#
flask pdc_db fake_lesia_names

# D'autre commandes d'importation sont disponibles:
#
flask pdc_db feed_from_irap --csv-file 2021_03_30_PDC_v0-1.csv

# Plus d'info sur les outils en ligne de commande:
#
flask --help
flask pdc_db --help

Jouer les tests et exécuter un serveur local

pip install -r requirements-tests.txt
cp resources/lesia-btp.sqlite ./pdc-test.db # ou le chemin configuré dans `db_config.py` pour sqlalchemy_testdb_uri
PYTHONPATH=. pytest

# éventuellement voir le taux de couverture
#
PYTHONPATH=. pytest  --cov=app --cov-report=xml:"coverage.xml" --cov-report=term --junitxml "tests-report.xml" 

Enfin, ouvrir un serveur sur localhost:5000 et y accéder avec son navigateur.

flask run

Configurer l'appli web avec apache

Les fichiers concernés :

  • pdc_web.wsgi
  • pdc_web.py
  • pdc_config.py
  • db_config.py

La procédure:

# créer le répertoire pour le web
export WEB_DIR=/var/www/html/pdc-web
mkdir $WEB_DIR

# le peupler avec le code 
export GIT_DIR=/path/to/pdc_web/.git
export GIT_BRANCH=master
git --work-tree=$WEB_DIR --git-dir=$GIT_DIR checkout -f $GIT_BRANCH

# le configurer : cf plus haut "Obtenir un répertoire fonctionnel"
cd $WEB_DIR
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
$(EDITOR) pdc_config.py db_config.py .flaskenv 

# configurer le serveur web
cp ./resources/apache2-virtual-host.conf /etc/apache2/sites-available/pdc-web.conf
$(EDITOR) /etc/apache2/sites-available/pdc-web.conf 
a2ensite pdc-web 
apachectl restart

Mise à jour

git pull

git autodeploy

Les fichiers concernés :

  • scripts/post-deploy.sh
  • resources/post-receive.git-hook

La procédure:

git --work-tree=/var/www/html/pdc-web --git-dir=/path/to/the/repo.git checkout -f master

# make bare repo
git clone --bare /path/to/the/repo.git
# put on hook
cp /path/to/working-directory/resources/post-receive.git-hook repo.git/hooks/post-receive
$(EDITOR) repo.git/hooks/post-receive

git push to repo

Gestion des utilisateurs

La table users stocke les utilisateurs qui se connectent à l'applicationa avec leur rôle et les droits associés. Un ensemble de commandes permet de les gérer :

flask pdc_db user_show_all  # liste existante
flask pdc_db user_add       # ajouter un nouveau login
flask pdc_db user_update    # modifier un login existant
flask pdc_db user_delete    # effacer un login existant
flask pdc_db show_roles     # lister les rôles disponibles

Intégration Pycharm

Ce projet utilisant le pattern "factory", il faut procéder à quelques configurations afin de le faire tourner avec pycharm.

Pour une procédure détaillée, voir la page :

https://flask.palletsprojects.com/en/1.1.x/cli/#pycharm-integration

Dans le menu 'Edit Configurations', changer les champs :

  • 'module name' positionné à 'flask'
  • et dans le champ 'Parameters' choisir 'run'

Cette configuration permet de lire les variables positionées dans le fichier .flaskenv

FLASK_ENV=development
FLASK_APP=pdc_web

Ainsi fait, exécutez votre projet depuis pycharm et essayez sur un navigateur à l'adresse localhost:5000.

Troubleshooting

  • Q : parfois le module Flask-Migrate n'est pas correctement chargé aprés son installation.
  • R : simplement recharger l'environnement virtuel avec source venv/bin/activate