查看: 125|回复: 8

Asp.Net Core学习笔记:(五)构建和部署

[复制链接]

3

主题

11

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2023-3-24 19:55:38 | 显示全部楼层 |阅读模式
从上次开始学习http://Asp.Net Core以来,一直都是玩一玩,还没有什么机会用来实战,最近公司有个新的小项目,于是我用http://Asp.Net Core来尝尝新,结果也是非常OK,熟悉之后开发效率感觉和Django基本没差。
那么进入正题,本文简单说说http://Asp.Net Core应用的构建和部署。
构建

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

本文着重说一下发布这块。发布顾名思义就是把项目编译成一个可执行的文件,可以方便我们拿到其他机器或者是部署到服务器上去运行,对于Java,就是打包成jar包,依赖JavaRuntime运行,或者是可以放到Tomcat运行的war包;对于go语言,是生成一个可执行的文件,一把梭执行就完事了;对于Python语言,不好意思,好像没有什么很好的方案,可以打包成wheel包,也可以pyinstaller打包exe,不过对于web应用的部署,一般还是用docker。
那么对于我们http://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 -p:PublishSingleFile=true -p:PublishTrimme
d=true运行一下,嗖! 再看看生成的文件,只有一个可执行文件和几个配置文件、web静态文件目录!(因为我用Debug版,所有有pdb调试文件)比刚才清爽多了!


我们再看看文件大小:


比刚才小了几十M!这下舒服了!
接下来介绍一下多的那两个参数,感觉不用介绍大家也猜到了~

  • -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
参考资料


  • https://www.cnblogs.com/toutou/p/supervisor.html
欢迎交流

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

使用道具 举报

2

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2023-3-24 19:56:07 | 显示全部楼层
你生成的文件真大,为啥不用vs自带的发布?supervisor最好放在conf.d目录下

supervision你写得真复杂,user可以去掉,commend不用再写一次路径
回复

使用道具 举报

2

主题

11

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2023-3-24 19:56:31 | 显示全部楼层
好的,感谢指正。为什么不用vs因为我大部分时间用Linux系统呀[捂嘴]
回复

使用道具 举报

2

主题

5

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2023-3-24 19:57:19 | 显示全部楼层
supervisor真的太爽
回复

使用道具 举报

2

主题

8

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2023-3-24 19:58:17 | 显示全部楼层
是呀哈哈,不过我还刚开始用,之前都是用docker
回复

使用道具 举报

3

主题

10

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2023-3-24 19:58:53 | 显示全部楼层
我用了很久了,一套代码n个站点,一次更新全部ok,比docker香太多
回复

使用道具 举报

3

主题

8

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2023-3-24 19:59:47 | 显示全部楼层
一套代码多个站点?有点不理解
回复

使用道具 举报

2

主题

8

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2023-3-24 20:00:19 | 显示全部楼层
supervisor是把程序读到内存里的,同一套代码可以读很多次,只要名称和端口不冲突。理论上一台服务器一套可以跑好几万个站点[酷][酷][酷]
回复

使用道具 举报

1

主题

6

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2023-3-24 20:00:49 | 显示全部楼层
优秀啊,学到了[赞]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表