云引擎网站托管指南
网站托管是云引擎的一个子模块,允许你用各种程序语言开发 Web 程序,提供云函数和 Hook,还可以提供静态文件的托管和自定义的路由、绑定你自己的域名。 你可以用它为你的移动应用提供一个介绍和下载页、开发一个管理员控制台或完整的网站,或者运行一些必须在服务器端运行的自定义逻辑。
云引擎支持 Node.js、Python、PHP、Java、.NET、Go,你可以选择自己熟悉的技术栈进行开发。
从示例项目开始
我们为云引擎支持的各种语言准备了示例项目,建议从示例项目着手开始开发。
要理解如何从示例项目开始开发云引擎项目,本地调试,部署到云端,请先阅读云引擎快速入门。
本地运行和调试
在确保所有的依赖都正确安装之后,就可以在项目根目录用我们的命令行工具来启动本地调试了:
tds up
更多有关命令行工具和本地调试的内容请看云引擎命令行工具使用指南。
部署到云端
在你的项目根目录运行:
tds deploy
如果生产环境是标准实例,需要加上 --prod 1 参数,指定部署到生产环境:
tds deploy --prod 1
你可以在控制台绑定云引擎域名,绑定域名后,即可通过绑定域名访问你的应用。
例如,假定你在控制台绑定了 web.example.com 这个域名,即可通过 https://web.example.com 访问你的应用(生产环境)。
注意,DNS 可能需要等待几个小时后才能生效。
项目骨架
- JavaScript
- Python
- PHP
- Java
- C#
- Go
以示例项目为例,在根目录我们看到有一个 package.json 文件,注意:所有 Node.js 的项目必须包含 package.json 才会正确地被云引擎识别为 Node.js 项目。
package.json
Node.js 的 package.json 中可以指定 很多选项,它通常看起来是这样:
{
"name": "node-js-getting-started",
"scripts": {
"start": "node server.js"
},
"engines": {
"node": "12.x"
},
"dependencies": {
"express": "4.16.4",
"leanengine": "^3.3.2",
"leancloud-storage": "^3.11.0"
}
}
其中云引擎会尊重的选项包括:
scripts.start启动项目时使用的命令;默认为node server.js,如果你希望为 Node.js 附加启动选项(如--es_staging)或使用其他的文件作为入口点,可以修改该选项。scripts.postinstall会在项目构建结束时运行一次;可以将构建命令(如gulp build)写在这里。engines.node指定所需的 Node.js 版本;出于兼容性考虑默认版本仍为比较旧的0.12,因此建议大家自行指定一个更高的版本,建议使用12.x版本进行开发,你也可以设置为*表示总是使用最新版本的 Node.js。dependencies项目所依赖的包;使用 Node.js 10 以上的版本时,云引擎会在部署时用npm ci为你安装这里列出的所有依赖。devDependencies项目开发时所依赖的包;使用 Node.js 10 以上的版本时,云引擎会安装这里的依赖。
建议你参考我们的 项目模板 来编写自己的 package.json。
我们也对 package-lock.json 和 yarn.lock 提供了支持。
参照示例项目,你的项目需要遵循一定格式才会被云引擎识别并运行。
使用 WSGI 规范来运行项目,项目根目录下必须有 wsgi.py 与 requirements.txt 文件,可选文件 .python-version、runtime.txt。云引擎运行时会首先加载 wsgi.py 这个模块,并将此模块的全局变量 application 作为 WSGI 函数进行调用。因此请保证 wsgi.py 文件中包含一个 application 的全局变量/函数/类,并且符合 WSGI 规范。
例如,一个最简单的基于 Flask 框架的项目只需两个文件(requirements.txt 除外,不考虑本地调试功能):
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "hi"
# wsgi.py
from app import app
application = app
更多关于 WSGI 函数 的内容,请参考 PEP333。
兼容 Python WSGI 规范的框架都可以在云引擎运行。目前比较流行的 Python Web 框架对此都有支持,比如 Flask、Django、Tornado。我们提供了 Flask 和 Django 两个框架的示例项目作为参考,你也可以直接把它们当作一个应用项目的初始化模版: