29. 【.NET 8 实战--孢子记账--从单体到微服务】--项目发布

这是本专栏最后一篇文章了,在这片文章里我们不重点讲解如何配置服务器,重点讲如何发布服务,我们开始吧。

一、服务器配置

服务器配置包含:服务器的选择和项目运行环境的配置,下面我们分别来讲解一下。
在服务器选择上,最低的要求是2G2U,推荐的配置当然是越高越好,但是对于咱这个实战项目来说推荐配置4U8G即可。当然,你也可以选择在本地安装虚拟机,在虚拟机里发布我们的项目。推荐的操作系统是Ubuntu 24.04 LTS,因为24.04版本是带有.NET 8 的,我们只需执行命令把它安装上就可以了。
项目的运行环境我们需要安装aspnetcore-runtime-8.0,这个按照微软官网上的操作即可。我们还需要安装MySql 8RabbitMQ,这两个软件同样参照各自官网上的文档安装即可。

二、发布

在解决方案管理器中右键SporeAccounting选择发布
在这里插入图片描述
在打开的发布窗口点击显示所有设置后弹出发布配置框,配置选择Release,目标框架选择net8.0,部署模式选择框架依赖,目标运行时选择可移植。最后点击保存,再点击发布,既可将我们的项目发布出来了。

部署模式和目标运行时这两个选项有必要讲一下。在部署模式下拉中有两个选项:框架以来、独立,这两个的有什么区别呢?以框架依赖部署模式发布的应用程序依赖于目标机器上已安装的 .NET 运行时,应用程序本身不包含 .NET 运行时,只有应用程序代码和必要的库。因为不包含 .NET 运行时,发布包的大小较小,并且 多个应用程序可以共享同一个 .NET 运行时,节省磁盘空间。但是,目标机器上必须安装与应用程序兼容的 .NET 运行时版本,如果运行时版本不匹配,应用程序无法运行。以独立部署模式发布的应用程序包含 .NET 运行时和所有依赖项,因此不依赖于目标机器上已安装的任何 .NET 运行时。应用程序可以在没有预先安装 .NET 运行时的机器上运行,因为运行时已经包含在发布包中,同时应用程序使用发布时的 .NET 运行时版本,不受目标机器上其他 .NET 运行时版本的影响。但是,因为包含 .NET 运行时,发布包的大小较大,每个独立部署的应用程序都有自己的 .NET 运行时,可能会占用更多的磁盘空间。
目标运行时用于指定你希望应用程序在其上运行的操作系统和硬件平台。不同的目标运行时适用于不同的操作系统和硬件配置。
在这里插入图片描述
发布完成后,点击导航会自动打开发布目录,复制全部文件和文件夹上传到我们的服务器上。上传服务器后,并不是说就完事了,我们还需要设置一个监控服务,如果我们的账本服务因为某系原因挂了,这个监控服务就可以把它拉起来。我们来看一下如何做。
在Ubuntu系统上我们一般使用systemd服务来实现.NET 8 项目的自启动。首先在/etc/systemd/system/目录下创建一个新的服务文件,使用systemctl命令来生成一个基本的模板,或者直接手动创建一个都可以。命令如下:

sudo nano /etc/systemd/system/mywebapi.service

然后在打开的编辑器中,输入以下内容,根据应用程序进行相应的调整:

[Unit]
Description=My .NET 6 Web API
After=network.target
Wants=network-online.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/path/to/your/webapi
ExecStart=dotnet  /path/to/your/webapi.dll
Restart=always
RestartSec=10
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target 

在上面的代码中我们进行了一些必要的配置,具体字段的说明如下:

  • Description: 服务的描述。
  • After: 指定服务在哪个目标之后启动。
  • Wants: 指定服务依赖的另一个目标。
  • Type: 指定服务的类型,simple是最常见的类型。
  • User: 指定服务运行的用户。
  • WorkingDirectory: 指定服务的工作目录。
  • ExecStart: 启动服务时执行的命令。
  • Restart: 指定服务失败时是否自动重启。
  • RestartSec: 指定重启服务前的等待时间。
  • Environment: 设置环境变量。
  • WantedBy: 指定服务应该被哪个目标所需要。

