Nginx, Apache, mod_wsgi के साथ Django ऐप को तैनात करना


13

मेरे पास एक django ऐप है जो मानक विकास वातावरण का उपयोग करके स्थानीय रूप से चल सकता है। मैं अब इसे उत्पादन के लिए EC2 में स्थानांतरित करना चाहता हूं। Django प्रलेखन अपाचे और mod_wsgi के साथ चलने का सुझाव देता है, और स्थैतिक फ़ाइलों को लोड करने के लिए nginx का उपयोग करता है।

मैं एक Ec2 बॉक्स पर Ubuntu 12.04 चला रहा हूं। मेरा Django ऐप, "ddt", में 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()

मैं apt से स्थापित mod_wsgi है। मेरी अपाचे / httpd.conf शामिल हैं

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 / साइट्स-सक्षम के तहत

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

अगर मैं सही हूं, तो ऊपर दी गई ये 3 फाइलें मेरे django ऐप को पोर्ट 8080 पर सही ढंग से चलने देंगी

मेरे पास निम्न nginx /xy.conf फ़ाइल है

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 / साइट्स-सक्षम के तहत

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

अगर मैं सही हूं कि इन दो फाइलों को HTTP पोर्ट 80 पर रिक्वेस्ट लेने के लिए nginx को सेटअप करना चाहिए, लेकिन फिर अपाचे के लिए डायरेक्ट रिक्वेस्ट जो कि पोर्ट 8080 पर django ऐप चला रही है। !

यह कैसे डीबग करने के लिए कोई सलाह?


क्या आप कृपया अपनी nginx.conf फ़ाइल पोस्ट कर सकते हैं? आपके होस्ट को सक्षम नहीं करने के लिए nginx के साथ कुछ समस्या है, हो सकता है कि इसमें लाइन शामिल हो जैसे /etc/nginx/conf.d/*.conf; और आपकी कॉन्फ़िग फ़ाइल .conf नहीं है। यदि आप nginx स्वागत पृष्ठ देखते हैं, तो इसका मतलब है कि आपका कॉन्फ़िगरेशन लागू नहीं है।
आंद्रेई मिखलात्सोव

भविष्य के उपयोगकर्ताओं के लिए, मुझे यह उल्लेख करना चाहिए कि mod_wsgi-express के आगमन के साथ, हमें किसी भी अपाचे कॉन्फिग्रेशन को करने की आवश्यकता नहीं है , कोई VirtualHost परिभाषाएं नहीं हैं, कुछ भी नहीं है जो कि कॉन्फिडेंस और साइट्स फोल्डर में नहीं है। यह सब mod_wsgi- एक्सप्रेस द्वारा एक अच्छी तरह से अनुकूलित तरीके से किया जाता है। विवरण के लिए ग्राहम के ब्लॉग पोस्ट देखें
अनुपम

जवाबों:


1

कृपया ध्यान दें, कि आपको अपने अनुरोधों में www.mysite.com या mysite.com का उपयोग करना चाहिए (जैसा कि यह कॉन्फ़िगर फ़ाइल में परिभाषित किया गया है):

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

लेकिन ऐसा लगता है, आप लोकलहोस्ट द्वारा या आईपी पते द्वारा साइट का अनुरोध कर रहे हैं


0

सबसे पहले कृपया सुनिश्चित करें कि आप अपने आवेदन को 127.0.0.1:8080 पर एक्सेस कर सकते हैं और कृपया nginx_error.log की सामग्री पोस्ट कर सकते हैं। Nginx conf फ़ाइल के बाद कॉपी पेस्ट की कोशिश करें और जाँच करें कि यह काम कर रहा है। मैं अपने अजगर आवेदन के लिए एक ही विन्यास का उपयोग कर रहा हूं।

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 कॉन्फिग में, आपने /etc/nginx/proxy.confएक अंदर फ़ाइल ( ) के लिए पथ को शामिल किया है location। मेरा मानना ​​है कि यह बाहर का है


0

सबसे पहले, सभी के प्यार के लिए कृपया पवित्र है, नगीनक्स और httpd दोनों का उपयोग न करें। यह डीबग करने के लिए गधे में दर्द हो रहा है।

दूसरी बात, डॉक्स में कहीं नहीं मैंने देखा है कि वे इस तरह के सेटअप की सलाह देते हैं।

अपाचे या नगनेक्स का प्रयोग करें, इससे आपकी आधी समस्याएं खत्म हो जाएंगी।

इसके अलावा अपने nginx.conf की जाँच करें अगर यह अन्य dirs की फ़ाइलों को शामिल नहीं करता है, तो आपके पास ओवरराइड करने वाली एक वैश्विक vhost हो सकती है।

WSGI परिमों के पास apache config में डोमेन को हटाने के लिए आपको अपनी पोस्ट को भी संपादित करना चाहिए, क्योंकि आप वर्तमान में अपना उत्पादन सेटअप लीक कर रहे हैं।

अन्य साइटों को साइटों से हटा दें-सक्षम करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.