[ক্রস পোস্ট এবং এটিকে https://stackoverflow.com/questions/21933955 থেকে সম্পাদিত হিসাবে স্ট্যাকওভারফ্লোয়ের জন্য এটি অত্যন্ত সাসাদমিন-জাতীয় হিসাবে বিবেচিত হয়েছিল]]
আমার কাছে ডিনার কনটেইনার রয়েছে এনগিনেক্স, এটি অন্য ডকারের ধারকটির সাথে লিঙ্ক করে। দ্বিতীয় ধারকটির হোস্টের নাম এবং আইপি ঠিকানা এনগিনেক্স পাত্রে প্রারম্ভকালে পরিবেশের ভেরিয়েবল হিসাবে লোড করা হয়, তবে তার আগে জানা যায় না (এটি গতিশীল)। আমি nginx.conf
এই মানগুলি ব্যবহার করতে চাই - যেমন
upstream gunicorn {
server $APP_HOST_NAME:$APP_HOST_PORT;
}
প্রারম্ভকালে আমি এনগিনেক্স কনফিগারেশনে পরিবেশের পরিবর্তনগুলি কীভাবে পেতে পারি?
সম্পাদনা 1
নীচের প্রস্তাবিত উত্তরের পরে এটিই পুরো ফাইলটি:
env APP_WEB_1_PORT_5000_TCP_ADDR;
# Nginx host configuration for django_app
# Django app is served by Gunicorn, running under port 5000 (via Foreman)
upstream gunicorn {
server $ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"}:5000;
}
server {
listen 80;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location /static/ {
alias /app/static/;
}
location /media/ {
alias /app/media/;
}
location / {
proxy_pass http://gunicorn;
}
}
পুনরায় লোড করা nginx তারপর ত্রুটিগুলি:
$ nginx -s reload
nginx: [emerg] unknown directive "env" in /etc/nginx/sites-enabled/default:1
সম্পাদনা 2: আরও বিশদ
বর্তমান পরিবেশ পরিবর্তনশীল
root@87ede56e0b11:/# env | grep APP_WEB_1
APP_WEB_1_NAME=/furious_turing/app_web_1
APP_WEB_1_PORT=tcp://172.17.0.63:5000
APP_WEB_1_PORT_5000_TCP=tcp://172.17.0.63:5000
APP_WEB_1_PORT_5000_TCP_PROTO=tcp
APP_WEB_1_PORT_5000_TCP_PORT=5000
APP_WEB_1_PORT_5000_TCP_ADDR=172.17.0.63
রুট nginx.conf:
root@87ede56e0b11:/# head /etc/nginx/nginx.conf
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
env APP_WEB_1_PORT_5000_TCP_ADDR;
সাইট এনগিনেক্স কনফিগারেশন:
root@87ede56e0b11:/# head /etc/nginx/sites-available/default
# Django app is served by Gunicorn, running under port 5000 (via Foreman)
upstream gunicorn {
server $ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"}:5000;
}
server {
listen 80;
Nginx কনফিগারেশন পুনরায় লোড করুন:
root@87ede56e0b11:/# nginx -s reload
nginx: [emerg] directive "server" is not terminated by ";" in /etc/nginx/sites-enabled/default:3
app_web_1
এটি একটি নতুন আইপি অ্যাড্রেস পাবে, সুতরাং আপনার এনজিঙ্ক্স ধারকটিও আবার চালু করতে হবে। ডকার একটি আপডেট দিয়ে এটি পুনরায় আরম্ভ করবে /etc/hosts
যাতে আপনার nginx কনফিগারেশন ফাইল (গুলি) পরিবর্তন করতে হবে না।
server $ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"}:5000;
সঙ্গেserver app_web_1:5000;