首页 > 编程语言 >Asp-Net-Core学习笔记:5.构建和部署

Asp-Net-Core学习笔记:5.构建和部署

时间:2024-02-08 15:56:21浏览次数:35  
标签:可执行文件 Core Asp supervisor stdout dotnet Net true

从上次开始学习Asp.Net Core以来,一直都是玩一玩,还没有什么机会用来实战,最近单位有个新的小项目,于是我用Asp.Net Core来尝尝新,结果也是非常OK,熟悉之后开发效率感觉和Django基本没差。

那么进入正题,本文简单说说Asp.Net Core应用的构建和部署。

构建

构建是使用build命令,不过一般我们都用vs或者rider之类的IDE,应该比较少会用到这个命令:

dotnet build

发布

本文着重说一下发布这块。发布顾名思义就是把项目编译成一个可执行的文件,可以方便我们拿到其他机器或者是部署到服务器上去运行,对于Java,就是打包成jar包,依赖JavaRuntime运行,或者是可以放到Tomcat运行的war包;对于go语言,是生成一个可执行的文件,一把梭执行就完事了;对于Python语言,不好意思,好像没有什么很好的方案,可以打包成wheel包,也可以pyinstaller打包exe,不过对于web应用的部署,一般还是用docker。

那么对于我们Asp.Net Core应用来说,和go语言一样,非常方便,可以打包成单个的可执行文件,一个字,爽!

参考:https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-publish

最简单的发布命令是:

dotnet publish

使用了这个命令,会在publish目录生成一大堆的文件,包括依赖啊,应用的核心dll包,以及对应平台的可执行文件。请注意,这样生成的一大堆文件是要依赖于本机上的.NetCore Runtime来执行的。

为了方便起见,我们肯定不想在部署的时候还需要在服务器上安装.NetCore Runtime呀,所以看下面。

构建不依赖DotNet Sdk的可执行文件,需要制定目标平台:

dotnet publish -r <RID>

其中,RID参考:https://docs.microsoft.com/zh-cn/dotnet/core/rid-catalog

附上几个常用的吧:

  • Windows
    • win-x86
    • win-x64
    • win-arm
    • win-arm64
  • Linux
    • linux-x64
    • linux-arm
    • linux-arm64

例如我要构建一个在Linux服务器上可以使用的可执行文件,使用以下命令:

dotnet publish -r linux-x64

生成的文件如下:

可以看到这一大坨有三百多个文件夹和文件,这样放到服务器是真的麻烦,又占地方又丑,再看看大小:

一百多M,这也太占空间了,上传到服务器都要等好久,不过别急,接下来微软的黑魔法来了~

搭配上这俩选项

dotnet publish -r linux-x64 -c Release -p:PublishSingleFile=true -p:PublishTrimmed=true

运行一下,嗖!
再看看生成的文件,只有一个可执行文件和几个配置文件、web静态文件目录!(因为我用Debug版,所有有pdb调试文件)比刚才清爽多了!

我们再看看文件大小:

比刚才小了几十M!这下舒服了!

接下来介绍一下多的那两个参数,感觉不用介绍大家也猜到了~

  • -c Release 表示以Release配置来生成
  • -p:PublishSingleFile=true 表示生成单个可执行文件,像go那样
  • -p:PublishTrimmed=true 表示裁剪可执行文件的大小,就像大家看到的那样,大小缩减了几十M!

这样直接把这个可执行文件丢到服务器上就可以运行了,不过ssh一断开就又没有了~

所以接下来介绍使用supervisor来监控web应用的运行

部署

我们选择supervisor这个简单的工具来管理和监控web应用的运行,它是python写的,简单好用。

首先需要安装,可以使用pip:

pip install supervisor

然后在/etc/supervisord.d/目录下创建我们的配置,这里有个模板可以参考。

[program:swatow_affairs]
# 脚本目录
directory = /path/dotnet/swatow_affairs
# 脚本执行命令
command = /path/to/swatow_affairs/SwatowAffairsBackend --urls "http://*:15001;"

# supervisor启动的时候是否随着同时启动,默认True
autostart = true
# 当程序exit的时候,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况,
# 有三个选项,false,unexpected和true。
# 如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的
autorestart = true
# 这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1
startsecs = 1

# 脚本运行的用户身份 
user = root

# 日志输出 
stderr_logfile = /path/to/swatow_affairs/log/stderr.log
stdout_logfile = /path/to/swatow_affairs/log/stdout.log
# 把stderr重定向到stdout,默认 false
redirect_stderr = true
# stdout日志文件大小,默认 50MB
stdout_logfile_maxbytes = 20
# stdout日志文件备份数
stdout_logfile_backups = 20

把这个文件配置好之后就可以启动supervisor了,命令如下:

systemctl start supervisord.service

也可以使用:

service supervisord start

不同的Linux发行版命令有所差别,可以自行查阅文档。

启动supervisor之后,我们的配置文件会自动加载,然后我们的web应用也就随之启动啦。

