django - 将 Django 设置部署到生产环境的推荐方法是什么?

标签 django django-deployment

我到处都查过了,我能找到的都是过时的或者来自几个不同来源的零碎内容,但他们都没有完整的步骤来说明如何将 Django 部署到生产环境。

我希望看到的是使用 git、本地和生产环境的 settings.py、专门针对 Django 的 .gitignore 来部署 Django 的推荐方法。

如何实现设置来适应这两种环境以及应将哪些内容添加到 .gitignore 文件中,以便仅将必要的文件发送到 git 存储库?

请注意,我想了解使用本地和生产设置的最佳实践和最新方法。

部署 Django 应用程序时会出现此类问题。

  1. 设置应存储在哪里?
  2. 如何正确实现设置以适应这两种环境?
  3. 哪些敏感信息应与主要设置分开?

2016 年 9 月 25 日更新:

谢谢andreas为了澄清这一点,现在我完全同意部署 Django 没有标准方法。我进行了长时间的研究,找到了部署 Django 设置的最常用方法。我会将我的发现分享给所有有同样疑问的人。

正在回答

设置应该存储在哪里?

这些设置更好地容纳在设置模块中,而不是单个 settings.py 文件中。

如何正确实现设置以适应这两种环境?

这就是设置模块非常方便的地方,因为您只需拥有与环境无关的设置,并且可以使用 git 或任何其他版本控制来维护它们。

哪些敏感信息应与主要设置分开?

敏感信息,例如数据库、电子邮件、 key 以及任何与身份验证相关的信息,以及如何 secret 提供这些私有(private)信息,我建议使用 andreas建议。

您可以在 /etc/app_settings 中创建一个单独的文件并对其进行严格限制,或者只是使用系统内的环境变量。

.gitignore 部分

对于 .gitignore 部分,我找到了一个很棒的存储库,您可以在 https://github.com/github/gitignore 获取各种示例。 .

我最终使用:

# OSX Finder turds
.DS_Store

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# Distribution / packaging
.Python
env/

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Django stuff:
*.log
my_app/settings/dev.py
bower_components

由于答案太长,我在Django Settings Deployment创建了一篇文章来解释每一步。 .

最佳答案

没有一种推荐的部署 Django 应用程序的方法。官方文档提供了guide用于使用 Apache 和 mod_wsgi 进行部署。其他一些选项是 PaaSHeroku/Dokku或使用 Docker 进行部署

将设置划分到不同的文件中是很常见的。例如,您可以将设置分为四个不同的文件:

  • 基础文件 (base.py) - 所有环境的通用设置(下面的每个文件均使用 from .base import * 从此文件导入
  • 开发文件 (development.py) - 特定于开发的设置(DEBUG = True 等...)
  • 生产文件 (development.py) - 特定于生产环境的设置。 (DEBUG = False、白噪声配置等)
  • 测试文件(testing.py)

您可以使用环境变量DJANGO_SETTINGS_MODULE来控制加载哪些设置文件

通常建议的做法是将 SECRET_KEY 等 secret 存储在环境变量中。 SECRET_KEY = os.environ.get('SECRET_KEY', None)。或者查看django-environ package .

看看这个 repo示例设置。

关于django - 将 Django 设置部署到生产环境的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39547083/

相关文章:

python - 类型错误 : unhashable type: 'list' in Django/djangorestframework

python - 覆盖 django admin 中的模板

https 设置后的 Django 站点 ERR_SSL_PROTOCOL_ERROR

django - django- nginx:/etc/nginx/sites-enabled/myproject中的[emerg] open() “/etc/nginx/proxy_params”失败(2:无此类文件或目录):11

python - 没有这样的表 : auth_user error while logging to/admin/after deploy django app on pythonanywhere

django - 如何选择多对多关系中未引用的所有对象

django - 在Django管理员中上传文件时出现UnicodeEncodeError

python - Django 查询不匹配

django - 如何向 Django Celery Flower Monitoring 添加身份验证和端点?

python - django nginx静态文件404