前言:之前一直在winserver的環境裏從事web工做,安裝一個sqlserver,iis,把項目部署上面就OK了,簡單輕鬆
一.結緣nginx
之前一直據說nginx這個反向代理的web服務器,當玩nginx時才知道,iis爲咱們作了兩件事
1.應用程序服務器(nfx),解析動態程序,例如aspx
2.反向代理,將解析後的資源或靜態資源,代理出去
.net core使用iis作反向代理與用nginx有區別呢(只說手感,手感你懂的)
nginx 配置可簡單,可靈活,可負載,可集羣,可過濾,方便查閱日誌.........更多牛逼的功能就沒有用到了java
簡單配置(把本地7711端口代理到8852端口)mysql
1 server { 2 listen 8852; 3 server_name localhost; 4 location / { 5 proxy_pass http://localhost:7711; 6 index /project1/toIndex; 7 } 8 }
簡單命令linux
service nginx start
service nginx restart
service nginx stopnginx
iis 沒啥優勢,工程使用iis跑出錯後,我就統一改爲控制檯了,在linux上穩的一逼git
二.supervisor
這是幹嗎的呢,就是守護你的程序的
你可能在想,我程序好好的,要它守護個雞毛
就你這臭脾氣,也就只有winserve慣着你,當你服務器重啓的時候,winserver的iis會自動啓動站點,sqlserver的服務設置自動的,也會自動啓動
linux可就不慣着你了,當服務器重啓的時候,那你得手動一個個start你的服務
爲了解決這個麻煩,supervisor閃亮登錄,只要在supervisor裏配置你要守護的服務,服務器每次啓動的時候,它都會去給你啓動服務,而且記錄了你服務控制檯的日誌,不光如此,它還提供了圖形化管理界面,你能夠手動啓動關閉你的服務github
每一個服務新增一個配置文件web
配置以下(看的懂配置,其它的服務都是照着copy,簡單的很)sql
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
介紹了上面這對黃金搭檔,接下來介紹另外一對黃金搭檔docker
三.Ocelot
這是.net core裏經常使用的一個APIGateway,園子裏資料已經很是多了,功能簡單的來講就是代理下游的服務,並暴露給消費者,裏面集成了負載均衡,統一受權驗證(IdentityServer4)....
給個人感受就是啥優秀的框架均可以往裏面集成shell
四.Consol
這是一個玩服務註冊與服務發現的玩意,啥子意思呢
這就要從Ocelot作負載均衡來講起,咱們來說一個小故事,老王管理着三個工人,地主從老王這裏拉工人去工地裏幹活
那麼就存在幾個問題
1.新人來了怎麼辦?
2.工人生病了怎麼辦?
這裏老王就是Consol,新人來了,首先要到老王這裏申請成爲工人(服務註冊),這裏是工人主動申請的,可不是老王強迫的哦
這裏地主就是Ocelot,老王會按期給工人檢查健康(心跳包),並給它們安排職務,地主去老王那裏拉人(服務發現),而後幹活
固然這裏還有一個狀況,就工人偶爾抽風,這裏可使用Polly去處理,由於我尚未用過Polly這裏就不作介紹
Consol也提供圖形化界面,我這裏是註冊了三個服務,能夠體驗一下: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.穩