programmation_serveur_php_python_nodejs
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
programmation_serveur_php_python_nodejs [2020/05/18 20:00] – joseph | programmation_serveur_php_python_nodejs [2020/05/19 08:29] (Version actuelle) – joseph | ||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
# Comment programmer un serveur web ? | # Comment programmer un serveur web ? | ||
- | * Côté client (c'est à dire ce qui s' | + | * **Côté client** (c'est à dire ce qui s' |
- | * Mais comment programmer ce qu'il se passe *côté serveur* ? Exemple : lorsqu' | + | * Mais comment programmer ce qu'il se passe **côté serveur** ? Exemple : lorsqu' |
C'est ce que nous allons voir ici. | C'est ce que nous allons voir ici. | ||
- | # PHP | + | ## PHP |
PHP est **le** langage par excellence pour programmer côté serveur. Statistique 2018 : | PHP est **le** langage par excellence pour programmer côté serveur. Statistique 2018 : | ||
Ligne 34: | Ligne 34: | ||
* On peut [mixer très facilement du HTML et du PHP](https:// | * On peut [mixer très facilement du HTML et du PHP](https:// | ||
- | # Python | + | ## Python |
- | ## Méthode | + | Dans toute la suite, on supposera qu'un classique serveur web Apache tourne sur la machine. On supposera aussi que le `VirtualHost` soit réglé en `AllowOverride All` (c'est la valeur par défaut pour certaines versions d' |
+ | |||
+ | ``` | ||
+ | < | ||
+ | ServerName example.com | ||
+ | DocumentRoot / | ||
+ | < | ||
+ | AllowOverride All | ||
+ | Require all granted | ||
+ | </ | ||
+ | </ | ||
+ | ``` | ||
+ | |||
+ | |||
+ | ### Méthode simple | ||
* Installer [mod_cgi](http:// | * Installer [mod_cgi](http:// | ||
- | * Créer un fichier `app.py` | + | * Créer un fichier `/ |
``` | ``` | ||
- | #!/usr/bin/python2.7 | + | #!/usr/bin/python3 |
print(" | print(" | ||
print("" | print("" | ||
Ligne 50: | Ligne 64: | ||
``` | ``` | ||
Options +ExecCGI | Options +ExecCGI | ||
+ | SetEnv PYTHONIOENCODING utf8 | ||
AddHandler cgi-script .py | AddHandler cgi-script .py | ||
``` | ``` | ||
| | ||
- | * Visitez http:// | + | * Visitez http:// |
- | NB: Utiliser CGI revient à démarrer un nouveau process (= un nouvel interpréteur Python) pour chaque requête, ce qui est potentiellement plus lent (dans mes tests 100ms au lieu de 34ms avec `mod_python` ou `mod_wsgi`, voir plus bas). | + | NB: Utiliser CGI revient à démarrer un nouveau process (= un nouvel interpréteur Python) pour chaque requête, ce qui est potentiellement plus lent (dans mes tests 90ms Python 2.7 / 140ms Python 3, au lieu de 34ms avec `mod_python` ou `mod_wsgi`) |
- | ## Méthode simple: mod_python | + | ### Méthode simple: mod_python |
- | Il y a une [méthode | + | Il y a une [méthode |
1. Installer le module `mod_python` : | 1. Installer le module `mod_python` : | ||
Ligne 66: | Ligne 81: | ||
apt-get install libapache2-mod-python | apt-get install libapache2-mod-python | ||
- | 2. Créer un fichier `.htaccess` à la racine du site, pour indiquer que les fichiers .py doivent être traités par Python | + | 2. Créer un fichier `.htaccess` à la racine du site, pour indiquer que les fichiers .py doivent être traités par Python, contenant ceci : |
AddHandler mod_python .py | AddHandler mod_python .py | ||
Ligne 77: | Ligne 92: | ||
4. Ouvrir `https:// | 4. Ouvrir `https:// | ||
- | |||
- | (*) Pour pouvoir définir des Handler directement dans le `.htaccess`, | ||
Avantages : | Avantages : | ||
Ligne 88: | Ligne 101: | ||
* *" | * *" | ||
- | ## La méthode | + | ### Méthode |
- | La méthode | + | La méthode |
Contrairement à avoir, comme précédemment, | Contrairement à avoir, comme précédemment, | ||
Ligne 114: | Ligne 127: | ||
* Django, réputé comme très complet, jamais testé personnellement | * Django, réputé comme très complet, jamais testé personnellement | ||
- | Le code précédent fonctionne bien, mais " | + | Le code précédent fonctionne bien, mais " |
- | * soit en faisant un `.htaccess` | + | Comment donc " |
- | | + | * **Soit avec une règle de réécriture d'URL pour rediriger les requêtes, d' |
- | RewriteRule /(.*) http:// | + | |
- | + | Mettre ceci dans le `.htaccess` : | |
+ | ``` | ||
+ | | ||
+ | RewriteRule /(.*) http:// | ||
+ | ``` | ||
Il faut aussi se débrouiller manuellement pour que le script Python tourne **sans arrêt**, même si on ferme la fenêtre du terminal / le SSH. Exemple dans Bash : | Il faut aussi se débrouiller manuellement pour que le script Python tourne **sans arrêt**, même si on ferme la fenêtre du terminal / le SSH. Exemple dans Bash : | ||
- | + | | |
- | nohup python mysever.py & | + | nohup python mysever.py & |
- | + | | |
ou avec `screen` (voir un tuto à ce sujet) : `screen -S pythonserver`, | ou avec `screen` (voir un tuto à ce sujet) : `screen -S pythonserver`, | ||
| | ||
- | * soit en ajoutant ça dans la configuration Apache `< | + | * **Soit |
- | | + | Ajouter cela dans la configuration Apache `< |
- | ProxyPassReverse / http:// | + | ``` |
- | + | | |
+ | ProxyPassReverse / http:// | ||
+ | | ||
De même que pour le point précédent, | De même que pour le point précédent, | ||
| | ||
- | * soit avec `mod_wsgi` | + | * **Soit |
- | | + | |
- | | + | On installe ce module Apache avec : |
- | + | ``` | |
- | | + | |
- | + | ``` | |
- | < | + | |
- | ServerName example.com | + | |
- | WSGIScriptAlias / /var/www/test_wsgi/app.py | + | < |
- | < | + | ServerName example.com |
- | AllowOverride All | + | WSGIScriptAlias / /home/www/example/app.py |
- | Require all granted | + | < |
- | </ | + | AllowOverride All |
- | </ | + | Require all granted |
- | | + | </ |
+ | </ | ||
+ | | ||
L' | L' | ||
| | ||
- | Par contre, en testant `mod_wsgi` je suis tombé sur plein de problèmes: `import module` qui ne marche pas alors qu'il est [dans le même répertoire](https:// | + | Par contre, en testant `mod_wsgi` je suis tombé sur quelques |
- | # Javascript | + | ## Javascript |
Oui on peut faire du Javascript côté serveur, c'est le cas notamment avec le framework très populaire [NodeJS](https:// | Oui on peut faire du Javascript côté serveur, c'est le cas notamment avec le framework très populaire [NodeJS](https:// | ||
Ligne 175: | Ligne 196: | ||
- | # C | + | ## C |
Pour les puristes ! In progress... | Pour les puristes ! In progress... | ||
- | # A voir (divers) | + | ## A voir (divers) |
+ | |||
+ | ### A lire... | ||
+ | |||
+ | Pour bien voir la différence CGI / FastCGI / mod_wsgi / mod_python: | ||
+ | |||
+ | https:// | ||
- | ## Comparaison de performance mod_php vs. mod_python | + | ### Comparaison de performance mod_php vs. mod_python |
Créons un fichier `test.py`: | Créons un fichier `test.py`: |
programmation_serveur_php_python_nodejs.txt · Dernière modification : 2020/05/19 08:29 de joseph