浅谈我在.net core一年里的收获
前言:以前一直在winserver的环境里从事web工作,安装一个sqlserver,iis,把项目部署上面就OK了,简单轻松
一.结缘nginx
以前一直听说nginx这个反向代理的web服务器,当玩nginx时才知道,iis为我们做了两件事
1.应用程序服务器(nfx),解析动态程序,例如aspx
2.反向代理,将解析后的资源或静态资源,代理出去
.net core使用iis做反向代理与用nginx有区别呢(只说手感,手感你懂的)
nginx 配置可简单,可灵活,可负载,可集群,可过滤,方便查阅日志.........更多牛逼的功能就没有用到了
简单配置(把本地7711端口代理到8852端口)
1 server { 2 listen 8852; 3 server_name localhost; 4 location / { 5 proxy_pass http://localhost:7711; 6 index /project1/toIndex; 7 } 8 }
简单命令
service nginx start
service nginx restart
service nginx stop
iis 没啥优点,工程使用iis跑出错后,我就统一改成控制台了,在linux上稳的一逼
二.supervisor
这是干嘛的呢,就是守护你的程序的
你可能在想,我程序好好的,要它守护个鸡毛
就你这臭脾气,也就只有winserve惯着你,当你服务器重启的时候,winserver的iis会自动启动站点,sqlserver的服务设置自动的,也会自动启动
linux可就不惯着你了,当服务器重启的时候,那你得手动一个个start你的服务
为了解决这个麻烦,supervisor闪亮登陆,只要在supervisor里配置你要守护的服务,服务器每次启动的时候,它都会去给你启动服务,并且记录了你服务控制台的日志,不光如此,它还提供了图形化管理界面,你可以手动启动关闭你的服务
每个服务新增一个配置文件
配置如下(看的懂配置,其它的服务都是照着copy,简单的很)
1 [program:Tibos.Api] 2 command=/bin/bash -c "dotnet Tibos.Api.dll" 3 directory=/home/wwwroot/NH.Core/Tibos.Api/PublishOutput/ 4 autorestart=true 5 stderr_logfile=/var/log/Tibos.Api.err.log 6 stdout_logfile=/var/log/Tibos.Api.out.log 7 environment=ASPNETCORE_ENVIRONMENT=Production 8 user=root 9 stopsignal=INT
介绍了上面这对黄金搭档,接下来介绍另一对黄金搭档
三.Ocelot
这是.net core里常用的一个APIGateway,园子里资料已经非常多了,功能简单的来说就是代理下游的服务,并暴露给消费者,里面集成了负载均衡,统一授权验证(IdentityServer4)....
给我的感觉就是啥优秀的框架都可以往里面集成
四.Consul
这是一个玩服务注册与服务发现的玩意,啥子意思呢
这就要从Ocelot做负载均衡来说起,我们来讲一个小故事,老王管理着三个工人,地主从老王这里拉工人去工地里干活
那么就存在几个问题
1.新人来了怎么办?
2.工人生病了怎么办?
这里老王就是Consul,新人来了,首先要到老王这里申请成为工人(服务注册),这里是工人主动申请的,可不是老王强迫的哦
这里地主就是Ocelot,老王会定期给工人检查健康(心跳包),并给它们安排职务,地主去老王那里拉人(服务发现),然后干活
当然这里还有一个情况,就工人偶尔抽风,这里可以使用Polly去处理,因为我还没有用过Polly这里就不做介绍
Consul也提供图形化界面,我这里是注册了三个服务,可以体验一下:http://193.112.104.103:9000/api/values
它会负载输出三个服务的值,如果我使用supervisor停止了某个服务,也不会影响成像的正常运行,轻松实现热更新
五.Docker
Docker牛逼,不要问我为啥子牛逼,就是牛逼,谁用谁知道
1.第一难题,解决萌新接触Linux装软件问题
什么.net core runtim,nginx,mysql......这一堆东西总要装的吧,装到哪去了呢,玩坏了怎么办?
在win上就遇到个问题,一个朋友装sqlserver,然后卸载了,然后再装sqlserver就死活装不上去,清理注册表也不行,没办法重装系统了.......
毕竟第一次玩linux,装软件肯定要去改配置什么的,经常不知道装到哪去了(好在都是默认位置,百度比较好找),怎么卸载....
Docker就很好的解决了这个问题,基本上流行的东西docker hub上都有,拉个镜像,创建个容器,在容器里随便玩,玩坏了,再创建个容器就好了
2.制作Docker镜像
哇,这个可就真牛逼了,把自己的项目做成一个Docker镜像,然后丢到Dockerhub(免费的镜像仓库)里,这样所有人都可以拉你的这个镜像了
我把.net core runtime(200多m) 跟自己的程序一起打包成一个镜像,这样别的服务器就不用安装.net core runtime了,开箱即用
大家可以拉取我的镜像玩玩(一个示例的webapi) docker pull wmowm/tibos:v1.0
Dockerhub大家也可以去注册一个账户玩玩(镜像257M,在仓库压缩后106M)
这里我玩docker的一些常用命令
1 docker images 2 docker ps 3 docker ps -a 4 docker rm [id] 5 docker logs --since 30m [id] 6 docker start [id] 7 docker stop [id] 8 docker exec -it [id] /bin/bash 9 docker inspect [id] 10 11 12 docker run --name mysq -p 3307:3306 -v /my/mysql/datadir:/var/lib/mysql -v /my/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 13 14 --Dockerfile 15 16 FROM microsoft/dotnet:2.1-aspnetcore-runtime 17 WORKDIR /app 18 COPY . . 19 EXPOSE 5101 20 ENTRYPOINT ["dotnet", "Docker.Test.dll"] 21 22 docker build -t testimage . 23 24 docker run --name=test -p 7711:5101 -d testimage 25 26 27 --打标签 28 docker tag [imageid] wmowm/tibos:v1.0 29 30 --推送 31 docker push wmowm/tibos:v1.0 32 33 --拉取 34 docker pull wmowm/tibos:v1.0
六.Jenkins
java写的一款持续集成软件,功能强大,对于我们.net core来说,也很方便,建议参考晓晨MM的博客,直接用docker安装,就是做多节点坑比较多,多折腾一下也能实现
说说.net core过程
1.文件夹方式打包,上传到github
2.点击构建,拉取github上的文件
3.拉取完成后,执行shell
如果一台服务器用xftp手动传就可以了,如果是多台服务器,配置好多节点,就非常方便了
我写的shell比较简单,拉取到文件后,把文件copy到指定位置,然后重启supervisorctl
七..netcore里的一些优秀框架
1.杨总的CAP,满星推荐,既可以做EvenBus又是分布式最终一致性的解决方案
2.Autofac,非常优秀的IOC容器
3.AutoMapper
4.NHibernate5.1,好吧,是我强行打了一波广告,我个人觉得还是非常不错的,推荐混合Dapper用,这样CAP也可以用上,喜欢的可以去看看https://github.com/wmowm/nh.core
5.signalr nfx里就用过了,非常不错
6.QuartzNet 任务调度
还有好多,这里就不一一列举了.......
八.Linux,给我一种错觉,只要你程序部署在Linux上面,就可以利用到Linux上的一切资源,大家就是一家人,也许这就是开源的魅力吧
1.没有广告
2.稳