You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Cloud Run部署whatsapp-web.js,解决实例提前关闭问题

Cloud Run适配方案及替代选择

问题根源

你遇到的实例提前关停问题是Cloud Run默认的请求驱动无服务特性导致的:你在实例内部运行的Firestore持久监听器、whatsapp-web.js初始化及执行逻辑都不属于入站HTTP请求的处理流程,Cloud Run会判定实例处于空闲状态,默认超过5分钟就会回收实例,打断未完成的操作。

方案1:调整配置直接适配Cloud Run(优先推荐)

不需要直接更换Compute Engine,调整配置和架构即可解决:

  • 配置最小实例数:将Cloud Run服务的最小实例数设为1,避免无入站请求时实例被完全回收,让Firestore监听器和whatsapp-web.js客户端可以在后台持续运行(注意该配置会产生持续运行费用,无法享受完全缩容到0的免费额度)
  • 调整超时参数:将Cloud Run的空闲超时调整到最大允许的3600秒(1小时),同时将请求超时也调整到对应时长,适配长耗时操作,部署命令参考:
    gcloud run deploy <你的服务名称> --timeout=3600 --min-instances=1 --region=<你的部署区域>
    
  • 优化架构为事件触发模式(更稳定,推荐):放弃在Cloud Run实例内部运行常驻的Firestore onSnapshot监听器,改用Eventarc配置Firestore requests 集合的创建/更新事件触发器,每次有事件产生时直接调用Cloud Run的HTTP接口传递事件参数,在请求处理流程中完成whatsapp-web.js操作,这种模式下Cloud Run会自动等待请求处理完成再回收实例,不会出现空闲判定问题。你可以全局复用whatsapp-web.js客户端实例,避免每次请求重复初始化,减少耗时。
  • 镜像依赖补充:whatsapp-web.js依赖Chromium运行,打包Docker镜像时需要提前安装对应的系统依赖,比如Debian镜像需要提前安装libnss3 libxss1 libasound2 libatk-bridge2.0-0 libgtk-3-0等包,避免客户端启动失败。

方案2:更换为Compute Engine的适用场景

如果符合以下情况,可以考虑更换为Compute Engine:

  • 你的whatsapp-web.js需要保持常年在线的WebSocket长连接,单操作耗时超过Cloud Run最大允许的1小时
  • 你需要对运行环境有更高的可控度,比如自定义内核参数、安装特定依赖等
    你可以在最低配的e2-micro实例上部署Node.js服务,配合pm2等进程管理工具守护进程,实现服务崩溃自动重启,稳定性更高。成本层面,低负载场景下Cloud Run开最小1实例和最低配Compute Engine的成本差异很小。

注意事项

无论用哪种方案,都要避免多个进程同时监听Firestore requests 集合的事件,否则会导致同一条请求被重复执行,用Cloud Run时建议将最大实例数也设为1,或者在业务逻辑中加分布式锁避免重复处理。

内容的提问来源于stack exchange,提问作者Gnopor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:15:05