1786
Commentaire:
|
3575
|
Texte supprimé. | Texte ajouté. |
Ligne 5: | Ligne 5: |
La méthode avec uwsgi est plus propre, celle avec le fastcgi de django un peu plus simple. == En utilisant le mode fastcgi de django == |
|
Ligne 9: | Ligne 11: |
1. Choisir un port entre 1025 et 65535, on le note p | |
Ligne 14: | Ligne 15: |
RewriteRule ^(.*)$ fcgi://127.0.0.1:8000 [P] | RewriteRule ^(.*)$ unix:/path/to/socket.sock|fcgi://localhost [P,NE,QSA,L] |
Ligne 16: | Ligne 17: |
en remplaçant 8000 par p 1. lancez {{{./manage.py runfcgi method=threaded host=127.0.0.1 port=8000 daemonize=false workdir=/}}} toujours en remplaçant 8000 par p pour tester. Quand tout marche bien, vous pouvez mettre {{{daemonize=false}}} pour lancer le serveur fcgi en arrière plan. |
1. Lancez {{{./manage.py runfcgi method=threaded socket=/path/to/socket.sock daemonize=false workdir=/}}} pour tester. Quand tout marche bien, vous pouvez mettre {{{daemonize=false}}} pour lancer le serveur fcgi en arrière plan. |
Ligne 20: | Ligne 20: |
== En utilisant uwsgi == 1. Choisir un dossier dans votre www (ça peut être le dossier www). On l'appellera le dossier A 1. Aller dans votre projet django, on dira qu'il est dans le dossier B 1. Faites un {{{./manage.py collectstatic}}}. Disons que les fichiers statiques sont collectés dans le dossier C 1. Faire un {{{ln -s C A/static}}} 1. Créer un .htaccess dans le dossier A avec dedans : . {{{ RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ unix:/path/to/socket.sock|fcgi://localhost [P,NE,QSA,L] }}} 1. créer un fichier B/monprojetdjango.ini . {{{ [uwsgi] # on utilise un processus maître du contrôle les workers master = true # on utilise python plugins = python # On tue les worker si le processus maître meurt no-orphans = true # On utilise fastcgi protocol = fastcgi # chemin vers la socket unix que créer uwsgi socket = /path/to/socket.sock # on ne doit les droit en lecture/écriture sur la socket a moi seule. # apache arrive a y lire/ecrire car il s'execute en tant que moi avec ruid2 chmod-socket = 600 # on se place a la racine du projet django chdir = B # on charge le module wsgi du projet django module = project_name.wsgi # On peut avoir jusqu'à 64 worker (c'est beaucoup, mais il ne sont activé que si nécessaire) workers = 64 # On utilise un algo qui économise les ressource en n'ajoutant de worker que si nécessaire cheaper-algo = spare # et on commance avec 1 seul worker cheaper = 1 cheaper-initial = 1 # on met 2 thread par worker. Il s'agit de thread python donc ça ne sert a rien # de mettre un nombre plus élevé à cause du GIL threads = 2 }}} 1. lancer {{{uwsgi --ini B/monprojetdjango.ini}}} pour tester. Quand tout marche bien, vous pouvez lancer {{{uwsgi --ini B/monprojetdjango.ini --daemonize /path/to/log/file.log}}} pour lancer uwsgi en arrière plan. 1. Vous pouvez consulter {{{man uwsgi}}} pour voir toutes les options possibles |
|
Ligne 27: | Ligne 73: |
@reboot B/manage.py runfcgi method=threaded host=127.0.0.1 port=p daemonize=true workdir=B | @reboot B/manage.py runfcgi method=threaded /path/to/socket.sock daemonize=true workdir=B |
Ligne 29: | Ligne 75: |
* prendre p=8000 est une mauvaise idée comme c'est le port par defaut qu'utilise django, il risque d'être pris par quelqu'un d'autre. Un bon moyen de choisir un port est de le prendre au hasard, par exemple : {{{ valentin@nashi $ echo $(($(($RANDOM * 2)) + $(($RANDOM % 2)))) 15035 |
ou . {{{ @reboot uwsgi --ini B/monprojetdjango.ini --daemonize /path/to/log/file.log |
Ligne 34: | Ligne 79: |
donnera un port entre 0 et 65535. |
Faire fonctionner un site django sur sa page perso
La méthode avec uwsgi est plus propre, celle avec le fastcgi de django un peu plus simple.
En utilisant le mode fastcgi de django
- Choisir un dossier dans votre www (ça peut être le dossier www). On l'appellera le dossier A
- Aller dans votre projet django, on dira qu'il est dans le dossier B
Faites un ./manage.py collectstatic. Disons que les fichiers statiques sont collectés dans le dossier C
Faire un ln -s C A/static
- Créer un .htaccess dans le dossier A avec dedans :
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ unix:/path/to/socket.sock|fcgi://localhost [P,NE,QSA,L]
Lancez ./manage.py runfcgi method=threaded socket=/path/to/socket.sock daemonize=false workdir=/ pour tester. Quand tout marche bien, vous pouvez mettre daemonize=false pour lancer le serveur fcgi en arrière plan.
- profit
En utilisant uwsgi
1. Choisir un dossier dans votre www (ça peut être le dossier www). On l'appellera le dossier A
- Aller dans votre projet django, on dira qu'il est dans le dossier B
Faites un ./manage.py collectstatic. Disons que les fichiers statiques sont collectés dans le dossier C
Faire un ln -s C A/static
- Créer un .htaccess dans le dossier A avec dedans :
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ unix:/path/to/socket.sock|fcgi://localhost [P,NE,QSA,L]
- créer un fichier B/monprojetdjango.ini
[uwsgi] # on utilise un processus maître du contrôle les workers master = true # on utilise python plugins = python # On tue les worker si le processus maître meurt no-orphans = true # On utilise fastcgi protocol = fastcgi # chemin vers la socket unix que créer uwsgi socket = /path/to/socket.sock # on ne doit les droit en lecture/écriture sur la socket a moi seule. # apache arrive a y lire/ecrire car il s'execute en tant que moi avec ruid2 chmod-socket = 600 # on se place a la racine du projet django chdir = B # on charge le module wsgi du projet django module = project_name.wsgi # On peut avoir jusqu'à 64 worker (c'est beaucoup, mais il ne sont activé que si nécessaire) workers = 64 # On utilise un algo qui économise les ressource en n'ajoutant de worker que si nécessaire cheaper-algo = spare # et on commance avec 1 seul worker cheaper = 1 cheaper-initial = 1 # on met 2 thread par worker. Il s'agit de thread python donc ça ne sert a rien # de mettre un nombre plus élevé à cause du GIL threads = 2
lancer uwsgi --ini B/monprojetdjango.ini pour tester. Quand tout marche bien, vous pouvez lancer uwsgi --ini B/monprojetdjango.ini --daemonize /path/to/log/file.log pour lancer uwsgi en arrière plan.
Vous pouvez consulter man uwsgi pour voir toutes les options possibles
Notes
- Pensez a faire correspondre le urls.py de votre projet et le STATIC_URL avec le prefixe de votre page perso. par exemple :
STATIC_URL=/login/static
Ça peut être bien de mettre la commande pour démarrer le serveur fcgi dans un cron pour la lancer au démarrage de la machine : lancer crontab -e et mettez dedans :
@reboot B/manage.py runfcgi method=threaded /path/to/socket.sock daemonize=true workdir=B
ou@reboot uwsgi --ini B/monprojetdjango.ini --daemonize /path/to/log/file.log