更多配置可以查看supervisor的官方文档:https://github.com/Supervisor/supervisor

参考资料

欢迎交流

我整理了一系列的技术文章和资料,在公众号「程序设计实验室」后台回复 linux、flutter、c#、netcore、android、kotlin、java、python 等可获取相关技术文章和资料,同时有任何问题都可以在公众号后台留言~

标签:可执行文件,Core,Asp,supervisor,stdout,dotnet,Net,true
From: https://www.cnblogs.com/deali/p/18011882

相关文章

  • Asp-Net-Core学习笔记:WebApi开发实践
    前言用AspNetCore做Api开发也有一段时间了,正好年底在做总结,做一个WebApi开发实践笔记。暂时想到的一些技术关键词,同时也作为本文的大纲,现在对这套技术体系的了解还不够深入,以后会持续更新这个Api开发实践~身份认证:JwtBearer分页:X.PagedList缓存ResponseCacheRedis:St......
  • Asp-Net-Core学习笔记:3.使用SignalR实时通信框架开发聊天室
    SignalR牛刀小试在MVP杨老师的博客里看到这么个东西,我还以为是NetCore3才推出的新玩意,原来是已经有很多年的历史了,那看来还是比较成熟的一个技术了。简介SignalR是一个.NETCore/.NETFramework的开源实时框架,SignalR的可使用WebSocket,ServerSentEvents和LongPolling......
  • Asp-Net-Core学习笔记:部署,早知道,还是docker,以及一点碎碎念
    前言AspNetCore技术栈在我们团队里的使用也有一段时间了,之前的部署方式一直是本地编译之后上传可执行文件到服务器,使用supervisor来管理进程这种很原始的方式。参考之前的文章:对于小项目来说尚可,够用,但是存在几个问题:每次更新花费的时间太长了,无论是Framework-Dependent还是S......
  • 【译】宣布推出适用于 .NET 的 Azure Migrate 应用程序和代码评估工具
    原文|OliaGavrysh翻译|郑子铭我们很高兴地宣布发布一款新工具,可以帮助您将本地.NET应用程序迁移到Azure。适用于.NET的AzureMigrate应用程序和代码评估工具(简称AppCAT)允许你评估应用程序的.NET源代码、配置和二进制文件,以识别将应用程序迁移到Azure时的潜在......
  • Asp .Net Core 系列:Asp .Net Core 集成 Panda.DynamicWebApi
    目录简介Asp.NetCore集成Panda.DynamicWebApi配置原理什么是POCOController?POCO控制器原理ControllerFeatureProvider实现自定义判断规则IApplicationModelConventionPanda.DynamicWebApi中的实现ConfigureApiExplorer()ConfigureSelector()ConfigureParameters()简介Panda......
  • .net介绍以及其常见漏洞
    前言:本篇来学习.NET项目和其使用的c#的一些通用漏洞1.0.NET的基础介绍.NET是由微软(Microsoft)开发的一个用于构建各种应用程序的开发平台,包括Web应用程序、桌面应用程序、移动应用程序等。它是一个综合性的技术栈,提供了一系列的开发框架、工具和库,使得开发者能够使用多种编......
  • 开启未来创新之门:.NET Conf China 2023 精彩回顾及资料下载
    2023年12月16日-17日,一年一度的.NETConfChina2023中国.NET开发者大会在北京盛大举办!大会以第一天主会场+AI、.NET8、云原生、IoT、前端&安全5大分会场,第二天闭门会议+三场工作坊的形式,为现场以及线上的.NET爱好者们带来了为期两天的.NET年度盛宴。本次.NETConf......
  • DataSpell 2023:专注于数据,加速您的数据科学之旅 mac/win版
    JetBrainsDataSpell2023是一款专为数据科学家和数据分析师设计的集成开发环境(IDE)。这款IDE提供了强大的数据分析和可视化工具,旨在帮助用户更快速、更高效地进行数据科学工作。→→↓↓载DataSpell2023mac/win版 DataSpell2023在保持其一贯的数据处理、数据清洗、数据探......
  • Rider 2023:打造高效.NET项目的智能IDE,让开发更简单mac/win版
    JetBrainsRider2023激活版下载是一款专为.NET开发者打造的强大集成开发环境(IDE)。这款IDE提供了丰富的功能,旨在帮助开发者更快速、更高效地编写、调试和测试.NET应用程序。→→↓↓载Rider2023mac/win版 Rider2023在保持了其一贯的智能代码补全、代码导航和重构工具的同......
  • 在Windows上使用.NET部署到Docker 《让孩子们走出大坑》
    折腾Docker有几天了,整别的都没这个糟心。目前已经顺利部署运行起来了。顺便给大家分享下处理在Windows上使用.NET部署到Docker的相关问题解决方法。 1. Docker无法安装问题(下图是网上找了个类似的安装失败截图,页面大致一样,就是提示内容是DockerDesktop只能运行在win10......