部署到生产环境

本教程的这一部分假设您有一个想要部署应用程序的服务器。它概述了如何创建和安装分发文件,但不会详细介绍要使用哪个服务器或软件。您可以在开发计算机上设置一个新环境来尝试以下说明,但可能不应该将其用于托管真正的公共应用程序。有关托管应用程序的多种不同方法的列表,请参阅部署到生产环境

构建和安装

当您想要将应用程序部署到其他地方时,您需要构建一个wheel (.whl) 文件。安装并使用 build 工具来执行此操作。

$ pip install build
$ python -m build --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 以在实例文件夹中创建数据库。

$ flask --app flaskr init-db

当 Flask 检测到它已安装(不在可编辑模式下)时,它会为实例文件夹使用不同的目录。您可以在 .venv/var/flaskr-instance 中找到它。

配置密钥

在本教程的开始部分,您为 SECRET_KEY 提供了一个默认值。这应该在生产环境中更改为一些随机字节。否则,攻击者可能会使用公开的 'dev' 密钥来修改会话 cookie 或任何其他使用密钥的内容。

您可以使用以下命令输出随机密钥

$ python -c 'import secrets; print(secrets.token_hex())'

'192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'

在实例文件夹中创建 config.py 文件,工厂将从中读取(如果存在)。将生成的值复制到其中。

.venv/var/flaskr-instance/config.py
SECRET_KEY = '192b9bdd22ab9ed4d12e236c78afcb9a393ec15f71bbf5dc987d54727823bcbf'

您还可以在此处设置任何其他必要的配置,尽管 SECRET_KEY 是 Flaskr 唯一需要的配置。

使用生产服务器运行

当公开运行时(而不是在开发环境中),您不应使用内置的开发服务器 (flask run)。开发服务器由 Werkzeug 提供以方便使用,但并非设计为特别高效、稳定或安全。

相反,请使用生产 WSGI 服务器。例如,要使用 Waitress,首先在虚拟环境中安装它

$ pip install waitress

您需要告诉 Waitress 关于您的应用程序,但它不使用像 flask run 那样的 --app。您需要告诉它导入并调用应用程序工厂以获取应用程序对象。

$ waitress-serve --call 'flaskr:create_app'

Serving on http://0.0.0.0:8080

有关托管应用程序的多种不同方法的列表,请参阅部署到生产环境。Waitress 只是一个示例,之所以为本教程选择它,是因为它同时支持 Windows 和 Linux。您还可以为您的项目选择更多 WSGI 服务器和部署选项。

继续 继续开发!