Azure应用服务上的NodeJs + Puppeteer运行失败



我写了一个简单的NodeJs(ExpressJs)服务器,它使用Puppeteer在传递给它的JSON数据上生成PDF文件。而本地一切都像魅力一样工作,我正在努力在Azure App Services上运行这个服务器。我创建了一个Resource group,在它里面我创建了一个App Servces instance(在Linux上运行),它连接到我在Azure DevOps的repo(通过Deployment Center)。

我的服务器有两个端点

  1. /-返回一个JSON - {status: "ok"}。我使用它来验证正在运行的服务器实例。
  2. /generate- PDF -使用Puppeteer生成并返回PDF文件

成功启动App Service instance后,我可以访问"/"路由并获得有效的响应,但在访问"/generate-pdf"路由结果为"502 -坏网关"。

  1. 我的实例需要一些我没有做的额外配置吗?
  2. App Services不能运行Puppeteer?也许我需要使用Azure上的其他服务?
  3. 是否有办法通过Azure DevOps管道或发布自动化流程?

欢迎任何问题/想法/常见问题解答。谢谢=)

我在回答我自己的问题:正如这里提到的https://stackoverflow.com…Azure应用程序服务不允许使用GDI(这是Chrome所要求的),无论你使用的是Linux还是Windows系统。解决方案是将NodeJs应用程序放入Docker容器并手动安装Chrome。一旦你有了一个容器——只要把它上传到Azure应用服务,就可以了!

  • 默认情况下App services暴露80和443端口,所以如果你的应用程序监听不同的端口,一定要通过WEBSITES_PORT环境变量指定它。
  • 在我的例子中,我必须上传Docker镜像到Docker hub,但是你也可以设置一个管道来自动化这个过程。
  • 我已经在我的M1 Pro上构建了Docker映像,当容器上传到Azure时,它导致了一些arch问题。如果您正在为Linux构建映像,请确保在映像构建步骤中添加--platform linux/amd64

最新更新