<div class="highlight highlight-source-sql position-relative" data-snippet-clipboard-copy-content="CREATE DATABASE intrarez CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'intrarez'@'localhost' IDENTIFIED BY '’;
GRANT ALL PRIVILEGES ON intrarez.* TO ‘intrarez’@’localhost’;
FLUSH PRIVILEGES;
QUIT;
“>
CREATEDATABASEintrarez CHARACTER SET utf8 COLLATE utf8_bin;
CREATEUSER 'intrarez'@'localhost' IDENTIFIED BY '<mdp-db>';
GRANT ALL PRIVILEGES ON intrarez.* TO 'intrarez'@'localhost';
FLUSH PRIVILEGES;
QUIT;
flask db upgrade
Modifier le fichier .env créé depuis le modèle. Pour générer une SECRET_KEY aléatoire :
python3 -c "import uuid; print(uuid.uuid4().hex)"
Enregistrer l’application dans les variables d’environment :
> ~/.profile
“>
echo "export FLASK_APP=intrarez.py" >> ~/.profile
Compiler les traductions (fichiers binaires) :
flask translate compile
L’application peut alors normalement être lancée avec flask run.
On a alors une version de développement installée : flask run n’est pas approprié à de la production (peu optimisé), et il faut configurer l’accès depuis l’extérieur (même si c’est un extérieur interne, dans notre cas).
Passage en production
On utilise Gunicorn en interne : le serveur Python n’est pas accessible de l’extérieur, c’est Nginx qui lui servira les requêtes non-statiques.
Gunicorn est lancé et contrôlé par Supervisor, qui fait à peu près le travail d’un service mais en plus pratique :
Le nombre de workers de Gunicorn (le -w 4 dans le fichier de conf) peut être adapté selon la machine.
Configuration de Nginx :
sudo cp .conf_models/nginx.conf /etc/nginx/sites-enabled/intrarez
sudo service nginx reload
Note : pour l’instant, l’application est configurée pour ne fonctionner qu’en HTTP, pas en HTTPS (problèmes de certificats en réseau interne).
Il faudra tester et voir ce qui marche mieux en terme d’avertissements des navigateurs et autres entre ça et un certificat auto-host : voir .conf_models/nginx.conf, avec
Compliqué d’avoir un vrai certificat, parce qu’il faut un nom de domaine associé, mais si on veut mettre des services accessibles depuis l’extérieur ce sera une étape obligée.
Mise à jour
Pour mettre à jour l’application, dans le dossier intrarez :
Requirements : je pars sur Python 3.10, parce que le nouveau statement match me fait beaucoup trop de l’oeil.
À ce jour, Python 3.10 n’est disponible qu’en version release candidate 2 (donc quasiment finale), et devrait sortir début octobre (donc avant la release de l’IntraRez).
Installation propre de plusieurs versions de Python sur un même OS :
Installation d’un virtual env fresh
Utilisation de SQLAlchemy 1.4 (2.x pas prêt)
Gestion des migrations de db : lors du développement d’une nouvelle version modifiant le modèle de données,
En local : flask db migrate -m "Migration to <version>" ;
Vérifier le fichier créé dans migrations/versions ;
Application bilingue (utilisant Flask-Babel) : lorsque le code est modifié,
Exécuter flask translate update ;
Modifier/ajouter les clés de traduction dans app/translations/en/LC_MESSAGES/messages.po. Les entrées modifiées sont indiquées avec #, fuzzy : supprimer ce commentaire après avoir vérifié qu’il n’y avait pas d’erreur / modifié la traduction ;
John was the first writer to have joined pythonawesome.com. He has since then inculcated very effective writing and reviewing culture at pythonawesome which rivals have found impossible to imitate.
Previous Post
A Simple Baseline for Bayesian Uncertainty in Deep Learning
Next Post
High performance ptychography reconstruction python package running on GPU