« Sites Python » : différence entre les versions

De WikiBR
Chi.huynh (discussion | contributions)
Création de la page Sites Python
 
Daniela.cojocaru (discussion | contributions)
Cette version a été marquée à traduire
 
(Une version intermédiaire par le même utilisateur non affichée)
Ligne 1 : Ligne 1 :
<translate>
<!--T:1-->
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.
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.


<!--T:2-->
Pour faire un site avec Python, on peut utiliser un framework. Les deux plus connus sont
Pour faire un site avec Python, on peut utiliser un framework. Les deux plus connus sont


<!--T:3-->
* [https://www.djangoproject.com/ Django]
* [https://www.djangoproject.com/ Django]
* [http://flask.pocoo.org/ Flask]
* [http://flask.pocoo.org/ Flask]


<!--T:4-->
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.
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]).
<!--T:5-->
 
Ici, on vous explique comment déployer un site fait en Python sur notre serveur, une fois les fichiers en place (voir le [[Admin:Site Binet|guide sur les sites binets]]).
== Préambule ==
</translate>
<translate>
== Préambule == <!--T:6-->


<!--T:7-->
On doit faire des manipulations de notre côté pour gérer votre site Python, donc il faut nous dire :
On doit faire des manipulations de notre côté pour gérer votre site Python, donc il faut nous dire :
* que vous utilisez Python
* que vous utilisez Python
* quelle version de Python vous utilisez (2.7 ou 3.x)
* 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)
* quel est le nom du fichier principal WSGI (voir la documentation du framework que vous utilisez)
</translate>


== Environnement virtuel ==
<translate>
== Environnement virtuel == <!--T:8-->


<!--T:9-->
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.
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.


<!--T:10-->
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.
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 ===
=== Création === <!--T:11-->


<!--T:12-->
Il se crée en allant au dossier et en faisant
Il se crée en allant au dossier et en faisant


<!--T:13-->
<code>virtualenv -p /usr/bin/python3.6 venv</code>
<code>virtualenv -p /usr/bin/python3.6 venv</code>


<!--T:14-->
pour créer un virtualenv Python 3.6 nommé <code>venv</code>, ou
pour créer un virtualenv Python 3.6 nommé <code>venv</code>, ou


<!--T:15-->
<code>virtualenv -p /usr/bin/python2.7 venv</code>
<code>virtualenv -p /usr/bin/python2.7 venv</code>


<!--T:16-->
pour Python 2.7.
pour Python 2.7.


=== Activer le virtualenv ===
=== Activer le virtualenv === <!--T:17-->


<!--T:18-->
Maintenant, si vous affichez les fichiers dans votre répertoire avec <code>ls</code>, celui-ci ressemble à
Maintenant, si vous affichez les fichiers dans votre répertoire avec <code>ls</code>, celui-ci ressemble à


<!--T:19-->
<code>
<code>
user@domaine:/hosting/www/nom_binet/htdocs$ ls
user@domaine:/hosting/www/nom_binet/htdocs$ ls
Ligne 46 : Ligne 65 :
</code>
</code>


<!--T:20-->
Il faut désormais activer le virtualenv pour utiliser l'environnement Python, en faisant
Il faut désormais activer le virtualenv pour utiliser l'environnement Python, en faisant


<!--T:21-->
<code>
<code>
source venv/bin/activate # Linux
source venv/bin/activate # Linux
Ligne 53 : Ligne 74 :
</code>
</code>


<!--T:22-->
Normalement, votre shell ressemble à
Normalement, votre shell ressemble à


<!--T:23-->
<code>(venv) user@domaine:/hosting/www/nom_binet/htdocs$</code>
<code>(venv) user@domaine:/hosting/www/nom_binet/htdocs$</code>


<!--T:24-->
Pour quitter l'environnement virtuel, il suffit d'exécuter la commande
Pour quitter l'environnement virtuel, il suffit d'exécuter la commande


<!--T:25-->
<code>deactivate</code>
<code>deactivate</code>


=== Installer les dépendances avec pip ===
=== Installer les dépendances avec pip === <!--T:26-->


<!--T:27-->
Pour se faire facilement, nous conseillons d'inclure avec les fichiers source un <code>requirements.txt</code>, 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 à
Pour se faire facilement, nous conseillons d'inclure avec les fichiers source un <code>requirements.txt</code>, 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 à


<!--T:28-->
<code>
<code>
flask==0.12.2
flask==0.12.2
Ligne 72 : Ligne 99 :
</code>
</code>


<!--T:29-->
Installer les dépendances, une fois les fichiers en place, devient un simple
Installer les dépendances, une fois les fichiers en place, devient un simple


<!--T:30-->
<code>pip install -r requirements.txt</code>
<code>pip install -r requirements.txt</code>


<!--T:31-->
Vous pouvez créer un <code>requirements.txt</code> contenant ce qui est installé sur votre machine avec
Vous pouvez créer un <code>requirements.txt</code> contenant ce qui est installé sur votre machine avec


<!--T:32-->
<code>pip freeze > requirements.txt</code>
<code>pip freeze > requirements.txt</code>


<!--T:33-->
et ensuite l'ouvrir avec un éditeur de texte pour enlever ce dont vous n'avez pas besoin (par exemple Numpy, Scipy...).
et ensuite l'ouvrir avec un éditeur de texte pour enlever ce dont vous n'avez pas besoin (par exemple Numpy, Scipy...).
</translate>


== Lancer son site ==
<translate>
== Lancer son site == <!--T:34-->


<!--T:35-->
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
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


<!--T:36-->
<code>touch /var/run/please/restart</code>
<code>touch /var/run/please/restart</code>


<!--T:37-->
et attendez le signal
et attendez le signal


<!--T:38-->
<code>EOF</code>
<code>EOF</code>


<!--T:39-->
Vous pouvez tester que ça marche en naviguant à <code>http://nom_site.binets.fr</code>.
Vous pouvez tester que ça marche en naviguant à <code>http://nom_site.binets.fr</code>.
</translate>


== Erreurs ==
<translate>
== Erreurs == <!--T:40-->


=== Erreurs Python ===
=== Erreurs Python === <!--T:41-->


<!--T:42-->
Il est bien sûr possible de tester si le serveur tourne dans l'interpréteur Python en faisant
Il est bien sûr possible de tester si le serveur tourne dans l'interpréteur Python en faisant


<!--T:43-->
<code>python manage.py runserver</code>
<code>python manage.py runserver</code>


<!--T:44-->
sous Django ou
sous Django ou


<!--T:45-->
<code>python app.py</code>
<code>python app.py</code>


<!--T:46-->
sous Flask (où <code>app.py</code> est le nom de l'application Flask).
sous Flask (où <code>app.py</code> est le nom de l'application Flask).


=== Erreurs web ===
=== Erreurs web === <!--T:47-->


<!--T:48-->
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 :
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 :


<!--T:49-->
</code>/var/log/uwsgi/nom_binet ou /hosting/log/nom_binet</code>
</code>/var/log/uwsgi/nom_binet ou /hosting/log/nom_binet</code>


=== Troubleshooting ===
=== Troubleshooting === <!--T:50-->


<!--T:51-->
Si toutes les pages affichent <code>Internal Server Error</code> (pas en gras) : c'est une erreur de uWSGI qui n'arrive pas à :
Si toutes les pages affichent <code>Internal Server Error</code> (pas en gras) : c'est une erreur de uWSGI qui n'arrive pas à :
* trouver votre site
* trouver votre site
* trouver le virtualenv
* trouver le virtualenv


<!--T:52-->
une exception est levée au démarrage du serveur (<code>ImportError</code> notamment).
une exception est levée au démarrage du serveur (<code>ImportError</code> notamment).


<!--T:53-->
Vous pouvez lire les logs dans <code>/var/log/uwsgi//<ton site>.log</code> et vérifier où uwsgi va chercher ton site dans <code>/etc/uwsgi.d/.json</code>. S'il faut modifier ce dernier fichier, demande-le au BR, tu ne peux pas le faire toi-même.
Vous pouvez lire les logs dans <code>/var/log/uwsgi//<ton site>.log</code> et vérifier où uwsgi va chercher ton site dans <code>/etc/uwsgi.d/.json</code>. S'il faut modifier ce dernier fichier, demande-le au BR, tu ne peux pas le faire toi-même.


<!--T:54-->
Pour Django :
Pour Django :
* si toutes les pages affichent <code>Internal Server Error(500)</code> 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.
* si toutes les pages affichent <code>Internal Server Error(500)</code> 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.
</translate>

Dernière version du 8 juillet 2026 à 14:11

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 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.