云引擎 Python 运行环境
这篇文档是针对 Python 运行环境的深入介绍,如希望快速地开始使用云引擎,请查看 快速开始部署云引擎应用。
所有 Python 项目都必须在根目录下包含有 wsgi.py 和 requirements.txt 文件才会被云引擎正 确识别。
云引擎默认使用 WSGI 来运行 Python 项目,运行时会首先加载 wsgi.py 这个模块,并将此模块的全局变量 application 作为 WSGI 函数进行调用。因此请保证 wsgi.py 文件中包含一个 application 的全局变量/函数/类,并且符合 WSGI 规范:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "hi"
from app import app
application = app
流行的 Python Web 框架对 WSGI 都有支持,比如 Flask、Django、Tornado。我们提供了 Flask 和 Django 两个框架的示例项目作为参考,你也可以直接把它们当作一个应用项目的初始化模版:
非 WSGI 运行
云引擎也支持直接运行 Python 程序而不使用 WSGI(或者自行来运行 WSGI Server),你可以创建一个 leanengine.yaml 文件,在其中设置:
run: python app.py
这种情况下你的应用需要自行监听环境变量 LEANCLOUD_APP_PORT 中的端口来提供 HTTP 服务。
配置 Python 版本
云引擎兼容 pyenv 的 .python-version 文件,你可以将它放在项目 根目录来指定版本:
3.10
这样将代码部署到云端时,云引擎就会自动安装对应的 Python 版本。
云引擎目前仅支持 CPython 版本,暂时不支持 PyPy、Jython、IronPython 等其他 Python 实现。
如未设置 Python 版本,云引擎会默认使用最新的稳定版本。
如果在本地开发时已使用了 pyenv,pyenv 也会根据此文件来自动使用对应的 Python 运行项目。我们建议本地开发使用 pyenv,以保证本地环境与线上相同。pyenv 的安装方法请参考 pyenv 的 GitHub 仓库。
安装依赖(requirements.txt)
云引擎会使用 pip 来安装 requirements.txt 中的包:
leancloud>=2.9.1,<3.0.0
Flask>=1.0.0
建议将依赖的包的版本都按照 leancloud>=2.9.1,<3.0.0 这种格式来明确包的大版本,防止因为包的大版本中的不兼容改动导致再次部署应用时出现问题。
自定义构建过程
除了默认的构建过程和运行命令外,开发者还可以在 leanengine.yaml 中进一步地调整运行命令(run)、依赖安装命令(install)和构建命令(build),覆盖默认的行为:
run: echo 'run another command'
install:
- {use: 'default'}
- echo 'install additional dependencies here'
build:
- echo 'overwrite default build command here'
详细的说明见 Reference: leanengine.yaml
,下面是一些具体的例子:使用 uWSGI 运行项目
run: uwsgi --gevent 5000 --http :3000 --wsgi-file wsgi.py --master --process=${LEANCLOUD_AVAILABLE_CPUS} --disable-log
系统级依赖
在云引擎的线上环境中,开发者可以在 leanengine.yaml 中定义额外的系统级依赖:
systemDependencies:
- imagemagick
支持的完整列表见 Reference: leanengine.yaml。
构建日志
默认情况下构建过程中产生的日志不会显示到控制台,只有构建失败时,最后一个步骤的日志才会被显示在控制台上。
如需打印完整的构建日志以便调试,可以在部署时勾选「打印构建日志」或命令行工具添加参数 --options 'printBuildLogs=true'。
健康检查
云引擎目前主要为 Web 应用优化,应用在启动后需要在环境变量 LEANCLOUD_APP_PORT 中指定的端口上提供 HTTP 服务,注意需要监听在 0.0.0.0 地址(所有接口)上,而不是一些框架默认的 127.0.0.1。
在应用部署时,云引擎的管理程序会每隔一秒去检查应用是否启动成功,如果超过启动时间限制(默认 30 秒)仍未启动成功,即认为启动失败,部署会中止。在之后的运行过程中,也会有定期的健康检查来确保应用正常运行,如果健康检查失败,云引擎管理程序会自动重启你的应用。
健康检查会通过 HTTP 检查应用的首页(/),如果返回 HTTP 2xx 的响应,就视作成功。
点击展开健康检查与云引擎 SDK 的关联
云引擎还会尝试检查由 SDK 处理的 /__engine/1/ping,如果 SDK 接入正确,便不再要求首页(/)返回 HTTP 2xx。
如果 开发者中心 > 你的游戏 > 游戏服务 > 云服务 > 云引擎 > 管理部署 > 你的分组 > 设置 > 云函数模式 设置为「开启」或 leanengine.yaml 中 functionsMode 设置为 strict,云引擎会检查 SDK 是否被正确地接入,否则会视作启动失败。
点击展开自定义启动时长(startupTimeout)
启动时间限制默认为 30 秒,可设置范围为 15–120 秒,如需延长或缩短,可以在 leanengine.yaml 文件中设置:
startupTimeout: 60
云端环境
绑定自定义域名
云引擎需要设置域名才能访问。在 开发者中心 > 你的游戏 > 游戏服务 > 云服务 > 云引擎 > 管理部署 > 你的分组 > 设置 > 访问域名 处可以绑定域名。
如果你绑定的域名以 stg- 开头(如 stg-api.example.com),会自动关联到预备环境。
对于测试阶段的应用,我们提供了共享域名,你可以自定义共享域名的前缀部分。