# 微信云托管开发常识

当你进行前期开发测试，以及前后端联调前，可以先学习下面常识，有助于事半功倍。

## 一、云托管使用前提

微信云托管暂不支持以下场景：

- 当前仅支持 HTTP 协议，通过域名调用服务。不支持 tcp/udp/mqtt 等其他协议；
- 不支持通过公网 IP 访问服务；
- 不支持部署 Docker Compose；
- 不支持接入 WAF；
- 不支持一个服务开启多个监听端口；
- 不支持用来部署数据库/Redis 等有状态服务。

## 二、客户端常识

1. 小程序/公众号中 `CallContainer` 超时时间不得超过 15 s，请注意控制请求耗时。
2. 如果你只是在小程序或者公众号中 `CallContainer` 调用，可关闭公网访问，杜绝 DDoS 攻击。
3. `CallContainer` 请求大小限制 `100K`，请求中不建议包含图片，可通过对象存储处理。
4. 公网访问正常但小程序/公众号访问报错，优先检查代码中处理微信 `header/openid` 相关逻辑是否有问题。
5. 小程序/公众号可使用 `CallContainer`，无需域名，因此**不需要在 mp 管理后台配置服务器域名**，从而一开始就无需申请域名，也**无需备案**。
6. 小程序/公众号使用 `CallContainer`，后端服务可以直接从 HTTP header 中获取 openid 等信息。
7. 微信云托管**对公网域名不具备安全防护能力**（包括默认公网域名和自定义域名），请谨慎使用。
8. 默认公网域名性能有限制，仅能支持接口测试使用，**请勿用于正式生产环境**。小程序后台也无法配置使用默认公网域名。

## 三、服务端常识

1. 设置最小副本为 0 时，需要注意半小时无请求服务将缩容到 0，再次请求时将重启服务，扩容新的实例。
2. 服务从 0 扩容到 1（冷启动）耗时由服务启动速度决定，请尽可能优化服务启动性能。
3. 如果你想彻底避免服务冷启动影响，请到「服务设置」中将「实例副本数」最小值设为 1，但会持续产生资源消耗及费用，请结合业务自行权衡。
4. 服务运行正常但偶现 500 报错，可能是容器规格设置过小（因业务逻辑较重连一个请求都无法稳定支撑），观察 CPU 和内存使用率是否过高进行判断。可尝试在「服务设置」中增大容器规格。
5. 服务请求太慢时，适当增加容器规格有助于提升性能。
6. 容器不支持持久化存储，请勿将图片、视频等文件直接存储在容器中，容器扩缩容/重启自愈时，这些写入的文件会被还原。请使用「对象存储」管理文件。
7. 一个服务只能开启一个端口，多端口架构请拆分为多个服务。
8. 微信云托管自带流量管理能力，无需额外配置负载均衡产品和组件。
9. WebShell 仅用于查询信息和排查问题，通过 WebShell 对容器的修改无法保留。
10. 对代码的任何修改，都需要重新构建部署并发布，无法直接在已有版本上修改。
11. 代码中请不要在请求处理程序范围之外启动后台线程或例程，并确保在传送响应之前完成所有异步操作。[详情](/minigame/dev/wxcloudrun/src/scene/noun/async)
12. 请求小程序/公众号接口通过「云调用」能力，无需配置 IP 白名单。
13. 因项目迁移无暇改造为云调用方式，请关闭「开放接口服务」开关，否则可能引发超时报错，因为「开放接口服务」开关开启时，默认将使用云调用方式。
14. 云托管服务本身不具有固定的公网出口 IP，而是动态变化的。
15. 如果需要调用非小程序/公众号之外的其他平台方接口时，因其他平台方要求配置接口白名单需要固定 IP 的场景，后续我们将推出固定 IP 的增值付费服务，可单独购买。目前企业用户可在用户群联系我们，开通白名单体验。

## 四、扩缩容常识

1. 扩缩容是自动根据流量改变实例的个数，而非改变实例的规格，每一个实例副都遵循「服务设置」中的实例规格。
2. 自动扩缩容只根据 HTTP 请求流量判断，如果服务不接受外部请求，只是在自行跑定时任务，会被「误判」为没有使用，触发缩容。此种场景，请手动设定实例副本数最小值为 1，保持常驻。

## 五、反馈技巧

保持良好的反馈习惯，有助于官方团队能快速定位并帮助你解决问题。

1）服务部署出现问题，请先自己查看日志，看里面的报错所在位置是构建阶段还是部署阶段。
2）如果是构建阶段，那大概率是你提供的代码包以及 Dockerfile 描述有问题，请先自己在本地构建一下看是否可行，这一阶段的原因基本都是你自己代码造成的，不属于云托管的问题，请先自行排查解决，如果解决不了再进行反馈。
3）如果是部署阶段，并有相关建议的失败问题，请先参照失败建议进行排查；这一阶段一般是你的服务没有成功启动，直接挂掉了，一般是端口问题，如果连接数据库，检查一下是否是数据库联通问题导致启动失败。
4）如果上述无法解决你的问题，请通过控制台右上角「帮助」-「新建工单」，并直接复制部署页面的关键信息给我们。

![](https://res8.wxqcloud.qq.com.cn/wxdoc/e0b7782a-efeb-4dc3-8328-8e5aebd31713.png)

5）有关于微信生态的各种接口报错，在反馈前请先阅读[此文档](/minigame/dev/wxcloudrun/src/guide/weixin/faq)，一般大部分的问题都有指导。
