发布

发布到生产

使用 django-admin 和 manage.py 工具创建的 Django 骨架网站,是为了使开发更容易而配置的。出于安全性或性能原因,许多 Django 项目设置(在settings.py中指定),在生产应该是不同的。

你必须检查的关键设置是:

  • DEBUG. 这应该在生产环境中设置为 FalseDEBUG = False)。这将停止显示敏感/机密调试跟踪和变量信息。
  • SECRET_KEY. 这是用于 CRSF 保护等的大随机值。重要的是,生产中使用的密钥,不应在源代码管理中、或在生产服务器外部可访问。Django 文档表明,可能最好从环境变量加载,或从仅供服务的文件中读取。

    # Read SECRET_KEY from an environment variable
    import os
    SECRET_KEY = os.environ['SECRET_KEY']
    
    #OR
    
    #Read secret key from a file
    with open('/etc/secret_key.txt') as f:
        SECRET_KEY = f.read().strip()
    

让我们更改 LocalLibrary 应用程序,以便我们从环境变量中,读取SECRET_KEYDEBUG变量(如果已定义),否则使用配置文件中的默认值。

打开 /locallibrary/settings.py,禁用原始的SECRET_KEY配置,并加入如下以粗体显示的几行。在开发过程中,不会为密钥指定环境变量,因此将使用默认值(在此处使用的密钥,或密钥“泄漏”无关紧要,因为你不会在生产环境中使用它)。

# SECURITY WARNING: keep the secret key used in production secret!
# SECRET_KEY = 'cg#p$g+j9tax!#a3cup@1$8obt2_+&k3q+pmu)5%asj6yjpkag'
import os
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', 'cg#p$g+j9tax!#a3cup@1$8obt2_+&k3q+pmu)5%asj6yjpkag')

然后注释掉现有的DEBUG设置,并如下所示,添加新的一行。

# SECURITY WARNING: don't run with debug turned on in production!
# DEBUG = True
DEBUG = bool( os.environ.get('DJANGO_DEBUG', True) )

默认情况下,DEBUG的值为True,但如果DJANGO_DEBUG环境变量的值,设置为空字符串,则为False,例如,DJANGO_DEBUG=''

备注:如果我们可以直接将DJANGO_DEBUG环境变量设置为TrueFalse,而不是分别使用“any string”或“empty string”,那将更直观。不幸的是,环境变量值存储为 Python 字符串,计算结果为 False 的唯一字符串,是空字符串(例如bool('')==False)。

部署清单(Django 文档)中,提供了你可能要更改的完整设置清单。你还可以使用下面的终端命令,列出其中的一些:

python3 manage.py check --deploy

一些生产环境可能需要的配置

  1. DEBUG = True
    • 这个选项用于控制是否开启调试模式。在开发阶段,通常将其设置为 True,以便在出现错误时获得详细的错误信息。但在生产环境中,应该将其设置为 False,以防止泄露敏感信息。
  2. ALLOWED_HOSTS
    • 这个选项用于指定允许访问应用程序的主机名。如果请求中的主机名不在这个列表中,Django 将拒绝该请求。这有助于防止主机名伪造攻击。如果使用本地反向代理,应该设置127.0.0.1
  3. SECURE_ 开头的选项
    • 这些选项用于配置应用程序的安全性。它们包括:
      • SECURE_HSTS_SECONDS: 设置 HTTP Strict Transport Security(HSTS)的持续时间,以秒为单位。它告诉浏览器在指定的时间内强制使用 HTTPS 访问网站。
      • SECURE_HSTS_INCLUDE_SUBDOMAINS: 指定是否包括所有子域名。
      • SECURE_SSL_REDIRECT: 指定是否强制使用 HTTPS。
      • SESSION_COOKIE_SECURE: 指定会话 cookie 是否仅通过 HTTPS 连接传输。
      • CSRF_COOKIE_SECURE: 指定 CSRF 保护的 cookie 是否仅通过 HTTPS 连接传输。
      • SECURE_HSTS_PRELOAD: 指定是否启用 HSTS 预加载。
      • USE_X_FORWARDED_HOST: 指定是否使用 X-Forwarded-Host 头。
      • USE_X_FORWARDED_PORT: 指定是否使用 X-Forwarded-Port 头。
      • SECURE_PROXY_SSL_HEADER: 指定代理服务器使用的 HTTPS 头。

 

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录