配置完成后,我们保存并关闭服务文件后,并设置服务权限:

sudo chmod 644 /etc/systemd/system/mywebapi.service

接着我们重新加载systemd以识别新的服务:

sudo systemctl daemon-reload

最后使用以下命令来启动服务,并设置为开机自启:

sudo systemctl start mywebapi.service
sudo systemctl enable mywebapi.service

三、总结

本文是本专栏的最后一篇文章,聚焦于服务发布的关键步骤,而非详细的服务器配置。本篇内容从服务器配置到项目发布,再到服务自启动配置,帮助大家完整掌握发布流程。在服务器配置方面,推荐选择4U8G配置或本地虚拟机,运行环境则需要安装 aspnetcore-runtime-8.0、MySQL 8 和 RabbitMQ。在项目发布部分,我们通过解决方案管理器设置发布参数(如部署模式和目标运行时),并重点分析了框架依赖与独立部署两种模式的区别及适用场景。最后,文章讲解了如何在 Ubuntu 系统上使用 systemd 服务实现项目自启动,通过配置服务文件,实现项目的稳定运行和自动恢复。
至此,本专栏以实战为核心,从开发到部署,完成了一次完整的项目生命周期分享,希望能对大家的实际工作有所助益!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(五)

Understanding Diffusion Models: A Unified Perspective(五) 文章概括基于得分的生成模型(Score-based Generative Models) 文章概括 引用: article{luo2022understanding,title{Understanding diffusion models: A…

TOGAF之架构标准规范-信息系统架构 | 数据架构

TOGAF是工业级的企业架构标准规范,信息系统架构阶段是由数据架构阶段以及应用架构阶段构成,本文主要描述信息系统架构阶段中的数据架构阶段。 如上所示,信息系统架构(Information Systems Architectures)在TOGAF标准规…

自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测

代码1实现逻辑回归并保存模型 import torch import numpy as np import torch.nn as nn from torch.utils.data import DataLoader, TensorDatasetdata [[-0.5, 7.7], [1.8, 98.5], [0.9, 57.8], [0.4, 39.2], [-1.4, -15.7], [-1.4, -37.3], [-1.8, -49.1], [1.5, 75.6],[0.…

基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真。选择回归法进行最大功率点的追踪,使用光强和温度作为影响因素,电压作为输出进行建模。…

【数据结构】 并查集 + 路径压缩与按秩合并 python

目录 前言模板朴素实现路径压缩按秩合并按树高为秩按节点数为秩 总结 前言 并查集的基本实现通常使用森林来表示不同的集合,每个集合用一棵树表示,树的每个节点有一个指向其父节点的指针。 如果一个节点是它自己的父节点,那么它就是该集合的代…

Flutter android debug 编译报错问题。插件编译报错

下面相关内容 都以 Mac 电脑为例子。 一、问题 起因:(更新 Android studio 2024.2.2.13、 Flutter SDK 3.27.2) 最近 2025年 1 月 左右,我更新了 Android studio 和 Flutter SDK 再运行就会出现下面的问题。当然 下面的提示只是其…

CSAPP学习:前言

前言 本书简称CS:APP。 背景知识 一些基础的C语言知识 如何阅读 Do-做系统 在真正的系统上解决具体的问题,或是编写和运行程序。 章节 2025-1-27 个人认为如下章节将会对学习408中的操作系统与计算机组成原理提供帮助,于是先凭借记忆将其简单…

动态规划DP 数字三角型模型 方格取数(题目详解+C++代码实现)

方格取数 原题链接 AcWing 1027. 方格取数 题目描述 设有 NN 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。 如下图所示: 某人从图中的左上角 A 出发,可以向下行走,也可以向右行走&…

【Linux】20.基础IO(2)

文章目录 2. 理解文件系统2.1 inode2.2 如何理解目录2.3 硬链接2.4 软链接2.5 硬链接和软链接的区别 2. 理解文件系统 2.1 inode 我们使用ls -l的时候看到的除了看到文件名,还看到了文件元数据。 ydk_108iZuf68hz06p6s2809gl3i1Z:~/108/lesson20$ ll total 8 drw…

read+write实现:链表放到文件+文件数据放到链表 的功能

思路 一、 定义链表: 1 节点结构(数据int型) 2 链表操作(创建节点、插入节点、释放链表、打印链表)。 二、链表保存到文件 1打开文件 2遍历链表、写文件: 遍历链表,write()将节点数据写入文件。…

图漾相机-ROS2-SDK-Ubuntu版本编译(新版本)

官网编译文档链接: https://doc.percipio.xyz/cam/latest/getstarted/sdk-ros2-compile.html 国内gitee下载SDK链接: https://gitee.com/percipioxyz 国外github下载SDK链接: https://github.com/percipioxyz 1.Camport ROS2 SDK 介绍 1.1 …

C# 添加、替换、提取、或删除Excel中的图片

在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观。此外,对于已有图片,你有事可能需要更新图片以确保信息的准确性,或者将Excel 中的图片单独保存,用于资料归档、备…

智能风控 数据分析 groupby、apply、reset_index组合拳

目录 groupby——分组 本例 apply——对每个分组应用一个函数 等价用法 reset_index——重置索引 使用前​编辑 注意事项 groupby必须配合聚合函数、 关于agglist 一些groupby试验 1. groupby对象之后。sum(一个列名) 2. groupby对象…

浅析百度AOI数据与高德AOI数据的差异性

目录 前言 一、AOI属性数据 1、百度AOI数据 2、高德AOI数据 二、AOI矢量边界 1、百度AOI空间范围 2、高德AOI空间范围 三、数据获取频次和难易程度 1、接口限制 2、数据转换成本 四、总结 前言 在当今数字化时代,地理信息数据的精准性和丰富性对于城市规划…

通过亚马逊云科技Bedrock打造自定义AI智能体Agent(上)

大家对于智能体代理Agent一定已经非常熟悉,自主代理(Autonomous Agents) 目前在AI行业极其热门并具有巨大的潜力,能够显著提升开发者日常的工作效率、自动化日常琐碎、重复性任务,并生成全新的内容。Agent可以理解用户…

汇编的使用总结

一、汇编的组成 1、汇编指令(指令集) 数据处理指令: 数据搬移指令 数据移位指令 位运算指令 算术运算指令 比较指令 跳转指令 内存读写指令 状态寄存器传送指令 异常产生指令等 2、伪指令 不是汇编指令,但是可以起到指令的作用,伪…

S4 HANA定义税码(FTXP)

本文主要介绍在S4 HANA OP中S4 HANA定义税码相关设置。具体请参照如下内容: 定义税码(FTXP) 以上界面是根据国家的“定价过程”确定的。蓝色的行项目表示目前已经激活的行项目。 不可抵扣进项税一般用于采购业务中,因此用在进项税码中。 消费税和营业…

Git进阶笔记系列(01)Git核心架构原理 | 常用命令实战集合

读书笔记:卓越强迫症强大恐惧症,在亲子家庭、职场关系里尤其是纵向关系模型里,这两种状态很容易无缝衔接。尤其父母对子女、领导对下属,都有望子成龙、强将无弱兵的期望,然而在你的面前,他们才是永远强大的…

多级缓存(亿级并发解决方案)

多级缓存(亿级流量(并发)的缓存方案) 传统缓存的问题 传统缓存是请求到达tomcat后,先查询redis,如果未命中则查询数据库,问题如下: (1)请求要经过tomcat处…

场景设计学习-积分系统

场景设计-积分系统 1.概念和规则 积分:用户在网站的各种交互行为都可以产生积分,积分值与行为类型有关天梯榜:按照每个用户的总积分排序得到的排行榜,称为天梯榜。排名靠前的有奖励。天梯榜每个自然月为一个赛季,月初…