Django Uygulamasını Nginx, Apache, mod_wsgi ile dağıtma


13

Standart geliştirme ortamını kullanarak yerel olarak çalışabilen bir django uygulamam var. Şimdi bunu üretim için EC2'ye taşımak istiyorum. Django belgeleri, apache ve mod_wsgi ile çalışmayı ve statik dosyaları yüklemek için nginx kullanmanızı önerir.

Bir Ec2 kutusunda Ubuntu 12.04 çalıştırıyorum. Django uygulamam "ddt", ddt.wsgi ile bir "apache" alt dizini içeriyor

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()

Ben apt mod_wsgi yüklü var. Apache / httpd.conf dosyamda

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>

Apache2 / sites özellikli altında

<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>

Doğruysam, yukarıdaki 3 dosya django uygulamamın 8080 bağlantı noktasında çalışmasına izin vermelidir .

Aşağıdaki nginx / proxy.conf dosyasına sahibim

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;

Nginx / sites özellikli altında

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/;
  }
}      

Bu iki dosya düzeltirse, HTTP bağlantı noktası 80'de istekleri almak için nginx'i kurmalı, ancak daha sonra bağlantı noktası 8080'de django uygulamasını çalıştıran apache'ye doğrudan istekte bulunmalıdır. Mysite.com'a gidersem, gördüğüm tek şey Nginx'e hoş geldiniz !

Bu hata ayıklama için herhangi bir tavsiye?


Nginx.conf dosyanızı gönderebilir misiniz? nginx'in ana makinenizi etkinleştirmemesi ile ilgili bir sorun var, belki satır dahil /etc/nginx/conf.d/*.conf; ve yapılandırma dosyanız .conf değil. Nginx karşılama sayfasını görürseniz, yapılandırmanız uygulanmaz.
Andrei Mikhaltsov

Gelecekteki kullanıcılar için, mod_wsgi-express'in ortaya çıkmasıyla, herhangi bir Apache yapılandırması, VirtualHost tanımı, conf ve site klasörlerinde hiçbir şey yapmamız gerekmediğini belirtmeliyim . Her şey otomatik olarak mod_wsgi-express tarafından iyi optimize edilmiş bir şekilde yapılır. Ayrıntılar için
Graham'in

Yanıtlar:


1

isteklerinizde (config dosyasında tanımlandığı gibi) www.mysite.com veya mysite.com adresini kullanmanız gerektiğini lütfen unutmayın :

server {
  listen 80;
  server_name www.mysite.com mysite.com;

ancak şuna benziyor: Siteyi localhost veya IP adresine göre talep ediyorsunuz


0

Her şeyden önce lütfen 127.0.0.1:8080 adresinden uygulamanıza erişebildiğinizden emin olun ve lütfen nginx_error.log içeriğini yayınlayın. Nginx conf dosyasını izleyerek Kopyala yapıştırmayı deneyin ve çalışıp çalışmadığını kontrol edin. Python uygulamam için aynı yapılandırmayı kullanıyorum.

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";


    ##
    # Virtual Host Configs
    ##

    server {
        listen 80;

        location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://127.0.0.1:8080;
        }

    location /static {
        root /home/ubuntu/www/myproject/webapp;
    }

    }


    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

}

0

NGINX yapılandırmanıza, /etc/nginx/proxy.confa içindeki conf dosyasının ( ) yolunu eklediniz location. Dışarıda olduğuna inanıyorum .


0

Birincisi, lütfen kutsal olan her şeyin sevgisi için, hem nginx hem de httpd kullanmayın. Bu hata ayıklamak için eşek bir ağrı olacak.

İkincisi, belgelerin hiçbir yerinde bu tür bir kurulum önermediklerini görmedim.

Apache veya nginx kullanın, bu sorunlarınızın yarısını ortadan kaldıracaktır.

Ayrıca nginx.conf'unuzu, diğer dizinlerden dosyalar içermiyorsa, kendinizinkini geçersiz kılan küresel bir hayalete sahip olup olmadığını kontrol edin.

Üretim kurulumunuzu sızdırıyorken, WSGI parametrelerine yakın bir apache yapılandırmasında alan adını kaldırmak için yazınızı da düzenlemelisiniz.

Sitelerin etkin olduğu diğer siteleri kaldırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.