部署到生产环境 — Flask 文档

来自菜鸟教程
Flask/docs/2.0.x/tutorial/deploy
跳转至:导航、​搜索

部署到生产

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

构建和安装

当您想在别处部署应用程序时,您可以构建一个分发文件。 Python 发行版的当前标准是 wheel 格式,带有 .whl 扩展名。 确保首先安装了wheel库:

$ pip install wheel

使用 Python 运行 setup.py 为您提供了一个命令行工具来发出与构建相关的命令。 bdist_wheel 命令将构建一个车轮分发文件。

$ python setup.py bdist_wheel

您可以在 dist/flaskr-1.0.0-py3-none-any.whl 中找到该文件。 文件名格式为{project name}-{version}-{python tag} -{abi tag}-{platform tag}。

将此文件复制到另一台机器上,设置一个新的virtualenv,然后用pip安装该文件。

$ pip install flaskr-1.0.0-py3-none-any.whl

Pip 将安装您的项目及其依赖项。

由于这是一台不同的机器,您需要再次运行 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 那样使用 FLASK_APP。 您需要告诉它导入并调用应用程序工厂以获取应用程序对象。

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

Serving on http://0.0.0.0:8080

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

继续继续开发!