# 基本简介
# 微信云托管是什么?
- 微信云托管 是微信团队提供的以云原生为基础的,免运维、高可用服务上云解决方案,无需服务器,1分钟即可部署小程序/公众号服务端。
- 微信云托管支持目前绝大多数语言/框架项目,开发者可以从服务器平滑迁移;并且微信云托管的自动运维和扩缩容特性,无需开发者关心服务的可用性,专注于业务,极大节省人力和服务资源成本。
- 同时,微信云托管还集成持续交付部署,DevOps自动化,安全鉴权等众多能力,致力于帮助没有深层运维经验的业务开发者和研发团队,用最低的成本,打造出稳定性高,安全性强的后端服务。
- 最重要的,微信云托管与微信生态深度融合,具有免鉴权,云调用,消息推送,微信支付等众多微信优势特性,开发者可以非常轻松和高效的完成互通,并且在安全、可靠性方面有微信团队的专业保障。

# 架构特点
微信云托管以容器服务为核心,提供方便易用的存储体系、微信生态、安全鉴权等服务能力;搭配简单易懂的操作面板,集成资源监控,资源告警,流水线等自动化功能,是一站式的后端云服务。
微信云托管使用目前主流的容器平台Docker以及容器编排技术Kubernetes(简称K8S),来管理你的项目

# 常见问题
# 云托管的作用是什么?
代替服务器部署小程序/公众号后端。
# 微信云托管和微信云开发的区别是什么,如何选择?
- 微信云开发和微信云托管都是微信联合腾讯云打造的微信云服务生态的组成部分,都提供了免服务器免运维的能力,开发者可以根据自己的业务特点进行选择。
- 微信云开发以云函数提供计算能力,围绕 Node.js 技术栈,适合前端开发者简单快捷实现后端功能,或全栈开发者一体化开发; 微信云托管以容器提供计算能力,支持任意后端语言和框架,适合前后端分离项目的后端开发、传统模式后端项目迁移,对团队协作和企业级应用场景更友好
# 微信云托管和云开发中的云托管有何区别?
- 微信云托管和之前云托管的区别除了品牌升级外,还做了独立的控制台。旧的云托管只是云开发的一个模块,只有单纯的容器引擎能力,升级为微信云托管后脱离云开发,成为完整的后端项目托管解决方案。 从代码管理到CI/CD流水线部署发布,提供全链路、低成本、企业级的云原生解决方案,功能更强大、体验更友好
- 云开发中的云托管能力已停止功能更新,仅支持存量业务继续运行。建议原云开发中的云托管的用户尽快将项目迁移到微信云托管。
# 微信云托管可以用于APP/网站/其他平台小程序吗?
必须先有微信小程序/公众号才可以开通微信云托管,但部署在微信云托管上的服务可以通过公网访问,因此可以被APP/网站/其他平台小程序的前端调用,只是无法享受 callcontainer 内部链路带来的安全防DDoS/请求加速等优势。
# 微信云托管的环境可以在微信开发者工具的云开发控制台中看到吗?
微信云托管和微信云开发是两套独立体系,微信云托管的环境只能在微信云托管控制台看到,在微信开发者工具的云开发控制台中不能看到
# 腾讯云和微信云托管有关系吗?云开发的云托管和微信云托管有什么区别?
微信云托管是整合了腾讯云底层资源和微信生态链路的综合解决方案。原云开发中的云托管独立出来,升级为微信云托管,补充数据库、ci/cd、灰度发布等更多完整后端功能和企业级devops能力。
# 云托管的时间相差8个小时?
容器系统时间默认为 UTC 协调世界时间 (Universal Time Coordinated),与本地所属时区 CST (上海时间)相差 8 个小时:
在构建基础镜像或在基础镜像的基础上制作自定义镜像时,在 Dockerfile 中创建时区文件即可解决单一容器内时区不一致问题,且后续使用该镜像时,将不再受时区问题困扰。
- 打开
Dockerfile文件。 - 写入以下内容,配置时区文件
FROM centos as centos COPY --from=centos /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo "Asia/Shanghai" > /etc/timezone
- 重新构建容器镜像,使用新的镜像重新部署。或直接上传含新的 Dockerfile 的代码包重新部署
# 云托管部署
# 云托管模板部署

小程序/公众号中调用
// 在小程序 app.js中初始化云托管
onLaunch() {
if (!wx.cloud) {
console.error('请使用 2.2.3 或以上的基础库以使用云能力')
} else {
wx.cloud.init({
env: 'xxx', // 填入云托管环境ID
})
}
}
// 在小程序中调用云托管服务
wx.cloud.callContainer({
"config": {
"env": "prod-xx" // 填入云托管环境ID
},
"path": "/api/count", // 云托管服务请求路径
"header": {
"X-WX-SERVICE": "express-4bnl" // 云托管服务名称
},
"method": "POST",
"data": {
"action": "inc" // 发起请求传入的参数
}
})
# 云托管自定义部署nestjs
初始化您的 Nest.js 项目
npm i -g @nestjs/cli
nest new nest-app
在根目录下,执行以下命令在本地直接启动服务。
cd nest-app && npm run start
打开浏览器访问 http://localhost:3000,即可在本地完成 Nest.js 示例项目的访问。
新建服务


