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

时间:2016-09-17 12:56:28

标签: django django-deployment

我到处寻找,我所能找到的都是过时的或来自几个不同来源的点点滴滴,但他们都没有完全了解如何将Django部署到生产环境。

我希望看到的是使用git,local和production settings.py,.gitignore专门为Django部署Django的推荐方法。

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

请注意,我想了解使用本地和制作设置的最佳做法和最新方法。

部署Django应用程序时会出现这样的问题。

  1. 应该在哪里存储设置?
  2. 如何正确实施设置以适应两种环境?
  3. 哪些敏感信息应与主要设置分开?
  4. 2016年5月25日更新:

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

    应答

    应该在哪里存储设置?

    设置更好地适应设置模块,而不是单个settings.py文件。

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

    这是设置模块非常方便的地方,因为您可以简单地使用与环境无关的设置,并且可以使用git或任何其他版本控制进行维护。

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

    敏感信息,如数据库,电子邮件,密钥以及任何与身份验证相关的信息,以及您将如何秘密提供此私人信息,我建议您使用andreas建议。

    您可以在/etc/app_settings创建一个单独的文件,并使其非常受限制,或者只是在系统中使用环境变量。

    .gitignore part

    对于.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的每一步。

1 个答案:

答案 0 :(得分:4)

没有一种推荐的部署Django应用程序的方法。官方文档提供guide用于部署Apache和mod_wsgi。其他一些选项是PaaS,例如Heroku / Dokku或部署Docker

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

  • 基本文件(base.py) - 所有环境的常用设置(以下每个文件都使用from .base import *
  • 从中导入
  • 开发文件(development.py) - 特定于开发的设置,(DEBUG = True等...)
  • 生产文件(production.py) - 特定于生产环境的设置。 (DEBUG = False,whitenoise配置等)
  • 测试文件(testing.py)

您可以使用环境变量DJANGO_SETTINGS_MODULE

控制加载的设置文件

通常建议您在环境变量中存储SECRET_KEY等机密信息。 SECRET_KEY = os.environ.get('SECRET_KEY', None)。或者查看django-environ package

查看此repo以获取示例设置。