868
Commentaire:
|
← Version 9 à la date du 2016-09-07 18:04:04 ⇥
3661
|
Texte supprimé. | Texte ajouté. |
Ligne 4: | Ligne 4: |
= 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. |
|
Ligne 5: | Ligne 7: |
= Faire fonctionner un site django sur sa page perso = |
== En utilisant le mode fastcgi de django == |
Ligne 11: | Ligne 12: |
1. Choisir un port entre 1025 et 65535, on le note p | |
Ligne 13: | Ligne 13: |
{{{ | . {{{ |
Ligne 16: | Ligne 16: |
RewriteRule ^(.*)$ fcgi://127.0.0.1:8000 [P] | RewriteRule ^(.*)$ unix:/path/to/socket.sock|fcgi://localhost [P,NE,QSA,L] |
Ligne 18: | Ligne 18: |
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 |
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 21: | 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 # je ne donne les droits en lecture/écriture sur la socket qu'à 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'à 8 worker workers = 9 # 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 }}} Si vous utilisez un virtualenv, ajoutez également a la configuration de uwsgi: . {{{ virtualenv=/path/to/virtualenv }}} 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_python}}} 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 }}} |
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 # je ne donne les droits en lecture/écriture sur la socket qu'à 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'à 8 worker workers = 9 # 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
Si vous utilisez un virtualenv, ajoutez également a la configuration de uwsgi:virtualenv=/path/to/virtualenv
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_python 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