部署到生产环境¶
这部分教程假设你有一台服务器,你想把程序部署上去。这一章会概括如何创建分发文件并安装它,但是不会涉及具体使用哪一种服务器或软件。你可以在你的开发电脑上设置一个新环境并尝试下面的操作说明,但可能不应该用它来托管一个真正的公开应用。参阅 部署方式 了解托管你的应用的多种不同方式。
构建和安装¶
当你想要在其他地方部署你的应用时,你要创建一个分发文件。目前 Python 分发的标准是 wheel 格式,它使用 .whl
后缀。首先确保 wheel 库已经被安装:
$ pip install wheel
使用 Python 运行 setup.py
给你提供了一个包含构建相关命令的命令行工具。其中 bdist_wheel
命令将会构建一个 wheel 分发文件。
$ python setup.py bdist_wheel
你可以在 dist/flaskr-1.0.0-py3-none-any.whl
找到这个文件。文件名的格式为:{项目名称}-{版本}-{python 标签} -{abi 标签}-{平台标签}。
把这个文件复制到另一台机器,设置一个新的虚拟环境,然后使用 pip
安装它。
$ pip install flaskr-1.0.0-py3-none-any.whl
pip 会安装你的项目及其依赖。
由于这是一台不同的机器,你需要再次运行 init-db
命令在实例文件夹内创建数据库。
$ export FLASK_APP=flaskr
$ flask init-db
$ set -x FLASK_APP flaskr
$ flask init-db
> set FLASK_APP=flaskr
> flask init-db
> $env:FLASK_APP = "flaskr"
> flask init-db
当 Flask 检测到它已经被安装(不在可编辑模式下),它会使用一个不同的目录作为实例文件夹。你可以在 venv/var/flaskr-instance
找到它。
配置密钥¶
在这个教程的一开始,你为 SECRET_KEY
设置了一个默认值。在生产环境中,它应该被更换为一个随机字节串。否则,攻击者可以使用常用的 'dev'
密钥去修改会话 cookie,或是其他任何使用密钥的数据。
你可以使用下面的命令生成一个随机密钥:
$ python -c 'import secrets; print(secrets.token_hex())'
'192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
在实例文件夹中创建 config.py
文件,如果这个文件存在,程序工厂将会从它读取配置。把生成的值复制进去:
SECRET_KEY = '192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'
你也可以在这里设置任意其他必要的配置,尽管对于 Flaskr 来说 SECRET_KEY
是唯一需要的配置。
使用生产服务器运行应用¶
当在生产环境下运行时,你不应该使用内置的开发服务器(flask run
)。开发服务器由 Werkzeug 提供,它被设计用来让你在开发时更加方便,因此并不是特别高效、稳定或安全。
相反,请使用一个生产 WSGI 服务器。举例来说,要使用 Waitress,首先在虚拟环境下安装它:
$ pip install waitress
你需要告诉 Waitress 你的应用在哪里,但是它并不像 flask run
那样读取 FLASK_APP
。你需要告诉它去导入并调用应用工厂来获取一个应用对象。
$ waitress-serve --call 'flaskr:create_app'
Serving on http://0.0.0.0:8080
阅读 部署方式 了解托管应用的多种不同方式。Waitress 只是一个示例,在这个教程里选择它是因为它同时支持 Windows 和 Linux。还有很多 WSGI 服务器和部署选项可以供你的项目选择。
继续阅读 继续开发!。