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命令来生成一个基本的模板,或者直接手动创建一个都可以。命令如下:

shell 复制代码
sudo nano /etc/systemd/system/mywebapi.service

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

Plain 复制代码
[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: 指定服务应该被哪个目标所需要。

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

shell 复制代码
sudo chmod 644 /etc/systemd/system/mywebapi.service

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

shell 复制代码
sudo systemctl daemon-reload

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

shell 复制代码
sudo systemctl start mywebapi.service
sudo systemctl enable mywebapi.service

三、总结

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

至此,本专栏以实战为核心,从开发到部署,完成了一次完整的项目生命周期分享,希望能对大家的实际工作有所助益!

相关推荐
码熔burning1 小时前
【Spring Cloud Alibaba】:Nacos 入门讲解
分布式·spring cloud·微服务
云上艺旅2 小时前
K8S学习之基础六十八:Rancher创建deployments资源
学习·云原生·容器·kubernetes·rancher
rider1892 小时前
【4】搭建k8s集群系列(二进制部署)之安装master节点服务(kube-apiserver)
云原生·容器·kubernetes
強云4 小时前
界面架构- MVP(Qt)
qt·架构
GreenMountainEcho9 小时前
Kubernetes 入门篇之 Node 安装与部署
云原生·容器·kubernetes
alden_ygq12 小时前
k8s statefulset pod重启顺序
云原生·容器·kubernetes
极客先躯13 小时前
高级java每日一道面试题-2025年3月22日-微服务篇[Nacos篇]-Nacos的主要功能有哪些?
java·开发语言·微服务
赋创小助手14 小时前
Gartner预计2025年AI支出达6440亿美元:数据中心与服务器市场的关键驱动与挑战
运维·服务器·人工智能·科技·架构
magic 24515 小时前
MVC(Model-View-Controller)架构模式和三层架构介绍
架构·mvc
bjzhang7515 小时前
微服务组件——Eureka组件的安装与使用指南
微服务·eureka