J'ai une application django qui peut s'exécuter localement en utilisant l'environnement de développement standard. Je veux maintenant déplacer cela vers EC2 pour la production. La documentation de django suggère d'exécuter avec apache et mod_wsgi, et d'utiliser nginx pour charger des fichiers statiques.
J'utilise Ubuntu 12.04 sur une box Ec2. Mon application Django, "ddt", contient un sous-répertoire "apache" avec ddt.wsgi
import os, sys
apache_configuration= os.path.dirname(__file__)
project = os.path.dirname(apache_configuration)
workspace = os.path.dirname(project)
sys.path.append(workspace)
sys.path.append('/usr/lib/python2.7/site-packages/django/')
sys.path.append('/home/jeffrey/www/ddt/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'ddt.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
J'ai installé mod_wsgi depuis apt. Mon apache / httpd.conf contient
NameVirtualHost *:8080
WSGIScriptAlias / /home/jeffrey/www/ddt/apache/ddt.wsgi
WSGIPythonPath /home/jeffrey/www/ddt
<Directory /home/jeffrey/www/ddt/apache/>
<Files ddt.wsgi>
Order deny,allow
Allow from all
</Files>
</Directory>
Sous apache2 / compatible avec les sites
<VirtualHost *:8080>
ServerName www.mysite.com
ServerAlias mysite.com
<Directory /home/jeffrey/www/ddt/apache/>
Order deny,allow
Allow from all
</Directory>
LogLevel warn
ErrorLog /home/jeffrey/www/ddt/logs/apache_error.log
CustomLog /home/jeffrey/www/ddt/logs/apache_access.log combined
WSGIDaemonProcess datadriventrading.com user=www-data group=www-data threads=25
WSGIProcessGroup datadriventrading.com
WSGIScriptAlias / /home/jeffrey/www/ddt/apache/ddt.wsgi
</VirtualHost>
Si j'ai raison, ces 3 fichiers ci-dessus devraient permettre correctement à mon application django de s'exécuter sur le port 8080 .
J'ai le fichier nginx / proxy.conf suivant
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
Sous nginx / compatible avec les sites
server {
listen 80;
server_name www.mysite.com mysite.com;
access_log /home/jeffrey/www/ddt/logs/nginx_access.log;
error_log /home/jeffrey/www/ddt/logs/nginx_error.log;
location / {
proxy_pass http://127.0.0.1:8080;
include /etc/nginx/proxy.conf;
}
location /media/ {
root /home/jeffrey/www/ddt/;
}
}
Si je me trompe, ces deux fichiers devraient configurer nginx pour prendre les requêtes sur le port HTTP 80, mais diriger les requêtes vers apache qui exécute l'application django sur le port 8080. Si je vais sur mysite.com, tout ce que je vois c'est Bienvenue dans Nginx !
Des conseils sur la façon de déboguer cela?