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