大家好!
在AWS中使用Django 1.11 + PostgreSQL 9.6 + Gunicorn + Ubuntu 16.04我想为敏感信息设置环境变量。(django密钥,数据库密码......)
我研究了很多关于设定方法的文章。
但是当我尝试os.environ ['env_name']时,
.bashrc:不工作
.bash_profile:不工作
.profile:不工作
/ etc / environment:不工作
Gunicorn脚本文件。(systemd):我用gunicorn systemd脚本设置它们。它工作得很好。
但是因为我也想在其他程序中使用环境变量,所以我将它们设置为1~5个配置。我不明白为什么1~5个配置不起作用。是否有设置环境变量的范围或优先级?
编辑:
我使用的是Ubuntu 16.04服务器。我无法重启终端会话。
我尝试了'source .bashrc'和logout / login。但它没有用。
对于cource,'echo $ some_env_var'正在工作,我说,django无法阅读。
答案 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中。