在 Linux 上部署 .NET Core 应用并配置为开机自动启动

在本文中,我们将详细介绍如何在 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. 将应用程序复制到服务器
  1. 构建和发布应用程序

在本地开发机器上,首先需要构建并发布你的 .NET Core 应用程序。你可以使用以下命令:

复制代码
dotnet publish -c Release -r linux-x64 --self-contained false

这将构建适用于 Linux 的发布版本,文件会位于 bin/Release/net9.0/linux-x64/publish/ 目录下。

  1. 上传应用程序

将发布后的应用程序文件夹(通常包括 .dll 文件、配置文件等)上传到目标 Linux 服务器。假设我们将文件上传到 /home/dotnet/yfweb/ 目录下。


3. 创建 Systemd 服务文件

为了让你的 .NET Core 应用在 Linux 上以服务的形式运行并支持开机自动启动,我们需要为应用创建一个 Systemd 服务文件

  1. 创建服务文件

/etc/systemd/system/ 目录下,创建一个新的服务文件 yfweb.service

复制代码
sudo nano /etc/systemd/system/yfweb.service
  1. 服务文件内容

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 表示该服务将作为多用户模式的一部分启动。

  1. 保存并退出:完成后,保存并关闭编辑器。

4. 重新加载 Systemd 配置

每次修改了服务文件,都需要让 Systemd 加载新的配置。执行以下命令:

复制代码
sudo systemctl daemon-reload

5. 启用和启动服务
  1. 启用服务:让服务在开机时自动启动:

    复制代码
    sudo systemctl enable yfweb.service
  2. 启动服务:立即启动服务:

    复制代码
    sudo systemctl start yfweb.service
  3. 检查服务状态:查看服务是否正在运行:

    复制代码
    sudo systemctl status yfweb.service

    如果服务运行正常,状态应显示为 active (running)


6. 查看日志(如有问题)

如果服务没有成功启动,可以通过查看日志来调试问题。使用以下命令查看服务日志:

复制代码
sudo journalctl -u yfweb.service --since "10 minutes ago"

这将显示过去 10 分钟内的日志信息,帮助你了解服务为何没有启动成功。


7. 手动运行应用程序(调试)

如果服务没有正常启动,可以手动运行应用程序,以检查是否存在任何问题。

  1. 手动运行应用程序

    复制代码
    cd /home/dotnet/yfweb
    dotnet yf.webtest.dll
  2. 常见问题

    • 确保 .NET Core 运行时的路径正确。可以通过 which dotnet 确认 /usr/bin/dotnet 是否是正确的路径。

    • 确保 .dll 文件存在并且有效。使用 ls 命令检查 /home/dotnet/yfweb/yf.webtest.dll 文件是否存在。

    • 如果 .NET Core 应用程序在本地运行时没有错误,但在 Systemd 中无法启动,可能是权限问题,确保 .dll 文件有足够的执行权限。


8. 停止、重启或禁用服务
  1. 停止服务

    复制代码
    sudo systemctl stop yfweb.service
  2. 重启服务

    复制代码
    sudo systemctl restart yfweb.service
  3. 禁用服务:如果不再希望服务在开机时自动启动,可以禁用它:

    复制代码
    sudo systemctl disable yfweb.service

总结

通过上述步骤,你可以成功地将 .NET Core 应用程序部署到 Linux 系统,并配置为开机自动启动。这个过程包含了从安装 .NET Core 运行时到创建 Systemd 服务文件,再到启动和调试服务的所有步骤。通过设置 Systemd 服务,你的应用将能够在 Linux 上以服务的形式稳定运行,并且在系统重启时自动启动。

如果在部署过程中遇到任何问题,可以通过查看日志来帮助排查。希望本文的步骤能帮助你顺利完成部署。如果有任何问题,欢迎随时向我咨询!

相关推荐
开***能几秒前
EthernetiP转modbusTCP网关在加氢催化中的应用
linux·服务器·网络
UFIT7 分钟前
系统安全及应用
linux·运维
YUNYINGXIA9 分钟前
系统安全及应用
服务器·网络·安全
又过一个秋22 分钟前
【sylar-webserver】重构日志系统
linux·c++·算法·重构
苹果酱056723 分钟前
Vue3 源码解析(六):响应式原理与 reactive
java·vue.js·spring boot·mysql·课程设计
JhonKI44 分钟前
【Linux网络】构建UDP服务器与字典翻译系统
linux·服务器·网络·tcp/ip·udp
搬码临时工1 小时前
外网如何通过路由器访问内网服务器?没有公网ip怎么实现?
运维·服务器·网络·智能路由器·内网穿透·端口映射·外网访问
伤不起bb1 小时前
系统安全及应用
linux·运维·网络·安全·系统安全
normaling1 小时前
十八,MyCat配置读写分离
mysql
啊吧怪不啊吧1 小时前
Linux常见指令介绍中(入门级)
linux·运维·服务器