我在哪里为Django设置环境变量?

时间:2017-06-22 07:57:34

标签: django bash ubuntu environment-variables

大家好!

在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脚本设置它们。它工作得很好。

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

    编辑:

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

    我尝试了'source .bashrc'和logout / login。但它没有用。

    对于cource,'echo $ some_env_var'正在工作,我说,django无法阅读。

4 个答案:

答案 0 :(得分:5)

.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-style部分)

答案 1 :(得分:5)

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

sudo nano your_environment/bin/activate

然后在底部添加所需的值,例如:

export MY_KEY="12345"

然后保存。请记住,重新启动ENV才能使更改生效。

答案 2 :(得分:4)

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

export('the_name_in_bashrc', some_value)

然后在settings.py

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

答案 3 :(得分:0)

最简单的解决方案是使用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中。