浅谈我在.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 }
View Code

简单命令

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
View Code

介绍了上面这对黄金搭档,接下来介绍另一对黄金搭档

三.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
View Code

六.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.稳

posted @ 2018-11-01 18:22  提伯斯  阅读(2086)  评论(1编辑  收藏  举报