मैं django + gunicorn + nginx का उपयोग करने पर अपना पहला प्रयास तैनात कर रहा हूं।मैं कैसे जांच सकता हूं कि बंदूकधारी काम कर रही है और nginx के साथ संचार कर रही है?
- मेरे पास django काम कर रहा है (
curl -XGET http://127.0.0.0.1:8000
अगर मैं विकास सर्वर चलाता हूं तो ठीक काम करता है)। - मेरे पास स्थिर सामग्री के लिए nginx काम कर रहा है (उदाहरण के लिए मैं अपने ब्राउज़र में
http://example.com/static/my_pic.png
पुनर्प्राप्त कर सकता हूं)। - मुझे अपनी वेबसाइट से कोई भी wsgi सामग्री नहीं मिल रही है, और मुझे कोई अच्छी समस्या निवारण मार्गदर्शिका नहीं मिली है (क्या यह सिर्फ हर किसी के लिए काम करता है ?!)।
(खोल :)
supervisorctl status my_app
my_app RUNNING pid 1002, uptime 0:29:51
यहाँ में बॉयलरप्लेट स्क्रिप्ट मैं इस्तेमाल किया यह शुरू करने के लिए है:: मैं पर्यवेक्षक, जो रिपोर्ट है कि यह वास्तव में चल रहा है का उपयोग कर gunicorn शुरू
#!/bin/bash
#script variables
NAME="gunicorn_myapp" # Name of process
DJANGODIR=/webapps/www/my_project # Django project directory
SOCKFILE=/webapps/www/run/gunicorn.sock # communicte using this socket
USER=app_user # the user to run as
GROUP=webapps # the group to run as
NUM_WORKERS=3
DJANGO_SETTINGS_MODULE=my_project.settings # settings file
DJANGO_WSGI_MODULE=my_project.wsgi # WSGI module name
# Activate the virtual environment
cd $DJANGODIR
source ../bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
exec ../bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE
यहाँ (संघनित) nginx कॉन्फ़िगरेशन फ़ाइल:
upstream my_server {
server unix:/webapps/www/run/gunicorn.sock fail_timeout=10s;
}
server {
listen 80;
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
listen 80;
server_name example.com;
client_max_body_size 4G;
access_log /webapps/www/logs/nginx-access.log;
error_log /webapps/www/logs/nginx-error.log;
location /favicon.ico { access_log off; log_not_found off; }
location /static/ {
autoindex on;
alias /webapps/www/my_project/my_app/static/;
}
location /media/ {
autoindex on;
alias /webapps/www/my_project/my_app/media/;
}
location/{
proxy_pass http://my_server;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://example.com;
break;
}
}
location /robots.txt {
alias /webapps/www/my_project/my_app/static/robots.txt ;
}
# Error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /webapps/www/my_project/my_app/static/;
}
}
तो: गनिकोर्न चल रहा है, nginx चल रहा है ... क्या परीक्षण (और कैसे?) यह निर्धारित करने के लिए करना चाहिए कि क्या गनिकोर्न Wsgi सामान ठीक से कर रहा है (और यदि nginx सही ढंग से कहा गया सामान छेड़छाड़ कर रहा है)?
संपादित करें: मैंने समस्या को यूनिक्स सॉकेट के माध्यम से बंदूक और nginx के बीच संचार में संकुचित कर दिया है। अगर मैं $ SOCKFILE को 0.0.0.0:80
पर बाध्य करने के लिए बदलता हूं और nginx को रोकता हूं, तो ऐप के पेज मेरी वेबसाइट से परोसे जाते हैं। बुरी खबर यह है कि सॉकेट फ़ाइल स्ट्रिंग्स दो conf फ़ाइलों के बीच बिल्कुल समान हैं, इसलिए मुझे नहीं पता कि वे संचार क्यों नहीं कर रहे हैं। मुझे लगता है कि इसका मतलब है कि nginx सही तरीके से डेटा लाने और गुजरने के माध्यम से नहीं है?
ठीक है, आप देख कर बता सकते हैं कि यह आपकी साइट, कार्य करता है आप जो कहते हैं कि ऐसा नहीं है। Nginx कॉन्फ़िगरेशन का हिस्सा कहां है जहां आप $ SOCKFILE सॉकेट के माध्यम से प्रॉक्सी को बताते हैं? –
क्षमा करें डैनियल, मैंने nginx कॉन्फ़िगरेशन फ़ाइल (टिप्पणियां हटा दी हैं) को जोड़ा है। प्रॉक्सी_पास प्रविष्टि अब वहां है। एसई पर आपके उत्तरों के लिए बहुत अधिक धन्यवाद - उन्होंने पिछले महीने में मेरी अधिकांश डीजेंगो समस्याओं को हल करने में मदद की है। – Escher
डैनियल, आपके सुझाव पर मुझे सॉकेट के साथ क्या चल रहा है डीबग करने पर जाना पड़ा है। मैंने अधिक जानकारी के साथ संपादित किया है; मुझे उम्मीद है कि यह उपयोगी है। – Escher