在本文中,我们将详细介绍如何在 Linux 系统上部署 .NET Core 应用程序,并配置为开机自动启动。以下是一步一步的详细部署过程,适用于将 .NET Core
Web 应用部署到生产环境中。
1. 安装 .NET 运行时和 SDK
首先,确保 Linux 系统上安装了 .NET 运行时和 SDK。这是运行 .NET Core 应用的必备环境。
安装 .NET SDK/运行时
在 Ubuntu 或其他基于 Debian 的系统中,可以通过以下命令安装:
# 更新系统包
sudo apt update
# 安装 .NET SDK
sudo apt install dotnet-sdk-9.0
# 或者,仅安装 .NET 运行时(适用于生产环境)
sudo apt install dotnet-runtime-9.0
验证安装
使用以下命令检查安装是否成功:
dotnet --version
如果显示了 .NET 的版本号,说明安装成功。
2. 将应用程序复制到服务器
- 构建和发布应用程序
在本地开发机器上,首先需要构建并发布你的 .NET Core 应用程序。你可以使用以下命令:
dotnet publish -c Release -r linux-x64 --self-contained false
这将构建适用于 Linux 的发布版本,文件会位于 bin/Release/net9.0/linux-x64/publish/
目录下。
- 上传应用程序
将发布后的应用程序文件夹(通常包括 .dll
文件、配置文件等)上传到目标 Linux 服务器。假设我们将文件上传到 /home/dotnet/yfweb/
目录下。
3. 创建 Systemd 服务文件
为了让你的 .NET Core 应用在 Linux 上以服务的形式运行并支持开机自动启动,我们需要为应用创建一个 Systemd 服务文件。
- 创建服务文件
在 /etc/systemd/system/
目录下,创建一个新的服务文件 yfweb.service
:
sudo nano /etc/systemd/system/yfweb.service
- 服务文件内容
在 yfweb.service
文件中添加以下内容:
[Unit]
Description=YFWeb .NET Core Application
After=network.target
[Service]
WorkingDirectory=/home/dotnet/yfweb
ExecStart=/usr/bin/dotnet /home/dotnet/yfweb/yf.webtest.dll
Restart=always
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=ASPNETCORE_URLS=http://0.0.0.0:5000
[Install]
WantedBy=multi-user.target
解释:
-
[Unit] 部分定义了服务的描述和依赖关系。在这里,服务需要在网络配置完成后启动。
-
[Service] 部分定义了如何启动你的应用。
ExecStart
行指定了如何启动.NET Core
应用。WorkingDirectory
指定了工作目录,Restart=always
保证服务在崩溃时会自动重启。 -
[Install] 部分告诉
Systemd
在系统启动时如何处理这个服务。WantedBy=multi-user.target
表示该服务将作为多用户模式的一部分启动。
- 保存并退出:完成后,保存并关闭编辑器。
4. 重新加载 Systemd 配置
每次修改了服务文件,都需要让 Systemd
加载新的配置。执行以下命令:
sudo systemctl daemon-reload
5. 启用和启动服务
-
启用服务:让服务在开机时自动启动:
sudo systemctl enable yfweb.service
-
启动服务:立即启动服务:
sudo systemctl start yfweb.service
-
检查服务状态:查看服务是否正在运行:
sudo systemctl status yfweb.service
如果服务运行正常,状态应显示为
active (running)
。
6. 查看日志(如有问题)
如果服务没有成功启动,可以通过查看日志来调试问题。使用以下命令查看服务日志:
sudo journalctl -u yfweb.service --since "10 minutes ago"
这将显示过去 10 分钟内的日志信息,帮助你了解服务为何没有启动成功。
7. 手动运行应用程序(调试)
如果服务没有正常启动,可以手动运行应用程序,以检查是否存在任何问题。
-
手动运行应用程序:
cd /home/dotnet/yfweb dotnet yf.webtest.dll
-
常见问题:
-
确保
.NET Core
运行时的路径正确。可以通过which dotnet
确认/usr/bin/dotnet
是否是正确的路径。 -
确保
.dll
文件存在并且有效。使用ls
命令检查/home/dotnet/yfweb/yf.webtest.dll
文件是否存在。 -
如果
.NET Core
应用程序在本地运行时没有错误,但在Systemd
中无法启动,可能是权限问题,确保.dll
文件有足够的执行权限。
-
8. 停止、重启或禁用服务
-
停止服务:
sudo systemctl stop yfweb.service
-
重启服务:
sudo systemctl restart yfweb.service
-
禁用服务:如果不再希望服务在开机时自动启动,可以禁用它:
sudo systemctl disable yfweb.service
总结
通过上述步骤,你可以成功地将 .NET Core 应用程序部署到 Linux 系统,并配置为开机自动启动。这个过程包含了从安装 .NET Core 运行时到创建 Systemd 服务文件,再到启动和调试服务的所有步骤。通过设置 Systemd
服务,你的应用将能够在 Linux 上以服务的形式稳定运行,并且在系统重启时自动启动。
如果在部署过程中遇到任何问题,可以通过查看日志来帮助排查。希望本文的步骤能帮助你顺利完成部署。如果有任何问题,欢迎随时向我咨询!