CransWiki:

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
  2. Aller dans votre projet django, on dira qu'il est dans le dossier B
  3. Faites un ./manage.py collectstatic. Disons que les fichiers statiques sont collectés dans le dossier C

  4. Faire un ln -s C A/static

  5. 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]
  6. 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.

  7. 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
  2. Faites un ./manage.py collectstatic. Disons que les fichiers statiques sont collectés dans le dossier C

  3. Faire un ln -s C A/static

  4. 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]
  5. 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
  6. 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.

  7. Vous pouvez consulter man uwsgi_python pour voir toutes les options possibles

Notes


CatégoriePagePublique

CransWiki: PagesPerso/Django (dernière édition le 2016-09-07 18:04:04 par ValentinSamir)