当前位置: 首页 > article >正文

在 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 上以服务的形式稳定运行,并且在系统重启时自动启动。

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

相关文章:

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

在本文中,我们将详细介绍如何在 Linux 系统上部署 .NET Core 应用程序,并配置为开机自动启动。以下是一步一步的详细部署过程,适用于将 .NET Core Web 应用部署到生产环境中。 1. 安装 .NET 运行时和 SDK 首先,确保 Linux 系统上…...

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…...

DBA工作常见问题整理

MVCC机制: PostgreSQL的多版本并发控制(MVCC)是其核心特性之一,它允许数据库在高并发环境下保持高性能的同时提供事务隔离。 MVCC通过维护数据的多个版本实现: 读操作不阻塞写操作写操作不阻塞读操作避免使用锁实现并发控制 PostgreSQL的MVCC特点 写时…...

深入理解Java包装类:自动装箱拆箱与缓存池机制

深入理解Java包装类:自动装箱拆箱与缓存池机制 对象包装器 Java中的数据类型可以分为两类:基本类型和引用类型。作为一门面向对象编程语言, 一切皆对象是Java语言的设计理念之一。但基本类型不是对象,无法直接参与面向对象操作&…...

如何使用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、选中节点,找…...

批量创建OpenStack实例

在Linux终端实现批量创建OpenStack实例,支持支持统计、并发创建、安全确认、重试机制、日志。 #!/bin/bash # # 增强版OpenStack实例创建脚本(修复日志功能) # 功能:支持统计、并发创建、安全确认、重试机制 # 更新日期&#xf…...

常用的 ​​SQL 语句分类整理​​

以下是常用的 ​​SQL 语句分类整理​​,覆盖数据查询、操作、表管理和高级功能,适用于大多数关系型数据库(如 MySQL、PostgreSQL、SQL Server): 目录 ​​一、数据查询(DQL)​​ ​​1. 基础查…...

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

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

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

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

Web前端 (CSS篇)

什么是CSS? css(Cascading Style Sheets)是层叠样式表或级联样式表,是一组设置规则,用于控制web页面外观。 为什么使用CSS? CSS 用于定义网页的样式,包括针对不同设备和屏幕尺寸的设计和布局。 CSS 实例 body {background-col…...

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配置——让数据库火力全开四、监控体系——数据库的体检中心五、备份恢复——数据安全的最后防线六、主从复制——数据同步的艺术七、安全加固——守护数据长城 引言:从小白…...

golang context源码

解析 context结构 Deadline:返回 context 的过期时间; Done:返回 context 中的 channel; Err:返回错误; Value:返回 context 中的对应 key 的值. type Context interface {Deadline() (deadl…...

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

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

大模型应用开发自学笔记

理论学习地址: https://zh.d2l.ai/chapter_linear-networks/index.html autodl学术加速: source /etc/network_turboconda常见操作: 删除: conda remove --name myenv --all -y导出: conda env export > environment.yml…...

Spring能够有效地解决单例Bean之间的循环依赖问题

在Spring框架中,earlySingletonObjects和singletonObjects是两个与Bean实例化过程密切相关的概念,它们都存储在DefaultSingletonBeanRegistry类中。这两个概念主要用于Spring的依赖注入机制,特别是针对单例Bean的创建过程。 singletonObject…...

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

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

Linux 离线部署 Docker 18.06.3 终极指南(附一键安装卸载脚本)

Linux 离线部署 Docker 18.06.3 终极指南(附一键安装/卸载脚本) 摘要:本文针对无外网环境的 Linux 服务器,提供基于二进制包的 Docker 18.06.3 离线安装全流程指南。包含自动化脚本设计、服务配置优化及安全卸载方案,…...

ALSA架构学习2(驱动MAX98357A)

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

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

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