Sites Python

De WikiBR

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.