2013-06-12 3 views
1

J'ai installé apache2, mod_wsgi sur ma machine Debian et a ajouté sur mon fichier apache2.conf:Comment déployer Django avec mod_wsgi sur une machine Debian?

WSGIScriptAlias /home/zurelsoft/Documents/workspace/genalytics/genalytics/wsgi.py 
WSGIPythonPath /home/zurelsoft/Documents/workspace/genalytics 

<Directory /home/zurelsoft/Documents/workspace/genalytics/genalytics> 
<Files wsgi.py> 
Order deny,allow 
Allow from all 
</Files> 
</Directory> 

Mon nom du projet est genalytics. J'utilise Django 1.5. Il y a déjà wsgi.py disponible. Que dois-je faire exécuter le django avec mod_wsgi et où dois-je donner le chemin de mes fichiers statiques. Merci

Modifier

J'ai sur mon fichier apache.conf:

Listen 8000 

Alias /static/ /home/zurelsoft/Documents/workspace/genalytics/fileupload/static 

<Directory /home/zurelsoft/Documents/workspace/genalytics/fileupload/static> 
Order deny,allow 
Allow from all 
</Directory> 


WSGIScriptAlias//home/zurelsoft/Documents/workspace/genalytics/fileupload/static 


<Directory /home/zurelsoft/Documents/workspace/genalytics/fileupload/static> 
<Files wsgi.py> 
Order allow,deny 
Allow from all 
</Files> 
</Directory> 

Mais quand je lance essaie de commencer apache je reçois cette erreur:

(98) Adresse déjà utilisé: make_sock: impossible de lier à l'adresse 0.0.0.0:80 pas de sockets d'écoute disponibles, arrêt Impossible d'ouvrir les journaux Action 'start' fa ilé.

+0

Nous ne savons pas à quoi ressemble votre projet. –

+1

La documentation de Django explique comment configurer les choses. Je ne sais pas pourquoi les gens veulent continuer à se référer à des sites de blogs aléatoires pour savoir comment le faire. https://docs.djangoproject.com/fr/dev/howto/deployment/wsgi/modwsgi/ –

Répondre

1

En supposant que vous avez tout configuré correctement, vous n'avez plus rien à faire.

Dans votre application racine, créez un fichier nommé django.wsgi et écrivez le code suivant.

import os 
import sys 

sys.path.append('/path/to/your/app') 

os.environ['PYTHON_EGG_CACHE'] = '/path/to/your/app/.python-egg' 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

Maintenant, ajoutez un hôte virtuel dans votre configuration apache pour servir les fichiers statiques et d'autres et ajouter les lignes suivantes:

WSGIScriptAlias//path/to/your/app/django.wsgi 

    <Directory /path/to/your/app> 
     Order allow,deny 
     Allow from all 
    </Directory> 

    Alias /robots.txt /path/to/your/app/robots.txt 
    Alias /favicon.ico /path/to/your/app/favicon.ico 
    Alias /images /path/to/your/app/images 
    Alias /static /path/to/your/app/static 

    ErrorLog /path/to/your/app/logs/error.log 
    CustomLog /path/to/your/app/access.log combined 

Souvenez-vous de redémarrer apache. Vous pouvez consulter les liens this et this pour obtenir des informations complètes. En outre, si vous devez savoir comment ajouter un hôte virtuel, vérifiez this.

Espérons que ça aide.

+0

J'ai déjà un fichier appelé wsgi.py fourni par Django. Ai-je besoin de créer un autre fichier appelé django.wsgi – pynovice

+0

Je reçois cette erreur: [....] Démarrage du serveur web: apache2 (98) Adresse déjà utilisée: make_sock: impossible de lier l'adresse [::]: 80 (98) Adresse déjà utilisée: make_sock: impossible de lier l'adresse 0.0.0.0:80 – pynovice

+0

Dans le premier cas, je ne suis pas sûr, essayez les deux. 2ème cas, certaines applications ont déjà pris ce port 80. Changez ce nombre dans votre déclaration VirtualHost. –

0

Il y a un certain nombre de howtos sur le web, dont la plupart fonctionnent avec les versions actuelles de Django, mais je n'étais pas satisfait de leur manque de conformité avec les documents actuels de Django et trouvé le chemin le plus facile de suivre ces instructions:

https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/modwsgi/

Là, il dit: 'a partir de la version 1.4 de Django, startproject aura créé wsgi.py pour vous' - qui ressemble à ceci:

import os 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings") 
from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

Alors maintenant c'est wsgi.py qui se connecte à mod_wsgi, que vous avez installé avec aptitude, et django.wsgi est obsolète.

Maintenant, nous voulons honorer la méthode debian de la configuration des sites apache, donc au lieu de mettre le code suivant dans httpd.conf, comme django-docs proposent, nous créons un fichier dj-monapp dans/etc/apache2/sites-available, l'activer avec a2ensite dj-myapp et désactiver par défaut avec a2dissite par défaut. Les directives WSGI sont écrites avant la section VirtualHost:

WSGIScriptAlias//path/to/mysite.com/mysite/wsgi.py 
WSGIPythonPath /path/to/mysite.com 
<VirtualHost *:80> 
    <Directory /path/to/mysite.com/mysite> 
     <Files wsgi.py> 
      Order deny,allow 
      Allow from all 
     </Files> 
    </Directory> 
</VirtualHost> 

Ceci est pour apache 2,2x, pour une utilisation 2.4+ Exiger que tous les accordées au lieu de Autoriser de tous.

Enfin, configurez le service de fichiers statiques, comme décrit dans les documents django. Les directives sont également placées dans dj-myapp. Pour les fichiers statiques admin cette ligne a fonctionné pour moi:

Alias /static/admin /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin 
+0

il n'y a aucune mention de l'URL du site ici, comment apache sait quoi site web c'est? –

+0

Si vous voulez que Apache serve plusieurs sites sur des domaines séparés, vous ajoutez simplement ce type de directives à la (ou à chaque) dj-myapp dans la section Virtualhost: 'ServerName www.supersite.de ServerAlias ​​supersite.de *. supersite.de DocumentRoot/var/www/super/' Il n'y a rien de spécifique avec django, wsgi ou python ici. –

+0

- - - - - - - - - (son stupide que je ne peux pas entrer des sauts de ligne dans les commentaires :( –

0

créer un fichier appelé app.conf dans /etc/apache2/sites-available.The app.conf:

WSGIPassAuthorization On 
WSGIPythonPath /home/brms/manage/web/brms 
WSGIDaemonProcess pyramid user=brms group=brms threads=4 \ 
    python-path=/usr/local/lib/python3.4/dist-packages/ 
<VirtualHost *:80> 
    <Directory /home/brms/manage/> 
     <Files wsgi.py> 
       WSGIProcessGroup pyramid 
       Require all granted 
     </Files> 
    </Directory> 
    Alias /meetingApp /var/www/meetingApp 
</VirtualHost> 
WSGIScriptAlias//home/brms/manage/wsgi.py 

Activer ce site: sudo a2ensite app.conf Redémarrer Apache: sudo service apache2 restart

Questions connexes