Linux 服务器上的 Umbraco 9(Kestrel 服务)- 站点在部署代码更改后死机

Umbraco 9 on Linux Server (Kestrel Service)- Site Dies After Deploying Code Changes

我在 Linux 服务器 (Ubuntu 20.04) 上安装了 Umbraco 9.0.1 实例并 运行ning。我使用的似乎是使用 Nginx 作为 Kestrel 服务的反向代理的推荐方法

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-5.0

我遇到的问题是,每当我进行代码更新并将其部署到我的 Linux 服务器,然后重新启动 kestrel 服务时,站点就会死掉。我收到 502 错误网关错误。重新加载守护进程什么都不做。我发现唯一可行的方法是,如果我导航到已部署已发布应用程序的文件系统中,然后 运行 命令:

dotnet Umbraco.Nine.Linux.dll(Umbraco.Nine.Linux是我项目的名称,对应的dll是发布的结果)

该命令只是挂起,所以我按 ctrl + C 来停止它,但这使网站恢复正常。

有没有其他人经历过这样的事情?如果不是,您如何处理 Umbraco 代码部署到 Linux 服务器?我应该补充一点,如果我使用 Visual Studio 中的默认 .net 核心网站,我就不会遇到这个问题。我部署了我的代码并重新启动了 kestrel 服务,一切都很顺利,没有站点中断,显示了更改。所以也许有一些 Umbraco 启动过程使事情消亡?

我已经检查了 kestrel 服务的日志,它们只是按预期指示服务 stops/restarts。 Nginx 中的日志让我感到困惑。他们说

2021/09/27 15:35:08 [error] 81048#81048: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 184.67.248.194, server: <mysite.com>, request: "GET /umbraco/api/test/another HTTP/1.1", upstream: "http://127.0.0.1:2003/umbraco/api/test/another", ..."

编辑: 我想我应该 post 一些额外的细节,以防万一。对于项目的发布,我使用 Visual Studio 内置发布并选择文件系统。

(请注意,我已尝试发布单个文件,但我什至还没有将其发布到 运行。我收到一条错误消息,指出该项目所依赖的某些库不会 运行文件发布。同样,这似乎是 Umbraco 特定的,因为我可以获得一个默认的 asp.net 核心站点来发布,就像这样。我只是添加这个注释,以防它与 Umbraco 9 的错误相关,因为我们发布还很早。)

之后,我将其压缩,上传到服务器,使用如下命令解压缩:

unzip -o website.zip -d <path/to/my/web/app/>

然后

sudo systemctl restart <my.kestrel.service>

那是在浏览网站时出现我上面描述的 502 Bad Gateway。对于我做错的任何帮助,将不胜感激。

所以,我解决了这个问题。我已经放弃了整个 kestrel 的事情,我正在使用一个 docker 容器来 运行 asp.net 核心应用程序。我仍然使用 nginx 作为反向代理来托管。唯一的区别是不是让 systemd kestrel 服务监听指定端口,而是 docker 容器。

我在这里发布了详细信息:https://our.umbraco.com/forum/umbraco-9/107189-umbraco-nine-on-linux-server-site-dies-after-deploying-code-changes

希望对其他人有所帮助!

我非常兴奋,因为整件事 'script'-able 所以我设法在 AWS CodePipeline 中实现了自动化。