部署 Django 到生产环境的设置

一旦你的网站完成(或完成“足够”开始公开测试),你将需要将其托管在比你的个人开发计算机更公开和可访问的地方。

到目前为止,你一直在开发环境中工作,使用 Django 开发 Web 服务器将你的站点共享到本地浏览器/网络,并使用暴露调试和其他私人信息的(不安全)开发设置运行你的网站。在你可以从外部托管网站之前,你首先必须:

  • 对你的项目设置 (project settings) 做一定的修改

  • 选择一个用来托管 Django app 的环境

  • 选择一个用来托管所有静态文件的环境

  • 设置一个产品级的设施来为你的网站服务

生产环境是一个由服务器电脑提供的环境,你将在这里运行你的网站,为外部使用提供服务。生产环境包括:

  • 网站运行所需要的电脑硬件

  • 操作系统 (例如 Linux, Windows).

  • 编程语言运行库和框架库,在其上编写你的网站。

  • 用于提供页面和其他内容的 Web 服务器(例如 Nginx,Apache)。

  • 在 Django 网站和 Web 服务器之间,传递“动态”请求的应用程序服务器。

  • 你的网站所依赖的数据库。

根据你的生产配置方式,你可能还有反向代理,负载均衡器等。

服务器计算机可以位于你的场所,并通过快速链接连接到 Internet,但使用托管“在云中”的计算机更为常见。这实际上意味着,你的代码在托管公司的数据中心的某台远程计算机(或可能是“虚拟”计算机)上运行。远程服务器通常会以特定价格,提供一些保证级别的计算资源(例如 CPU,RAM,存储器等)和互联网连接。

这种可远程访问的计算/网络硬件,称为基础架构即服务(IaaS)。许多 IaaS 供应商,提供预安装特定操作系统的选项,你必须在其上安装生产环境的其他组件。其他供应商允许你选择功能更全面的环境,可能包括完整的 Django,和 Web 服务器设置。

预构建环境可以使你的网站设置变得非常简单,因为它们会减少配置,但可用选项可能会限制你使用不熟悉的服务器(或其他组件),并且可能基于较旧版本的操作系统。通常最好自己安装组件,以便获得所需的组件,当你需要升级系统的某些部分时,你就知道从哪里开始!

其他托管服务提供商,支持 Django 作为平台即服务(PaaS)产品的一部分。在这种托管中,你不必担心大多数生产环境(Web 服务器,应用程序服务器,负载平衡器),因为主机平台会为你处理这些(以及为了扩展你的应用程序,而需要做的大部分工作)。这使得部署非常简单,因为你只需要专注于 Web 应用程序,而不是所有其他服务器的基础结构。

相对于 PaaS,一些开发人员会选择 IaaS 所提供的更高灵活性,而其他开发人员,则欣赏 PaaS 降低的维护开销,和更轻松地扩展。当你开始使用时,在 PaaS 系统上设置你的网站,要容易得多,因此我们将在本教程中这么做。

如果你选择一个 Python/Django 友好的托管服务提供商,他们应该提供有关如何使用不同配置的网络服务器,应用服务器,反向代理等设置 Django 网站的说明(如果你选择 PaaS,这就没有关系了)。例如,Digital Ocean Django 社区文档 中的各种配置,有许多手把手指南。

已知有超过 100 个托管服务提供商,积极支持或与 Django 合作(你可以在 Djangofriendly hosts 主机上,找到相当广泛的列表)。这些供应商提供不同类型的环境(IaaS,PaaS),以及不同价格、不同级别的计算和网络资源。

选择主机时需要考虑的一些事项:

  • 你的网站可能有多忙,以及满足该需求,所需的数据和计算资源的成本。

  • 水平扩展(添加更多机器)和垂直扩展(升级到更强大的机器)的支持级别,以及这样做的成本。

  • 供应商的数据中心位于何处,因此访问可能是最快的。

  • 主机的历史正常运行时间,和停机时间的表现。

  • 用于管理站点的工具 - 易于使用且安全(例如 SFTP 相比于 FTP)。

  • 用于监控服务器的内置框架。

  • 已知限制。有些主机会故意阻止某些服务(例如电子邮件)。其他在某些价格层中,仅提供一定时数的“实时时间”,或者仅提供少量存储空间。

  • 额外的好处。一些提供商将提供免费域名和 SSL 证书支持,否则你将不得不为此支付费用。

  • 你所依赖的“免费”等级,是否会随着时间的推移而过期,以及迁移到更昂贵等级的成本,是否意味着,你最好一开始就使用其他服务!

有很多网站提供了“免费”的“评估”、“开发者”或“爱好者”计算环境。这些始终是资源相当受限/有限的环境,你需要注意,它们可能会在广告期限后过期。然而,它们非常适合在真实环境中,测试低流量站点,并且可以在你的站点变得更加繁忙时,付费取得更多资源,并轻松迁移。此类别中的热门选择包括Heroku, Python Anywhere, Amazon Web Services, Microsoft Azure 等。

许多提供商还有“基本”层,可提供更多有用的计算能力和更少的限制。Digital OceanPython Anywhere ,就是流行的托管服务提供商的例子,提供相对便宜的基本计算等级(每月 5 美元到 10 美元不等)。

价格不是唯一的选择标准。如果你的网站成功,可能会发现,可扩展性是最重要的考虑因素。

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

通常有一个单独的 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值