部署到生产环境¶
本部分教程假设您有一个要将应用程序部署到的服务器。它概述了如何创建分发文件并安装它,但不会详细说明要使用哪些服务器或软件。您可以在开发计算机上设置一个新环境来试用以下说明,但可能不应该使用它来托管真正的公共应用程序。请参阅 部署到生产环境 以获取托管应用程序的许多不同方法的列表。
构建和安装¶
当您想在其他地方部署应用程序时,您会构建一个轮子 (.whl
) 文件。安装并使用 build
工具来执行此操作。
$ pip install build
$ python -m build --wheel
您可以在 dist/flaskr-1.0.0-py3-none-any.whl
中找到该文件。文件名格式为 {项目名称}-{版本}-{python 标记} -{abi 标记}-{平台标记}。
将此文件复制到另一台计算机,设置一个新的 virtualenv,然后使用 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 您的应用程序,但它不使用 --app
,就像 flask run
所做的那样。您需要告诉它导入并调用应用程序工厂以获取应用程序对象。
$ waitress-serve --call 'flaskr:create_app'
Serving on http://0.0.0.0:8080
请参阅 部署到生产,了解托管应用程序的许多不同方法的列表。Waitress 只是一个示例,之所以选择它作为教程,是因为它同时支持 Windows 和 Linux。还有更多 WSGI 服务器和部署选项,您可以为您的项目选择这些选项。
继续 继续开发!。