<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      .NET Core部署到linux(CentOS)最全解決方案,進(jìn)階篇(Supervisor+Nginx)

      .NET Core部署到linux(CentOS)最全解決方案,常規(guī)篇一文,我們?cè)敿?xì)講解了傳統(tǒng)的.NET Core部署到Linux服務(wù)器的方法,學(xué)到了Linux在虛擬機(jī)下的安裝、Xshell,Xftp的使用方法、git在linux下的交互使用以及.net core在linux下的發(fā)布與運(yùn)行全過(guò)程。本文講講解通過(guò)使用Supervisor+Nginx的組合來(lái)實(shí)現(xiàn).net core的高效部署。

      1、Supervisor

      1.1、Supervisor介紹

      官網(wǎng):http://supervisord.org,源碼位置:https://github.com/Supervisor/supervisor

      Supervisor是用Python開(kāi)發(fā)的一套通用的進(jìn)程管理程序,能將一個(gè)普通的命令行進(jìn)程變?yōu)楹笈_(tái)daemon,并監(jiān)控進(jìn)程狀態(tài),異常退出時(shí)能自動(dòng)重啟。

      它是通過(guò)fork/exec的方式把這些被管理的進(jìn)程當(dāng)作supervisor的子進(jìn)程來(lái)啟動(dòng),這樣只要在supervisor的配置文件中,把要管理的進(jìn)程的可執(zhí)行文件的路徑寫(xiě)進(jìn)去即可。也實(shí)現(xiàn)當(dāng)子進(jìn)程掛掉的時(shí)候,父進(jìn)程可以準(zhǔn)確獲取子進(jìn)程掛掉的信息的,可以選擇是否自己?jiǎn)?dòng)和報(bào)警。supervisor還提供了一個(gè)功能,可以為supervisord或者每個(gè)子進(jìn)程,設(shè)置一個(gè)非root的user,這個(gè)user就可以管理它對(duì)應(yīng)的進(jìn)程。

      1.2、為什么要用Supervisor

      在linux或者unix操作系統(tǒng)中,守護(hù)進(jìn)程(Daemon)是一種運(yùn)行在后臺(tái)的特殊進(jìn)程,它獨(dú)立于控制終端并且周期性的執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。由于在linux中,每個(gè)系統(tǒng)與用戶(hù)進(jìn)行交流的界面稱(chēng)為終端,每一個(gè)從此終端開(kāi)始運(yùn)行的進(jìn)程都會(huì)依附于這個(gè)終端,這個(gè)終端被稱(chēng)為這些進(jìn)程的控制終端,當(dāng)控制終端被關(guān)閉的時(shí)候,相應(yīng)的進(jìn)程都會(huì)自動(dòng)關(guān)閉。但是守護(hù)進(jìn)程卻能突破這種限制,它脫離于終端并且在后臺(tái)運(yùn)行,并且它脫離終端的目的是為了避免進(jìn)程在運(yùn)行的過(guò)程中的信息在任何終端中顯示并且進(jìn)程也不會(huì)被任何終端所產(chǎn)生的終端信息所打斷。它從被執(zhí)行的時(shí)候開(kāi)始運(yùn)轉(zhuǎn),直到整個(gè)系統(tǒng)關(guān)閉才退出。

      此處的創(chuàng)建守護(hù)進(jìn)程,是指發(fā)布在Linux上 asp.net core 程序的dotnet xxx.dll命令的宿主進(jìn)程創(chuàng)建一個(gè)守護(hù)進(jìn)程。在 Linux 上有很多可以管理進(jìn)程的工具,我們使用 Supervisor 來(lái)做這個(gè)事情。

      原因有兩點(diǎn):

      ①、它是微軟官方文檔推薦的,降低學(xué)習(xí)成本。
      ②、它并不一定是最好的,但一定是文檔最全的。

      1.3、Supervisor4大組件

      • supervisord

      主進(jìn)程,負(fù)責(zé)管理進(jìn)程的server,它會(huì)根據(jù)配置文件創(chuàng)建指定數(shù)量的應(yīng)用程序的子進(jìn)程,管理子進(jìn)程的整個(gè)生命周期,對(duì)crash的進(jìn)程重啟,對(duì)進(jìn)程變化發(fā)送事件通知等。同時(shí)內(nèi)置web server和XML-RPC Interface,輕松實(shí)現(xiàn)進(jìn)程管理。。該服務(wù)的配置文件在/etc/supervisor/supervisord.conf。

      • supervisorctl

      客戶(hù)端的命令行工具,提供一個(gè)類(lèi)似shell的操作接口,通過(guò)它你可以連接到不同的supervisord進(jìn)程上來(lái)管理它們各自的子程序,命令通過(guò)UNIX socket或者TCP來(lái)和服務(wù)通訊。用戶(hù)通過(guò)命令行發(fā)送消息給supervisord,可以查看進(jìn)程狀態(tài),加載配置文件,啟停進(jìn)程,查看進(jìn)程標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出,遠(yuǎn)程操作等。服務(wù)端也可以要求客戶(hù)端提供身份驗(yàn)證之后才能進(jìn)行操作。

      • Web Server

      superviosr提供了web server功能,可通過(guò)web控制進(jìn)程(需要設(shè)置[inethttpserver]配置項(xiàng))

      • XML-R- #supervisor

      一個(gè)Linux/Unix系統(tǒng)上的進(jìn)程監(jiān)控工具
      一個(gè)Python開(kāi)發(fā)的通用的進(jìn)程管理程序
      可以管理和監(jiān)控Linux上面的進(jìn)程
      能將一個(gè)普通的命令行進(jìn)程變?yōu)楹笈_(tái)daemon,并監(jiān)控進(jìn)程狀態(tài),異常退出時(shí)能自動(dòng)重啟
      不過(guò)同daemontools一樣,它不能監(jiān)控daemon進(jìn)程

      1.4、安裝Supervisor

      相應(yīng)安裝建議以管理員方式登錄系統(tǒng),非管理員請(qǐng)以sudo命令安裝。

      Linux sudo命令以系統(tǒng)管理者的身份執(zhí)行指令,也就是說(shuō),經(jīng)由 sudo 所執(zhí)行的指令就好像是 root 親自執(zhí)行。

      1、安裝EPEL源的命令如下:

      sudo yum -y install epel-release
      

      安裝EPEL源

      2、執(zhí)行如下命令安裝supervisor:

      sudo yum -y install supervisor
      

      3、設(shè)置開(kāi)機(jī)啟動(dòng):

      systemctl enable supervisord
      

      4、啟動(dòng)supervisord

      systemctl start supervisord
      

      5、查看supervisord狀態(tài)

      systemctl status supervisord
      

      1.5、Supervisor配置及使用

      通過(guò)vi命令或者xftp修改配置文件開(kāi)啟web界面訪(fǎng)問(wèn),如下圖所示,分別取消inet_http_server等四個(gè)配置的注釋?zhuān)?/p>

      vi /etc/supervisord.conf
      

      執(zhí)行如下命令,重新加載配置文件:

      supervisorctl reload
      

      然后在瀏覽器打開(kāi)http://你的ip:9001,輸入上面我們?cè)O(shè)置的用戶(hù)名:user1,密碼:123456后,如圖所示:


      看到上圖這個(gè)界面,就表示supervisor安裝完成了。

      切換到/etc/supervisord.d目錄,在此目錄創(chuàng)建名稱(chēng)為:core50test.ini的ini文件,內(nèi)容如下:

      #表示程序名稱(chēng),用于在supervisor中顯示,無(wú)特殊意義。
      [program:core50test] 
      # 輸入執(zhí)行命令,這里表示執(zhí)行的是dotnet Core50Test.dll
      command=/bin/bash -c "dotnet Core50Test.dll"
      # 應(yīng)用程序根目錄 
      directory=/root/app_data/core50test/publish
      # 是否自動(dòng)啟動(dòng),當(dāng) supervisor 加載該配置文件的時(shí)候立即啟動(dòng)它 
      autostart=true
      # 是否自動(dòng)重啟, 程序異常退出后自動(dòng)重啟
      autorestart=true
      # 該配置文件輸出單個(gè)日志文件的大小,默認(rèn)50M
      logfile_maxbytes=50MB
      # 日志備份個(gè)數(shù) 
      logfile_backups=10
      # 記錄日志級(jí)別 
      loglevel=info
      # 指定標(biāo)準(zhǔn)輸出日志文件 
      stdout_logfile=/root/app_data/data/logs/core50test/core50test.out.log
      # 環(huán)境變量
      environment=ASPNETCORE_ENVIRONMENT=Production
      # 啟動(dòng)服務(wù)的用戶(hù)
      user=root
      # 把stderr重定向到stdout,默認(rèn) false
      redirect_stderr=true
      

      上述代碼包含了注釋信息,參考精減版配置如下:

      [program:core50test]
      command=/bin/bash -c "dotnet Core50Test.dll"
      directory=/root/app_data/core50test/publish
      autostart=true
      autorestart=true
      logfile_maxbytes=50MB
      logfile_backups=10
      loglevel=info
      stdout_logfile=/root/app_data/data/logs/core50test/core50test.out.log
      environment=ASPNETCORE_ENVIRONMENT=Production
      user=root
      redirect_stderr=true
      

      注意:stdout_logfile指向的文件夾一定要先創(chuàng)建,否則無(wú)法啟動(dòng),上述配置文件中的內(nèi)容需要根據(jù)用戶(hù)實(shí)際情況修改,如我當(dāng)前登錄的用戶(hù)是:yonghu,你們是其他的就做相應(yīng)的修改即可。

      然后執(zhí)行如下命令來(lái)重新加載配置:

      supervisorctl reload
      

      命令執(zhí)行成功后, 刷新瀏覽器,可以看到如下界面:

      supervisor正在運(yùn)行的應(yīng)用

      當(dāng)界面顯示running時(shí),則表示我們我們剛剛配置的.net core應(yīng)用運(yùn)行起來(lái)了。

      如下圖所示。

      我們可以方便的通過(guò)supervisor提供的web管理界面對(duì)我們的應(yīng)用進(jìn)行啟動(dòng)與停止,查看日志等操作,非常的方便,絲般潤(rùn)滑般的爽呀。

      Supervisor啟動(dòng)與停止應(yīng)用

      查看日志:

      1.6、Supervisor常用命令

      ### 查看supervisorctl支持的命令
      # supervisorctl help    
      default commands (type help <topic>):
      =====================================
      add    exit      open  reload  restart   start   tail   
      avail  fg        pid   remove  shutdown  status  update 
      clear  maintail  quit  reread  signal    stop    version
      
      ### 查看當(dāng)前運(yùn)行的進(jìn)程列表
      # supervisorctl status
      

      • update 更新新的配置到supervisord(不會(huì)重啟原來(lái)已運(yùn)行的程序)

      • reload,載入所有配置文件,并按新的配置啟動(dòng)、管理所有進(jìn)程(會(huì)重啟原來(lái)已運(yùn)行的程序)

      • start xxx: 啟動(dòng)某個(gè)進(jìn)程

      • restart xxx: 重啟某個(gè)進(jìn)程

      • stop xxx: 停止某一個(gè)進(jìn)程(xxx),xxx為[program:theprogramname]里配置的值

      • stop groupworker: 重啟所有屬于名為groupworker這個(gè)分組的進(jìn)程(start,restart同理)

      • stop all,停止全部進(jìn)程,注:start、restart、stop都不會(huì)載入最新的配置文

      • reread,當(dāng)一個(gè)服務(wù)由自動(dòng)啟動(dòng)修改為手動(dòng)啟動(dòng)時(shí)執(zhí)行一下就ok

      最常用的幾個(gè)命令為:

      #啟動(dòng)所有
      supervisorctl start all
      
      # 重啟所有
      supervisorctl restart all
      
      # 停止所有
      supervisorctl stop all
      
      #PS:要操作某個(gè)服務(wù),把a(bǔ)ll換成服務(wù)名即可
      #查看服務(wù)狀態(tài)
      supervisorctl status
      

      2、使用Nginx

      在前面文章中,我們已經(jīng)可以非常方便的對(duì)web應(yīng)用進(jìn)行部署與管理了,但還存在一個(gè)問(wèn)題,我們的應(yīng)用程序默認(rèn)是綁定的5000端口,如果要指定80端口或者配置域名該怎么處理呢?下面就該nginx登場(chǎng)了。

      2.1、Nginx介紹

      Nginx是一款輕量級(jí)的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,在BSD-like 協(xié)議下發(fā)行。其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力在同類(lèi)型的網(wǎng)頁(yè)服務(wù)器中表現(xiàn)較好,中國(guó)大陸使用nginx網(wǎng)站用戶(hù)有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。

      2.2、Nginx安裝

      安裝方式參考:http://nginx.org/en/linux_packages.html#RHEL-CentOS

      安裝先決條件:

       sudo yum install -y yum-utils
      

      設(shè)置yum存儲(chǔ)庫(kù),先創(chuàng)建一下內(nèi)容的文件:/etc/yum.repos.d/nginx.repo

      [nginx-stable]
      name=nginx stable repo
      baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
      gpgcheck=1
      enabled=1
      gpgkey=https://nginx.org/keys/nginx_signing.key
      module_hotfixes=true
      
      [nginx-mainline]
      name=nginx mainline repo
      baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
      gpgcheck=1
      enabled=0
      gpgkey=https://nginx.org/keys/nginx_signing.key
      module_hotfixes=true
      

      默認(rèn)情況下,使用穩(wěn)定 nginx 包的存儲(chǔ)庫(kù)。如果要使用主線(xiàn) nginx 包,請(qǐng)運(yùn)行以下命令:

       yum-config-manager --enable nginx-mainline
      

      運(yùn)行如下命令安裝nginx:

       sudo yum install -y nginx
      

      設(shè)置開(kāi)機(jī)啟動(dòng):

      systemctl enable nginx
      

      啟動(dòng)nginx:

       systemctl start nginx
      

      此時(shí),就可以在瀏覽器通過(guò)ip訪(fǎng)問(wèn)了:http://你的ip,界面如下:

      2.3、Nginx部署

      nginx安裝完成后,切換到/etc/nginx/conf.d目錄,修改default.conf文件內(nèi)容,如下所示:

      server {
          listen       80;
          server_name  localhost;
          location / {
              proxy_pass http://0.0.0.0:5000;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
      }
      

      保存后,執(zhí)行如下命令,重新加載配置:

      nginx -s reload
      

      然后再次訪(fǎng)問(wèn)http://你的ip,一切正常的話(huà)應(yīng)該可以看到如下的界面,表示我們的.NET Core程序已經(jīng)完美運(yùn)行在linux系統(tǒng)了。

      如果部署后遇到類(lèi)型下面這樣的錯(cuò)誤

      出現(xiàn)這樣的問(wèn)題,有可能的是因?yàn)镾eLinux的限制,執(zhí)行如下命令之后,再刷新頁(yè)面:

      setenforce 0     
      

      selinux(security enhanced linux)安全增強(qiáng)型linux系統(tǒng),它是一個(gè)linux內(nèi)核模塊,也是linux的一個(gè)安全子系統(tǒng)。

      selinux的主要作用就是最大限度地減小系統(tǒng)中服務(wù)進(jìn)程可訪(fǎng)問(wèn)的資源(最小權(quán)限原則)

      如果設(shè)置后還是不能解決,可以查看nginx的日志了,默認(rèn)的日志路徑為:/var/log/nginx

      通過(guò)setenforce 0命令,只是臨時(shí)實(shí)效,重啟后會(huì)失效。

      可以通過(guò)修改/etc/selinux/config 文件,將SELINUX=enforcing改為SELINUX=disabled,然后重啟,即可永久生效。

      通過(guò)近兩篇文章的介紹,我們需要更新應(yīng)用,只需要將代碼提交到git倉(cāng)庫(kù),然后在服務(wù)器中執(zhí)行g(shù)it pull和dotnet publish即可。

      如果熟悉shell的話(huà),可以通過(guò)編寫(xiě)shell命令一鍵執(zhí)行應(yīng)用程序的更新,代碼示例:

      # !/bin/bash
      cd /root/app_data/source/core50test
      git pull
      dotnet publish -o /root/app_data/core50test/publish
      supervisorctl restart core50test
      

      將上述的代碼保存為sh文件,上傳到服務(wù)器,并設(shè)置權(quán)限。如下圖所示:

      代碼提交到git倉(cāng)庫(kù)后,執(zhí)行如下命令:

      ./build.sh
      

      執(zhí)行結(jié)果如下圖所示:

      更新后重新運(yùn)行,已經(jīng)更新。

      這兒可能有的小伙伴會(huì)遇到一個(gè)小小的坑要注意,shell腳本寫(xiě)得沒(méi)有問(wèn)題,執(zhí)行會(huì)報(bào)類(lèi)似這樣的錯(cuò)誤

      $'\r':command not found
      

      出現(xiàn)這種問(wèn)題是因?yàn)閣indows下的文件換行用的是\r\n,而linux系統(tǒng)用的是\n,如果在win下的文檔上傳到linux,就有可能出現(xiàn)這樣的問(wèn)題,只需用vi打開(kāi)shell腳本文件,然后使用命令:set ff=unix,保存文件即可。

      supervisor一個(gè)作為守護(hù)線(xiàn)程,用于維護(hù)應(yīng)用程序的生命周期的,nginx則是作為反向代理使用,配置shell可以做到高效部署,非常的方便。


      一路走來(lái)數(shù)個(gè)年頭,感謝RDIFramework.NET框架的支持者與使用者,大家可以通過(guò)下面的地址了解詳情。

      RDIFramework.NET官方網(wǎng)站:http://www.rdiframework.net/

      RDIFramework.NET官方博客:http://blog.rdiframework.net/

      特別說(shuō)明,框架相關(guān)的技術(shù)文章請(qǐng)以官方網(wǎng)站為準(zhǔn),歡迎大家收藏!

      RDIFramework.NET框架由海南國(guó)思軟件科技有限公司專(zhuān)業(yè)團(tuán)隊(duì)長(zhǎng)期打造、一直在更新、一直在升級(jí),請(qǐng)放心使用!

      歡迎關(guān)注RDIFramework.NET框架官方微信公眾號(hào)(微信號(hào):guosisoft),及時(shí)了解最新動(dòng)態(tài)。

      使用微信掃描二維碼立即關(guān)注

      微信號(hào):**guosisoft**

      posted @ 2021-01-21 11:31  .NET快速開(kāi)發(fā)框架  閱讀(2385)  評(píng)論(6)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产精品一国产精品亚洲| 亚洲色拍拍噜噜噜最新网站| 国产无人区码一区二区| 成在线人视频免费视频| 性虎精品无码AV导航| 凌云县| 国产精品一线天在线播放| 国产精品成人午夜福利| 女人被狂躁c到高潮喷水一区二区 女高中生自慰污污网站 | 强开少妇嫩苞又嫩又紧九色| 国产成人无码aa精品一区| 亚洲免费一区二区av| 奇米四色7777中文字幕 | 综合亚洲网| 深夜福利成人免费在线观看| 亚洲精品有码在线观看| 国产成人午夜在线视频极速观看 | 久久精品一区二区东京热 | 九九热在线视频免费播放| 国产成人a在线观看视频| 欧美人与动牲交a免费| 九九热在线精品视频首页| 欧美成人www免费全部网站| 亚洲成av人片不卡无码手机版| 国产gaysexchina男外卖| 亚洲中文无码永久免费| 亚洲丰满熟女一区二区蜜桃| 人妻丝袜无码专区视频网站| 五级黄高潮片90分钟视频| 成人精品动漫一区二区| 波多野结衣的av一区二区三区| 东京一本一道一二三区| 亚洲毛片多多影院| 欧美牲交A欧美在线| 在线涩涩免费观看国产精品| 风流老熟女一区二区三区| 亚洲欧洲∨国产一区二区三区| 五月国产综合视频在线观看| 亚洲伊人精品久视频国产| 国产-第1页-浮力影院| 精品人妻中文无码av在线|