我们正在测试直接将 .zip 文件部署到应用程序服务插槽和插槽交换的场景。
首先,我们尝试将 .zip 文件部署到暂存槽,想法是在部署暂存槽后将暂存与生产槽交换。
我们使用下面的 CLI 命令设置 WEBSITE_RUN_FROM_PACKAGE="1" 并部署从命令行成功的 .zip 文件。
但是当我们尝试访问暂存槽 URL 时,应用程序未加载。它提供默认的 MS 应用程序前端页面,而不是我们的。
注意:- 我们可以找到上传到 home/data/SitePackages 目录的 .zip 文件,其中包含 packagetemplate.txt 文件,如document所述。
az webapp config set --resource-group myapp-rg --name myapp --slot staging --linux-fx-version "NODE|18-lts"
az webapp config set --resource-group myapp-rg --name myapp --slot staging --startup-file "pm2 start /home/site/wwwroot/xxxx.js --no-daemon"
• 设置 WEBSITE_RUN_FROM_PACKAGE 的环境变量:
az webapp config appsettings set --resource-group myapp-rg --name myapp --slot staging --settings WEBSITE_RUN_FROM_PACKAGE="1"
• 部署 .zip 工件:
az webapp deployment source config-zip -g myapp-rg -n myapp --slot staging --src myapp.zip
当我使用下面的命令时,我收到了已弃用的警告。
az webapp deployment source config-zip -g <ResourceGroupName> -n <WebAppName> --slot <SlotName> --src <ZipfilePath>
我参考了这个 Ms Doc 并使用以下命令启用
Run From Package
并将 ZIP 文件部署到 Web 应用程序插槽:
az webapp config appsettings set --resource-group <ResourceGroupNam> --name <WebAppName> --slot <SlotName> --settings WEBSITE_RUN_FROM_PACKAGE="1"
az webapp deploy --resource-group <ResourceGroupNam> --name <WebAppName> --slot <SlotName> --src-path <ZipPath>
确保使用如下环境变量在
PORT
文件中定义 index.js
:
const PORT = process.env.PORT || 3000;
index.js:
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
在 package.json 中使用以下启动脚本。
"scripts": { "start": "node index.js" }
package.json:
{
"name": "my-node-project",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.21.1"
}
}
已成功部署到Azure Web应用程序,如下所示。
要检查日志,请转到 Azure Web App -> 部署槽 -> 暂存槽 -> 监控 -> 日志流。
检查是否存在与部署和其他问题相关的任何错误。
Azure 输出: