本文主要介紹建築實例。Centos7系統下(xià)的. NET Core2.0 Nginx Supervisor環境,具有一(yī)定的參考價值。有興趣的朋(péng)友可以參考一(yī)下(xià)。希望你看完這(zhè)篇文章後收獲很大。讓微子(zǐ)網絡帶你去了(le)解一(yī)下(xià)。
一(yī)、Linux .NET Core簡介
一(yī)直以來(lái),微軟隻提供。NET對自己平台的支持,也(yě)就(jiù)是說(shuō)這(zhè)種“理(lǐ)論上(shàng)”的跨平台框架在Linux和macOS上(shàng)的支持隻能(néng)由第三方項目提供(比如(rú)Mono。NET)。
直到微軟推出了(le)完全開源。NET Core。該開源平台與兼容。NET标準,可以在Windows、Linux、MacOS上(shàng)提供完全一(yī)緻的API。雖然這(zhè)個(gè)緊湊。NET框架隻是标準的一(yī)個(gè)子(zǐ)集。NET,已經相當強大了(le)。
這(zhè)種緊湊的框架一(yī)方面允許一(yī)些(xiē)功能(néng)性的應用同時(shí)運行在三個(gè)平台上(shàng)(就(jiù)像一(yī)些(xiē)功能(néng)性的Python腳本一(yī)樣);另一(yī)方面,它還允許服務(wù)器(qì)操作(zuò)和維護人(rén)員(yuán)部署ASP。服務(wù)器(qì)(尤其是服務(wù)器(qì),它正在努力運行視(shì)窗服務(wù)器(qì))。
官網參考:https://www.microsoft.com/net/core#linuxcentos
二、Linux .NET Core2.0 環境部署前準備
1.環境描述:
服務(wù)器(qì)系統:CentOS 7.2.1511
2.安裝前的準備(關(guān)閉防火(huǒ)牆和selinux)
1)關(guān)閉防火(huǒ)牆:
Systemctlstopfirewalld。服務(wù)#停止防火(huǒ)牆
SystemCtldisableFirewalld。服務(wù)#禁止防火(huǒ)牆啓動
防火(huǒ)牆-cmd -狀态#檢查默認防火(huǒ)牆-cmd-狀态#(關(guān)閉後不運行,打開後運行)2)關(guān)閉selinux
Sed-I的/selinux=implementing/selinux=disabled/g '/etc/selinux/config按如(rú)下(xià)方式查看修改後的文件:
[root @ localhost ~]# cat/etc/selinux/config
#系統的狀态。
# SELINUX=cantakeoneof sethrevalues :
# enforcing-selinuxsecuritypolicyisensforced。
# permissive-selinuxprintswarningsinsteadfenforcing。
# disabled-加載了(le)NoSELinuxpolicyisloaded。
SELINUX=禁用
# SELINUXTYPE=cantackeoneof three two values 3360
# targeted-targeted processes reserved,
# minimum-modificationoftargeted policy . only selected processes reserved
# mls-多重安全保護。
SELINUXTYPE=targeted3)重新(xīn)啓動Centos
重啓三、Centos 部署.NET Core2.0 環境
1.添加DOTNET産品
安裝之前。NET core,需要注冊微軟産品feed。隻需要做一(yī)次。首先注冊微軟簽名密鑰,然後添加微軟産品提要。
rpm-importhttps://packages.microsoft.com/keys/microsoft.asc
sh-c ' echo-e '[packages-Microsoft-com-prod]nname=packages-Microsoft-com-prodnbasure rl=https://packages . Microsoft.com/yum repos/Microsoft-rhel 7.3-productable=1 gpg check=1 gpg key=https://packages . Microsoft.com/key/Microsoft . ASC '/etc/yum . repo . d/DotnetDev . repo ' 2。安裝。net core SDK
請删除任何以前的預覽版本。 NET。NET從您的系統中删除。
以下(xià)命令更新(xīn)要安裝的産品列表,安裝所需的組件。NET核心,然後安裝。NET核心SDK。
升級
yuminstallli
bunwindlibicu-y yuminstalldotnet-sdk-2.0.0-y3.檢查dotnet是否安裝成功與版本查看
dotnet--info dotnet--version
四、測試.NET Core2.0 環境
1.在home目錄下(xià)初始化(huà)一(yī)個(gè)測試環境并輸出”Hello World “内容 (測試方式一(yī),可忽略)
cd/home dotnetnewconsole-ohwapp cdhwapp dotnetrun
輸出空内容如(rú)下(xià):
[root@localhosthwapp]#dotnetrun HelloWorld!
2.上(shàng)傳.net core的實例頁面進行測試 (測試方式二、推薦)
Centos 下(xià).net core 2 環境測試用例 (把它上(shàng)傳到/home目錄下(xià)或自定義的目錄)
下(xià)載地址:
http://down.51cto.com/data/2334968
執行以下(xià)命令
cd/home/WebApplication1 dotnetrestore//如(rú)果使過用測試方式一(yī),就(jiù)需先執行這(zhè)命令重新(xīn)加載一(yī)下(xià)當前新(xīn)的網站(zhàn)文件 dotnetrun
運行後如(rú)下(xià)圖:
通過IE訪問測試頁
五、安裝配置nginx對ASP.NET Core應用的轉發
1.安裝Nginx環境
[root@localhost~]#curl-onginx.rpmhttp://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm [root@localhost~]#rpm-ivhnginx.rpm [root@localhost~]#yuminstallnginx-y
輸入:systemctl start nginx 來(lái)啓動nginx。
[root@localhost~]#systemctlstartnginx
輸入:systemctl enable nginx 來(lái)設置nginx的開機啓動(linux宕機、重啓會自動運行nginx不需要連上(shàng)去輸入命令)
[root@localhost~]#systemctlenablenginx Createdsymlinkfrom/etc/systemd/system/multi-user.target.wants/nginx.serviceto/usr/lib/systemd/system/nginx.service.
2.通過iE檢查能(néng)否訪問
[root@localhostnginx-1.8.1]#ps-ef|grepnginx root146261008:47?00:00:00nginx:masterprocessnginx nginx1462714626008:47?00:00:00nginx:workerprocess root146363269008:49pts/100:00:00grep--color=autonginx
nginx常用的操作(zuò)命令
systemctl start nginx.service #啓動nginx服務(wù)
systemctl enable nginx.service #設置開機自啓動
systemctl disable nginx.service #停止開機自啓動
systemctl status nginx.service #查看服務(wù)當前狀态
systemctl restart nginx.service #重新(xīn)啓動服務(wù)
systemctl list-units –type=service #查看所有已啓動的服務(wù)
4.防火(huǒ)牆配置(如(rú)果系統有防火(huǒ)牆就(jiù)需要進行寫入規則)
命令:firewall-cmd –zone=public –add-port=80/tcp –permanent(開放(fàng)80端口)
命令:systemctl restart firewalld(重啓防火(huǒ)牆以使配置即時(shí)生(shēng)效)
5.配置nginx對ASP.NET Core應用的轉發
修改 /etc/nginx/conf.d/default.conf 文件。
将文件内容替換為(wèi)
server{ listen80; location/{ proxy_passhttp://localhost:88; proxy_http_version1.1; proxy_set_headerUpgrade$http_upgrade; proxy_set_headerConnectionkeep-alive; proxy_set_headerHost$host; proxy_cache_bypass$http_upgrade; } }
重新(xīn)加載nignx
[root@localhostnginx]#nginx-sreload
nginx的配置己完成
6.開啓dotnet run進行測試
[root@localhost~]#cd/home/WebApplication1/ [root@localhostWebApplication1]#dotnetrun Usinglaunchsettingsfrom/home/WebApplication1/Properties/launchSettings.json... Hostingenvironment:Development Contentrootpath:/home/WebApplication1 Nowlisteningon:http://[::]:88 Applicationstarted.PressCtrl+Ctoshutdown.
通過IP 80端口訪問
六、配置守護服務(wù)(Supervisor)
目前存在三個(gè)問題
問題1:ASP.NET Core應用程序運行在shell之中,如(rú)果關(guān)閉shell則會發現(xiàn)ASP.NET Core應用被關(guān)閉,從而導緻應用無法訪問,這(zhè)種情況當然是我們不想遇到的,而且生(shēng)産環境對這(zhè)種情況是零容忍的。
問題2:如(rú)果ASP.NET Core進程意外終止那麽需要人(rén)為(wèi)連進shell進行再次啓動,往往這(zhè)種操作(zuò)都不夠及時(shí)。
問題3:如(rú)果服務(wù)器(qì)宕機或需要重啓我們則還是需要連入shell進行啓動。
為(wèi)了(le)解決這(zhè)個(gè)問題,我們需要有一(yī)個(gè)程序來(lái)監聽(tīng)ASP.NET Core 應用程序的狀況。在應用程序停止運行的時(shí)候立即重新(xīn)啓動。這(zhè)邊我們用到了(le)Supervisor這(zhè)個(gè)工具,Supervisor使用Python開發的。
1.安裝Supervisor
[root@localhost/]#yuminstallpython-setuptools-y [root@localhost/]#easy_installsupervisor
2.配置Supervisor
[root@localhost/]#mkdir/etc/supervisor [root@localhost/]#echo_supervisord_conf>/etc/supervisor/supervisord.conf
修改supervisord.conf文件,将文件尾部的配置
[root@localhost/]#vi/etc/supervisor/supervisord.conf
将裏面的最後兩行:
;[include] ;files=relative/directory/*.ini
改為(wèi)
[include] files=conf.d/*.conf
ps:如(rú)果服務(wù)已啓動,修改配置文件可用“supervisorctl reload”命令來(lái)使其生(shēng)效
3.配置對ASP.NET Core應用的守護
創建一(yī)個(gè) WebApplication1.conf文件,内容大緻如(rú)下(xià)
[root@localhost/]#viWebApplication1.conf [program:WebApplication1] command=dotnetWebApplication1.dll;運行程序的命令 directory=/home/WebApplication1/;命令執行的目錄 autorestart=true;程序意外退出是否自動重啓 stderr_logfile=/var/log/WebApplication1.err.log;錯誤日志文件 stdout_logfile=/var/log/WebApplication1.out.log;輸出日志文件 environment=ASPNETCORE_ENVIRONMENT=Production;進程環境變量 user=root;進程執行的用戶身(shēn)份 stopsignal=INT
将文件拷貝至:“/etc/supervisor/conf.d/WebApplication1.conf”下(xià)
[root@localhost/]#mkdir/etc/supervisor/conf.d [root@localhost/]#cpWebApplication1.conf/etc/supervisor/conf.d/
運行supervisord,查看是否生(shēng)效
[root@localhost/]#supervisord-c/etc/supervisor/supervisord.confsupervisord-c/etc/supervisor/supervisord.conf [root@localhost/]#ps-ef|grepWebApplication1 root2987829685009:57?00:00:00dotnetWebApplication1.dll root2989229363009:57pts/300:00:00grep--color=autoWebApplication1
如(rú)果存在dotnet WebApplication1.dll 進程則代表運行成功,這(zhè)時(shí)候在使用浏覽器(qì)進行訪問。
至此關(guān)于ASP.NET Core應用程序的守護即配置完成。
Supervisor守護進程常用操作(zuò)
【啓動supervisord】
确保配置無誤後可以在每台主機上(shàng)使用下(xià)面的命令啓動supervisor的服務(wù)器(qì)端supervisord
supervisord
【停止supervisord】
supervisorctl shutdown
【重新(xīn)加載配置文件】
supervisorctl reload
七 、配置Supervisor開機啓動
新(xīn)建一(yī)個(gè)“supervisord.service”文件
[root@localhost/]#visupervisord.service #dserviceforsystemd(CentOS7.0+) #byET-CS(https://github.com/ET-CS) [Unit] Description=Supervisordaemon [Service] Type=forking ExecStart=/usr/bin/supervisord-c/etc/supervisor/supervisord.conf ExecStop=/usr/bin/supervisorctlshutdown ExecReload=/usr/bin/supervisorctlreload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
将文件拷貝至:“/usr/lib/systemd/system/supervisord.service”
[root@localhost/]#cpsupervisord.service/usr/lib/systemd/system/
執行命令:systemctl enable supervisord
[root@localhost/]#systemctlenablesupervisord Createdsymlinkfrom/etc/systemd/system/multi-user.target.wants/supervisord.serviceto/usr/lib/systemd/system/supervisord.service.
執行命令:systemctl is-enabled supervisord #來(lái)驗證是否為(wèi)開機啓動
[root@localhost/]#systemctlis-enabledsupervisord
重啓系統看能(néng)否能(néng)成功訪問
[root@localhost/]#reboot
感謝你能(néng)夠認真閱讀完這(zhè)篇文章,希望小編分(fēn)享的“Centos7系統下(xià)搭建.NET Core2.0+Nginx+Supervisor環境的示例”這(zhè)篇文章對大家有幫助,同時(shí)也(yě)希望大家多多支持億速雲,關(guān)注億速雲行業資訊頻道,更多相關(guān)知識等着你來(lái)學習!
Copyright © 2013-2016 WWW.VZIDC.COM . All Rights Reserved. 微子(zǐ)網絡 版權所有 江蘇微子(zǐ)網絡科技有限公司