【问题标题】:Where do I set environment variables for Django?我在哪里为 Django 设置环境变量?
【发布时间】:2017-11-25 09:13:01
【问题描述】:

大家!

AWS 中的 Django 1.11 + PostgreSQL 9.6 + Gunicorn + Ubuntu 16.04

我想为敏感信息设置环境变量。(django密钥,数据库密码...)

我研究了很多关于设置方法的文章。

但是当我尝试 os.environ['env_name'] 时,

  1. .bashrc:不工作

  2. .bash_profile:不工作

  3. .profile:不工作

  4. /etc/environment:不工作

  5. Gunicorn 脚本文件。(systemd):我将它们设置在 gunicorn systemd 脚本中。它工作得很好。

但是因为我也想在其他程序中使用环境变量,所以我将它们设置在1~5个配置之间。我不明白为什么 1~5 配置不起作用。设置环境变量是否有范围或优先级?

编辑:

我使用 Ubuntu 16.04 服务器。我无法重新启动终端会话。

我尝试了“source .bashrc”并注销/登录。但它没有用。

当然,'echo $some_env_var' 工作正常,我说 django 无法读取。

【问题讨论】:

  • 在 .bashrc 中设置环境变量应该可以。设置环境变量并重新启动终端会话后,确保您有源 .bashrc。
  • 您需要确保为实际运行服务器的用户设置它们。
  • 我使用 Ubuntu 16.04 服务。我无法重新启动终端会话。
  • 请注意,注销/登录与重新启动终端会话相同。
  • @DanielRoseman:但是/etc/environment 中设置的变量不是对整个系统的每个用户都可用吗?为什么这不起作用?

标签: django bash ubuntu environment-variables


【解决方案1】:

在您的服务器中创建一个名为 .bashrc 的文件

export('the_name_in_bashrc', some_value)

然后在settings.py

import os
some_variable = os.environ.get('the_name_in_bashrc')

【讨论】:

  • 这个答案不适合生产
  • 为了让它在生产环境中工作,你需要在 web 服务器级别设置环境变量,例如你设置 gunicorn 脚本的地方。
  • @User 为什么?你能详细说明一下吗?
  • Exporting like 给我一个错误。在 Ubuntu 中我必须导出 MYVAR=1234
【解决方案2】:

.bashrc 将适用于本地开发,但不适用于生产环境。我只是花了很多时间寻找这个问题的答案,这对我有用:

1) 在服务器的某处创建一个名为 settings.ini 的文件。我在 /etc/project/settings.ini 中做了这个

2) 使用以下格式将配置数据添加到该文件,其中键可以是环境变量,值是字符串。请注意,您不需要将值括在引号中。

[section]
secret_key_a=somestringa
secret_key_b=somestringb

3) 使用 python 的configparser 库访问这些变量。下面的代码可能在您的 django 项目的设置文件中。

from configparser import RawConfigParser

config = RawConfigParser()
config.read('/etc/project/settings.ini')

DJANGO_SECRET = config.get('section', 'secret_key_a')

来源:https://code.djangoproject.com/wiki/SplitSettings(ini风格部分)

【讨论】:

    【解决方案3】:

    如前所述,最简单的解决方案是使用 os.environ.get,然后以某种方式设置服务器环境变量(配置存储、bash 文件等)

    另一种稍微复杂的方法是使用python-decouple 和 .env 文件。这是一个快速的操作方法:

    1) 安装 python-decouple(如果不使用 Docker,最好在 venv 中):

    pip install python-decouple
    

    2) 在你的 Django 项目的根目录下创建一个 .env 文件,添加一个类似的键;

    SECRET_KEY=SomeSecretKeyHere
    

    3) 在您的 settings.py 或您想要使用配置值的任何其他文件中:

    from decouple import config
    
    ...
    
    SECRET_KEY = config('SECRET_KEY')
    

    4) 由于您可能不希望这些秘密最终出现在您的版本控制系统中,请将文件添加到您的 .gitignore 中。为了更轻松地设置新项目,您可以将 .env_default 检入到 VCS 中,其中包含在生产中未使用的默认/虚拟值。

    【讨论】:

      【解决方案4】:

      如果您使用的是虚拟 ENV,则可以将环境变量添加到该特定环境。您可以在终端中使用export KEY=VALUE,但这不会持续存在。如果您希望您的值保持不变,您可以编辑该文件:

      sudo nano your_environment/bin/activate

      然后在底部添加您想要的值,例如:

      export MY_KEY="12345"

      然后保存。请记住重新启动您的 ENV 以使更改生效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-19
        相关资源
        最近更新 更多