#format wiki #language fr #acl +All:read = 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 == 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. 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. 1. profit == 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 }}} ---- CatégoriePagePublique