有没有办法使用Ubuntu OS在Azure VM(服务管理)上设置系统范围/全局可见的环境变量?我遇到了在ubuntu /etc/environment
/etc/profile
和/etc/bash.bashrc
中设置它们的情况,我的应用程序代码没有将其设置好。但是,它们会显示在printenv
上。我的猜测是他们因为我的网络服务器的设置方式(Gunicorn + Nginx反向代理)而以某种方式被绕过。
但也许有一种方法可以在Azure VM上设置env变量,这些变量优先于所有内容?我知道Heroku在他们的仪表板中有这个选项(我一直在使用它),Azure Web Apps也是如此(由于各种记录良好的兼容性问题,我无法使用它)。
答案 0 :(得分:1)
作为参考,我在Azure VM上发布了我的步骤。你可以查看它们并与你的进行比较。
ssh user@vm-name.cloudapp.net
安装工具pip
和virtualenv
:
sudo apt-get update
sudo apt-get install python-pip
sudo pip install virtualenv
准备virtualenv以安装gunicorn
和django
mkdir environments
virtualenv environments/experiment/
cd environments/experiment/
source bin/activate
pip install gunicorn django
创建一个django项目并使用gunicorn
运行它并尝试访问它:
django-admin startproject mysite
bin/gunicorn --chdir=mysite -w 3 --env DJANGO_SETTINGS_MODULE=mysite.settings mysite.wsgi:application
# using w3m to access http://localhost:8000
w3m http://localhost:8000
安装Nginx并配置反向代理:
sudo apt-get install nginx
sudo cp /etc/nginx/site-available/default /etc/nginx/site-available/default.bak
sudo vim /etc/nginx/site-available/default
以下nginx的default
文件中已配置的内容:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
include proxy_params;
proxy_pass http://unix:/home/<user>/environments/experiment/mysite/mysite.sock;
# I also try to config `http://localhost:8000;`, it's ok too.
}
}
我也尝试配置proxy_pass http://localhost:8000;
,它也可以。
重新启动nginx
服务并重新启动gunicorn
:
sudo service nginx restart
bin/gunicorn --chdir=mysite --bind unix:/home/<user>/environments/experiment/mysite/mysite.sock -w 3 --env DJANGO_SETTINGS_MODULE=mysite.settings mysite.wsgi:application
我发现应用程序无法在应用程序启动后设置环境变量。因此,请在source /etc/...
启动之前运行命令gunicorn
。
如有任何疑虑,请随时告诉我。