我写了一个简单的NodeJs
(ExpressJs)服务器,它使用Puppeteer
在传递给它的JSON数据上生成PDF文件。而本地一切都像魅力一样工作,我正在努力在Azure App Services
上运行这个服务器。我创建了一个Resource group
,在它里面我创建了一个App Servces instance
(在Linux
上运行),它连接到我在Azure DevOps
的repo(通过Deployment Center
)。
我的服务器有两个端点
- /-返回一个JSON - {status: "ok"}。我使用它来验证正在运行的服务器实例。
- /generate- PDF -使用
Puppeteer
生成并返回PDF文件
成功启动App Service instance
后,我可以访问"/"路由并获得有效的响应,但在访问"/generate-pdf"路由结果为"502 -坏网关"。
- 我的实例需要一些我没有做的额外配置吗?
App Services
不能运行Puppeteer
?也许我需要使用Azure上的其他服务?- 是否有办法通过
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
。