Django 设置和 GitHub 操作秘密

Posted

技术标签:

【中文标题】Django 设置和 GitHub 操作秘密【英文标题】:Django Settings and GitHub Action Secrets 【发布时间】:2020-09-19 02:48:36 【问题描述】:

我有一个 Django 项目,并且正在使用 Postgres 数据库。我想找到一种更简单的方法来在本地和 Github 上存储我的凭据,这样我就可以在这两个地方运行测试,但我的敏感信息都不在 git repo 中。

即使数据库只存在于我的计算机上(并且 Github 测试数据库在 GitHub 上一次只存在大约一分钟)我想为 SECRETS 使用可能的最佳实践,所以当我开始直播吧,我准备好了。

目前,我拥有的唯一敏感数据是数据库密码。以下是我将真实密码保存在 GitHub 之外的方法。

settings.py(在 Git 中):

VAR_1='abc'
VAR_2 = '123'

#DOES NOT INCLUDE DATABASE CONFIG

VAR_3 = 'efg'

# Add settings from local file into main settings
try:
    from .localsettings import *
except ImportError:
    import sys
    print('localsettings not defined.')

localsettings.py(不在 Git 中):

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'real-db-name',
        'USER': 'real-user',
        'PASSWORD': 'real-password',
        'HOST': 'localhost',
        'PORT': '',
    

testsettings.py(在 Git 中):

# import main settings and then overright certian values
try:
    from .settings import *
except ImportError:
    import sys
    print('settings not defined.')

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'github-db-name',
        'USER': 'github-db-user',
        'PASSWORD': 'github-user-password',
        'HOST': 'localhost',
        'PORT': '',
    

通过此设置,我可以在本地正常运行测试python manage.py test 但是当我在 Github 上运行它们时,我必须使用 python manage.py test --settings=path.to.testsettings

有没有一种方法可以像 GitHub 那样在本地存储机密,这样我就可以只拥有一个设置文件,它就可以在本地和 GitHub 上工作?

【问题讨论】:

【参考方案1】:

我会考虑将秘密从环境变量传递给 Django 配置文件。 https://django-environ.readthedocs.io/en/latest/

然后您只需将带有秘密的 env 变量传递给在 Github 操作中运行的容器。

【讨论】:

以上是关于Django 设置和 GitHub 操作秘密的主要内容,如果未能解决你的问题,请参考以下文章

Django项目的创建与管理和pycharm与Github的秘密

如何使用 Jenkins job dsl 为 gitlab 插件设置秘密令牌?

使用带有秘密的 github 操作反应应用程序构建/部署

使用 tox 和 Github Action 访问环境变量

Github 操作在构建期间未识别秘密值

应用程序不会通过 docker build 从 github 检索秘密