Sites Python
Il existe plusieurs façons de faire des sites internet. Le serveur du BR qui héberge les sites binets peuvent héberger des sites créés avec Python.
Pour faire un site avec Python, on peut utiliser un framework. Les deux plus connus sont
Le but de cet article n'est pas de vous expliquer comment créer un tel site : des guides bien meilleurs que ce que l'on pourrait écrire ici existent déjà, et on propose des formations au cours de l'année pour vous apprendre comment.
Ici, on vous explique comment déployer un site fait en Python sur notre serveur, une fois les fichiers en place (voir le [Sites Binet|guide sur les sites binets]).
Préambule
On doit faire des manipulations de notre côté pour gérer votre site Python, donc il faut nous dire :
- que vous utilisez Python
- quelle version de Python vous utilisez (2.7 ou 3.x)
- quel est le nom du fichier principal WSGI (voir la documentation du framework que vous utilisez)
Environnement virtuel
Le serveur fait tourner simultanément plusieurs sites Python, qui ont chacun leur version de Python (2.7 ou 3.x) et leurs dépendances.
Pour bien compartimenter tout cela, il faut définir un environnement virtuel, c'est-à-dire un interpréteur Python séparé et indépendant des autres avec ses propres librairies.
Création
Il se crée en allant au dossier et en faisant
virtualenv -p /usr/bin/python3.6 venv
pour créer un virtualenv Python 3.6 nommé venv
, ou
virtualenv -p /usr/bin/python2.7 venv
pour Python 2.7.
Activer le virtualenv
Maintenant, si vous affichez les fichiers dans votre répertoire avec ls
, celui-ci ressemble à
user@domaine:/hosting/www/nom_binet/htdocs$ ls
dossier
fichier.truc
venv
Il faut désormais activer le virtualenv pour utiliser l'environnement Python, en faisant
source venv/bin/activate # Linux
venv\Scripts\activate # Windows
Normalement, votre shell ressemble à
(venv) user@domaine:/hosting/www/nom_binet/htdocs$
Pour quitter l'environnement virtuel, il suffit d'exécuter la commande
deactivate
Installer les dépendances avec pip
Pour se faire facilement, nous conseillons d'inclure avec les fichiers source un requirements.txt
, un fichier qui contient la liste des librairies Python dont dépend votre site, au mieux avec les numéros de version. Par exemple, il ressemblerait à
flask==0.12.2
markdown
glob
requests==2.8.1
Installer les dépendances, une fois les fichiers en place, devient un simple
pip install -r requirements.txt
Vous pouvez créer un requirements.txt
contenant ce qui est installé sur votre machine avec
pip freeze > requirements.txt
et ensuite l'ouvrir avec un éditeur de texte pour enlever ce dont vous n'avez pas besoin (par exemple Numpy, Scipy...).
Lancer son site
Il faut maintenant dire au serveur de redémarrer. Les utilisateurs Sigma n'ont pas les permissions pour faire ça de la manière usuelle. On fournit donc la méthode suivante : entrez la commande
touch /var/run/please/restart
et attendez le signal
EOF
Vous pouvez tester que ça marche en naviguant à http://nom_site.binets.fr
.
Erreurs
Erreurs Python
Il est bien sûr possible de tester si le serveur tourne dans l'interpréteur Python en faisant
python manage.py runserver
sous Django ou
python app.py
sous Flask (où app.py
est le nom de l'application Flask).
Erreurs web
Pour checker les changements il suffit de taper l'url du site pour constater en direct les changements. Si jamais il y a un souci il y a deux emplacements pour les logs :
/var/log/uwsgi/nom_binet ou /hosting/log/nom_binet
Troubleshooting
Si toutes les pages affichent Internal Server Error
(pas en gras) : c'est une erreur de uWSGI qui n'arrive pas à :
- trouver votre site
- trouver le virtualenv
une exception est levée au démarrage du serveur (ImportError
notamment).
Vous pouvez lire les logs dans /var/log/uwsgi//<ton site>.log
et vérifier où uwsgi va chercher ton site dans /etc/uwsgi.d/.json
. S'il faut modifier ce dernier fichier, demande-le au BR, tu ne peux pas le faire toi-même.
Pour Django :
- si toutes les pages affichent
Internal Server Error(500)
en gras, il faut activer les mails pour avoir des détails, mais c'est probablement un oubli de faire les migrations sur une base de données SQL vide.