如何在 Azure 应用服务中托管 Strapi?
How do you host Strapi within an Azure App Service?
在继承了 Azure 容器实例上托管的 Strapi 应用程序之后,事实证明它是喜怒无常的。
鉴于它表面上只是一个 Nodejs 应用程序,我们希望将其移动到 Azure App Service 以利用托管节省以及通过插槽交换进行部署。
Strapi 的当前文档包括 Azure VM 和作为 Docker 容器部署的指南。但是,我们希望在基于 windows 的应用程序服务上作为代码托管。
windows 超过 linux 的原因是 运行 在 linux 版本上部署 Zip Deploy 或 Web Deploy 所花费的时间。我们也可以 运行 现有应用程序服务计划中的应用程序。
问题是如何在 Azure 应用服务上托管 Strapi?
经过反复试验,我们终于搞定了,运行宁,以下是成功的步骤。
创建应用服务
创建一个 App Service 来发布“代码”,运行 节点 14 LTS 的时间和 OS 的 Windows。
配置应用服务平台
创建后导航到应用服务的“配置”并确保 WEBSITE_NODE_DEFAULT_VERSION
设置为“~14”。并在“常规设置”选项卡上将平台更新为“64 位”。这确保了 Strapi 使用的“锐利”包可以 运行,因为它需要 64 位平台。
进行这些更改后,导航至控制台并运行命令node -p process.arch
您应该看到结果是result is "x64"。
应用程序设置
现在配置您的应用程序特定设置。对于开箱即用的 Strapi 应用程序,这可能包括数据库配置和任何插件,如邮件、身份和存储提供程序。
对我们来说,关键部分是 Strapi 用于启动和托管应用程序的设置。
这包括 HOST
和 PUBLIC_URL
settings。
HOST
= 0.0.0.0
和 PUBLIC_URL
= https://{APP_NAME}.azurewebsites.net/
(将 APP_NAME 替换为您的应用名称)。
代码更改
Azure 上 运行 需要对开箱即用的 Strapi 应用进行一些更改。
- 在项目的路由中添加一个web.config。此处可以显示示例:https://gist.github.com/bradleyisfluent/1033bb9dc908b2386c5ee09e0b36409f。这利用 IISNode 运行
server.js
作为应用程序的入口点。
- 在项目的根目录中创建一个
server.js
。内容应如下所示:
const strapi = require("strapi");
strapi().start();
- 修改 Strapi 配置中的当前
server.js
/config/server.js
以访问服务器上的环境变量,如下所示:
host: process.env.HOST,
port: process.env.PORT || 3000,
n.b 当然在这里,我们只是简单地访问环境变量和配置,它可以通过不同的方式进行管理。但关键是通过 process.env.PORT
访问端口,这是在应用程序服务上隐式设置的。
部署代码
这是我们仍在进行中的一些工作。利用 Azure Devops 管道,我们正在构建和部署应用程序。
使用 Azure App Service 的“运行 From Package”功能似乎不适用于 Strapi。我的假设是某些东西试图写入 wwwroot
目录,该目录在此设置中是只读的,这会导致错误。
所以我们使用“webDeploy”,考虑到我们构建的项目的大小(218mb,感谢 node_modules),这意味着部署时间很慢。然而,这仅适用于我们的预览版,因为我们可以使用插槽交换来发布到生产版。
这是一个 link 到工作 azure-pipelines.yml
的略微简化版本:https://gist.github.com/bradleyisfluent/ffff8c1b6bedd5052274dc0d9f19a91d
在继承了 Azure 容器实例上托管的 Strapi 应用程序之后,事实证明它是喜怒无常的。
鉴于它表面上只是一个 Nodejs 应用程序,我们希望将其移动到 Azure App Service 以利用托管节省以及通过插槽交换进行部署。
Strapi 的当前文档包括 Azure VM 和作为 Docker 容器部署的指南。但是,我们希望在基于 windows 的应用程序服务上作为代码托管。
windows 超过 linux 的原因是 运行 在 linux 版本上部署 Zip Deploy 或 Web Deploy 所花费的时间。我们也可以 运行 现有应用程序服务计划中的应用程序。
问题是如何在 Azure 应用服务上托管 Strapi?
经过反复试验,我们终于搞定了,运行宁,以下是成功的步骤。
创建应用服务
创建一个 App Service 来发布“代码”,运行 节点 14 LTS 的时间和 OS 的 Windows。
配置应用服务平台
创建后导航到应用服务的“配置”并确保 WEBSITE_NODE_DEFAULT_VERSION
设置为“~14”。并在“常规设置”选项卡上将平台更新为“64 位”。这确保了 Strapi 使用的“锐利”包可以 运行,因为它需要 64 位平台。
进行这些更改后,导航至控制台并运行命令node -p process.arch
您应该看到结果是result is "x64"。
应用程序设置
现在配置您的应用程序特定设置。对于开箱即用的 Strapi 应用程序,这可能包括数据库配置和任何插件,如邮件、身份和存储提供程序。
对我们来说,关键部分是 Strapi 用于启动和托管应用程序的设置。
这包括 HOST
和 PUBLIC_URL
settings。
HOST
= 0.0.0.0
和 PUBLIC_URL
= https://{APP_NAME}.azurewebsites.net/
(将 APP_NAME 替换为您的应用名称)。
代码更改
Azure 上 运行 需要对开箱即用的 Strapi 应用进行一些更改。
- 在项目的路由中添加一个web.config。此处可以显示示例:https://gist.github.com/bradleyisfluent/1033bb9dc908b2386c5ee09e0b36409f。这利用 IISNode 运行
server.js
作为应用程序的入口点。 - 在项目的根目录中创建一个
server.js
。内容应如下所示:
const strapi = require("strapi");
strapi().start();
- 修改 Strapi 配置中的当前
server.js
/config/server.js
以访问服务器上的环境变量,如下所示:
host: process.env.HOST,
port: process.env.PORT || 3000,
n.b 当然在这里,我们只是简单地访问环境变量和配置,它可以通过不同的方式进行管理。但关键是通过 process.env.PORT
访问端口,这是在应用程序服务上隐式设置的。
部署代码
这是我们仍在进行中的一些工作。利用 Azure Devops 管道,我们正在构建和部署应用程序。
使用 Azure App Service 的“运行 From Package”功能似乎不适用于 Strapi。我的假设是某些东西试图写入 wwwroot
目录,该目录在此设置中是只读的,这会导致错误。
所以我们使用“webDeploy”,考虑到我们构建的项目的大小(218mb,感谢 node_modules),这意味着部署时间很慢。然而,这仅适用于我们的预览版,因为我们可以使用插槽交换来发布到生产版。
这是一个 link 到工作 azure-pipelines.yml
的略微简化版本:https://gist.github.com/bradleyisfluent/ffff8c1b6bedd5052274dc0d9f19a91d