点击发布后,云托管会执行Dockerfile构建流水线,到日志可以查看构建进度

微信云托管部署成功后,可以在实例列表,点击进入容器看到代码,这里里面的内容不能修改,在容器启动后会覆盖

调试接口

# CLI工具使用
npm install -g @wxcloud/cli
wxcloud -h
获取 CLI 密钥
CLI工具的登录采用了密钥形式,在使用前需要前往微信云托管控制台 - 设置 -CLI 密钥生成,生成时需要账号管理员扫码,可以新建多个密钥,用于在不同地方使用。
传入微信 APPID 和CLI密钥,操作登录
wxcloud login [OPTIONS]
查看登录账号下所有的环境列表
wxcloud env:list [OPTIONS]
查看指定环境下的所有服务列表
wxcloud service:list [OPTIONS]

# 云托管本地调试
# 本地docker调试
- 安装docker
- 安装微信开发者工具最新版
- 安装vscode Docker拓展
- 在 VSCode 拓展栏搜索 weixin-cloudbase 然后安装
以koa作为后端演示
全局安装 koa-generator 脚手架.
npm install -g koa-generator
创建项目
# 使用ejs引擎
koa2 -e wxcloud-debug-koa
cd wxcloud-debug-koa // 进入项目根目录
npm install // 安装项目依赖
- 修改
www/bin中的端口为9000 - 修改
routes/index中代码为
router.get('/', async (ctx, next) => {
ctx.body = {
message: '请求头',
header: ctx.header
}
})
打开浏览器访问 http://localhost:9000,即可在本地完成 koa 示例项目的访问。
编写dockerfile
FROM daocloud.io/library/node:14.7.0
# 设置时区
ENV TZ=Asia/Shanghai \
DEBIAN_FRONTEND=noninteractive
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata && rm -rf /var/lib/apt/lists/*
RUN mkdir -p /app
# 指定工作目录
WORKDIR /app
# 复制当前代码到/app工作目录
COPY . ./
# npm 源,选用国内镜像源以提高下载速度
RUN npm config set registry https://registry.npm.taobao.org/
# npm 安装依赖
RUN npm install
# 启动服务
CMD node app.js
EXPOSE 9000
如只在 VSCode 中同时编辑调试一个服务,
可直接打开服务代码目录作为根目录(暂不支持 VSCode Workspace 工作区),保证根目录下有Dockerfile文件,插件面板中会显示该服务的名字

调试过程中因需要获取微信信息,会使用云托管 CLI Key,因此需在 VSCode 插件配置填入小程序 appid 和 cli key,点击插件面板的 ⚙ 图标打开配置:


构建镜像,启动容器
右键服务名,选择 start,将构建镜像并启动容器

可以看到构建过程

启动容器需要相应的容器配置信息(.cloudbase/container/debug.json),如果没有会提示创建,配置文件字段和含义如下:

其中需特别注意端口号
containerPort、Dockerfile路径dockerfilePath、自定义环境变量envParams
此时出现异常,我们修改.cloudbase/container/debug.json中的containerPort为koa服务中定义的9000端口,重新构建即可

容器构建和启动成功后,在插件面板状态 icon 会相应更新:

也可以通过docker ps查看已启动的服务

我们在云托管后台可以看到此时默认启动了一个调试服务,我们不要去修改它

此时可以请求容器了,在插件面板旁会展示两个端口号,通过第一个端口访问容器会带有微信相关信息(header 中包含 appid 等),通过第二个端口访问容器不会带有微信相关信息而是直接请求到容器内部,右键服务选择 Open in browser (via WX server) 和 Open in browser (no WX auth) 可以在浏览器中打开,分别对应这两种情况,也可以写代码或通过 POSTMAN 等工具请求

请求不经过微信服务器返回:http://127.0.0.1:27081/
不带微信信息的端口,直接访问即可,适合在浏览器调试

请求经过微信服务器返回:http://127.0.0.1:27082/
微信端口,请求时会模拟微信用户信息的 Header,如 x-wx-openid,适合微信开发者工具中使用

在微信开发者工具中,可以选择连接到 VSCode 启动的容器,从而在小程序模拟器中访问本地云托管容器
此能力需要使用微信开发者工具 v1.05.2202242 及以上版本,并更新 VSCode 插件到 v1.0.12 以上。
创建一个小程序测试项目


需要退出再次Detach Weixin Devtools

修改小程序app.js代码

查看请求日志























