如何在Azure VM上设置全局可见的环境变量(v1)

时间:2015-12-10 08:50:48

标签: python bash ubuntu azure nginx

有没有办法使用Ubuntu OS在Azure VM(服务管理)上设置系统范围/全局可见的环境变量?我遇到了在ubuntu /etc/environment /etc/profile/etc/bash.bashrc中设置它们的情况,我的应用程序代码没有将其设置好。但是,它们会显示在printenv上。我的猜测是他们因为我的网络服务器的设置方式(Gunicorn + Nginx反向代理)而以某种方式被绕过。

但也许有一种方法可以在Azure VM上设置env变量,这些变量优先于所有内容?我知道Heroku在他们的仪表板中有这个选项(我一直在使用它),Azure Web Apps也是如此(由于各种记录良好的兼容性问题,我无法使用它)。

1 个答案:

答案 0 :(得分:1)

作为参考,我在Azure VM上发布了我的步骤。你可以查看它们并与你的进行比较。

  1. 连接到新的Azure VM:ssh user@vm-name.cloudapp.net
  2. 安装工具pipvirtualenv

    sudo apt-get update
    sudo apt-get install python-pip
    sudo pip install virtualenv
    
  3. 准备virtualenv以安装gunicorndjango

    mkdir environments
    virtualenv environments/experiment/ 
    cd environments/experiment/ 
    source bin/activate 
    pip install gunicorn django
    
  4. 创建一个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
    
  5. 安装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
    
  6. 以下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;,它也可以。

    1. 重新启动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
      
    2. 我发现应用程序无法在应用程序启动后设置环境变量。因此,请在source /etc/...启动之前运行命令gunicorn

      如有任何疑虑,请随时告诉我。