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

news2025/4/21 21:56:41

在本文中,我们将详细介绍如何在 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 上以服务的形式稳定运行,并且在系统重启时自动启动。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2339688.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python多任务编程:进程全面详解与实战指南

1. 进程基础概念 1.1 什么是进程? 进程(Process)是指正在执行的程序,是程序执行过程中的一次指令、数据集等的集合。简单来说,进程就是程序的一次执行过程,它是一个动态的概念。 想象你打开电脑上的音乐播放器听歌,…

【QT】 QT中的列表框-横向列表框-树状列表框-表格列表框

QT中的列表框-横向列表框-树状列表框-表格列表框 1.横向列表框(1)主要方法(2)信号(3) 示例代码1:(4) 现象:(5) 示例代码2:加载目录项在横向列表框显示(6) 现象: 2.树状列表框 QTreeWidget(1)使用思路(2)信号(3)常用的接口函数(4) 示例代码&am…

决策树:ID3,C4.5,CART树总结

树模型总结 决策树部分重点关注分叉的指标,多叉还是单叉,处理离散还是连续值,剪枝方法,以及回归还是分类 一、决策树 ID3(Iterative Dichotomiser 3) 、C4.5、CART决策树 ID3:确定分类规则判别指标、寻找能够最快速降低信息熵的方…

easyexcel使用模板填充excel坑点总结

1.单层map设置值是{属性},那使用两层map进行设置值,是不是可以使用{属性.属性},以为取出map里字段只用{属性}就可以设置值,那再加个.就可以从里边map取出对应属性,没有两层map写法 填充得到的文件打开报错 was empty (…

C# LINQ基础知识

简介 LINQ(Language Integrated Query),语言集成查询,是一系列直接将查询功能集成到 C# 语言的技术统称。使用LINQ表达式可以对数据集合进行过滤、排序、分组、聚合、串联等操作。 例子: public class Person {public int Id;public string…

GCoNet+:更强大的团队协作 Co-Salient 目标检测器 2023 GCoNet+(翻译)

摘要 摘要:本文提出了一种新颖的端到端群体协作学习网络,名为GCoNet,它能够高效(每秒250帧)且有效地识别自然场景中的共同显著目标。所提出的GCoNet通过基于以下两个关键准则挖掘一致性表示,实现了共同显著…

QT常见输入类控件及其属性

Line Edit QLineEdit用来表示单行输入框,可以输入一段文本,但是不能换行 核心属性: 核心信号 信号 说明 void cursorPositionChanged(int old,int new) 当鼠标移动时发出此型号,old为先前位置,new为新位置 void …

Few-shot medical image segmentation with high-fidelity prototypes 论文总结

题目:Few-shot medical image segmentation with high-fidelity prototypes(高精确原型) 论文:Few-shot medical image segmentation with high-fidelity prototypes - ScienceDirect 源码:https://github.com/tntek/D…

如何使用Node-RED采集西门子PLC数据通过MQTT协议实现数据交互并WEB组态显示

需求概述 本章节主要实现一个流程:使用纵横智控的EG网关通过Node-red(可视化编程)采集PLC数据,并通过MQTT协议和VISION(WEB组态)实现数据交互。 以采集西门子PLC为例,要采集的PLC的IP、端口和点…

【cocos creator 3.x】速通3d模型导入, 模型创建,阴影,材质使用,模型贴图绑定

1、右键创建平面,立方体 2、点击场景根节点,shadows勾选enabled3、点击灯光,shadow enabled勾选 4、点击模型,勾选接收阴影,投射阴影(按照需要勾选) 5、材质创建 6、选中节点,找…

驱动开发硬核特训 · Day 15:电源管理核心知识与实战解析

在嵌入式系统中,电源管理(Power Management)并不是“可选项”,而是实际部署中影响系统稳定性、功耗、安全性的重要一环。今天我们将以 Linux 电源管理框架 为基础,从理论结构、内核架构,再到典型驱动实战&a…

【零基础】基于DeepSeek-R1与Qwen2.5Max的行业洞察自动化平台

自动生成行业报告,通过调用两个不同的大模型(DeepSeek 和 Qwen),完成从行业趋势分析到结构化报告生成的全过程。 完整代码:https://mp.weixin.qq.com/s/6pHi_aIDBcJKw1U61n1uUg 🧠 1. 整体目的与功能 该脚本实现了一个名为 ReportGenerator 的类,用于: 调用 DeepSe…

C 语言联合与枚举:自定义类型的核心解析

目录 1.联合体 1.1联合体的声明与创建 1.2联合体在内存中的存储 1.3相同成员的结构体与内存比较 1.4联合体内存空间大小的计算 1.5联合体的应用 2.枚举类型 2.1枚举变量的声明 2.2枚举变量的优点 2.3枚举的使用 上篇博客中,我们通过学习了解了C语言中一种自…

基于Canal+Spring Boot+Kafka的MySQL数据变更实时监听实战指南

前期知识背景 binlog 什么是binlog 它记录了所有的DDL和DML(除 了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL 的二进制日志是事务安全型的。一般来说开启二进制日志大概会有1%的性能损耗。 binlog分类 MySQL Bi…

MySQL运维三部曲初级篇:从零开始打造稳定高效的数据库环境

文章目录 一、服务器选型——给数据库一个舒适的家二、系统调优——打造高性能跑道三、MySQL配置——让数据库火力全开四、监控体系——数据库的体检中心五、备份恢复——数据安全的最后防线六、主从复制——数据同步的艺术七、安全加固——守护数据长城 引言:从小白…

【MySQL】MySQL的基础语法及其语句的介绍

1、基础语法 mysql -h【主机名】 -u【用户名】 -p //登录MySQL exit或quit; //退出MySQL show database; //查看MySQL下的所有数据库 use 【数据库名】; //进入数据库 show tables; //查看数据库下的所有表名 *MySQL的启动和关闭 &am…

【计算机视觉】三维视觉项目 - Colmap二维图像重建三维场景

COLMAP 3D重建 项目概述项目功能项目运行方式1. 环境准备2. 编译 COLMAP3. 数据准备4. 运行 COLMAP 常见问题及解决方法1. **编译问题**2. **运行问题**3. **数据问题** 项目实战建议项目参考文献 项目概述 COLMAP 是一个开源的三维重建软件,专注于 Structure-from…

ALSA架构学习2(驱动MAX98357A)

1 前言和环境 之前其实写过两篇,一篇是讲ALSA,一篇是I2S。 ALSA架构学习1(框架)_alsa框架学习-CSDN博客 总线学习5--I2S_max98357接喇叭教程-CSDN博客 在ALSA那篇的结尾,也提了几个小练习。比如: ### 4…

数据结构*集合框架顺序表-ArrayList

集合框架 常见的集合框架 什么是顺序表 顺序表是一种线性表数据结构,它借助一组连续的存储单元来依次存储线性表中的数据元素。一般情况下采用数组存储。 在数组上完成数据的增删查改。 自定义简易版的顺序表 代码展示: public interface IArray…

VMware Workstation 保姆级 Linux(CentOS) 创建教程(附 iso)

文章目录 一、下载二、创建 一、下载 CentOS-7.9-x86_64-DVD-2009.iso 二、创建 VMware Workstation 保姆级安装教程(附安装包) VMware Workstation 保姆级安装教程(附安装包) VMware Workstation 保姆级安装教程(附安装包)