日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
將ASP.NETCore應(yīng)用程序部署至生產(chǎn)環(huán)境中(CentOS7)

閱讀目錄

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了陽(yáng)東免費(fèi)建站歡迎大家使用!

  • 環(huán)境說(shuō)明
  • 準(zhǔn)備你的ASP.NET Core應(yīng)用程序
  • 安裝centos7
  • 安裝.NET Core SDK for CentOS7。
  • 部署ASP.NET Core應(yīng)用程序
  • 配置Nginx
  • 配置守護(hù)服務(wù)(Supervisor)

這段時(shí)間在使用Rabbit RPC重構(gòu)公司的一套系統(tǒng)(微信相關(guān)),而最近相關(guān)檢驗(yàn)(邏輯測(cè)試、壓力測(cè)試)已經(jīng)完成,接近部署至線上生產(chǎn)環(huán)境從而搗鼓了ASP.NET Core應(yīng)用程序在CentOS上的部署方案,今天就跟大家分享一下如何將ASP.NET Core應(yīng)用程序以生產(chǎn)的標(biāo)準(zhǔn)部署在CentOS上。

環(huán)境說(shuō)明

服務(wù)器系統(tǒng):CentOS 7.2.1511

相關(guān)工具:Xshel、Xftp

服務(wù)器軟件軟件:.netcore、nginx、supervisor、policycoreutils-Python

準(zhǔn)備你的ASP.NET Core應(yīng)用程序

首先將你的應(yīng)用程序以便攜的模式進(jìn)行發(fā)布。

ps:這邊我使用一個(gè)空的Web項(xiàng)目來(lái)進(jìn)行演示,因?yàn)楸酒饕榻B生產(chǎn)環(huán)境的部署,與應(yīng)用無(wú)關(guān)。

命令為:dotnet publish –c release

確保這份發(fā)布應(yīng)用可以在windows上運(yùn)行,以減少后續(xù)的問(wèn)題。

為什么不用自宿主的方式進(jìn)行部署?

自宿主的發(fā)布方式進(jìn)行部署會(huì)簡(jiǎn)單很多,為什么生產(chǎn)環(huán)境要使用便攜的方式進(jìn)行發(fā)布呢?

原因1:性能比便攜式的低(主)。

原因2:微軟給出的建議(次)。

口說(shuō)無(wú)憑,有圖有真相。

so,既然是用于生產(chǎn)環(huán)境的,當(dāng)然我們要追求更高的性能。

安裝CentOS7

安裝.NET Core SDK for CentOS7。

sudo yum install libunwind libicu(安裝libicu依賴)

curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=809131(下載sdk壓縮包)

sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet(解壓縮)

sudo ln -s /opt/dotnet/dotnet /usr/local/bin(創(chuàng)建鏈接)

輸入 dotnet –info 來(lái)查看是否安裝成功

如果可以執(zhí)行則表明.NET Core SDK安裝成功。

部署ASP.NET Core應(yīng)用程序

上傳之前發(fā)布的文件夾至/home/wwwroot/。

這邊我使用了Xftp進(jìn)行文件的上傳。

檢查是否能夠運(yùn)行

命令:dotnet /home/wwwroot/WebApplication1/WebApplication1.dll

如果出現(xiàn)這些信息則表示成功運(yùn)行。

這時(shí)候我們是無(wú)法訪問(wèn)到這個(gè)頁(yè)面的,這時(shí)候我們需要部署一個(gè)web容器來(lái)進(jìn)行轉(zhuǎn)發(fā)。

配置Nginx

安裝Nginx

curl -o  nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

rpm -ivh nginx.rpm

yum install nginx

安裝成功!

輸入:systemctl start nginx 來(lái)啟動(dòng)nginx。

輸入:systemctl enable nginx 來(lái)設(shè)置nginx的開機(jī)啟動(dòng)(linux宕機(jī)、重啟會(huì)自動(dòng)運(yùn)行nginx不需要連上去輸入命令)。

配置防火墻

命令:firewall-cmd --zone=public --add-port=80/tcp --permanent(開放80端口)

命令:systemctl restart firewalld(重啟防火墻以使配置即時(shí)生效)

測(cè)試nginx是否可以訪問(wèn)。

配置nginx對(duì)ASP.NET Core應(yīng)用的轉(zhuǎn)發(fā)

修改 /etc/nginx/conf.d/default.conf 文件。

將文件內(nèi)容替換為

server {
    listen 80;
    location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

上傳至CentOS進(jìn)行覆蓋。

執(zhí)行:nginx –s reload 使其即時(shí)生效

運(yùn)行ASP.NET Core應(yīng)用程序

命令:dotnet /home/wwwroot/WebApplication1/WebApplication1.dll

這時(shí)候再次嘗試訪問(wèn)。

想哭的心都有。。。經(jīng)過(guò)后續(xù)了解,這個(gè)問(wèn)題是由于SELinux保護(hù)機(jī)制所導(dǎo)致,我們需要將nginx添加至SELinux的白名單。

接下來(lái)我們通過(guò)一些命令解決這個(gè)問(wèn)題。。

yum install policycoreutils-python

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp

再次嘗試訪問(wèn)。

至此基本完成了部署。

配置守護(hù)服務(wù)(Supervisor)

目前存在三個(gè)問(wèn)題

問(wèn)題1:ASP.NET Core應(yīng)用程序運(yùn)行在shell之中,如果關(guān)閉shell則會(huì)發(fā)現(xiàn)ASP.NET Core應(yīng)用被關(guān)閉,從而導(dǎo)致應(yīng)用無(wú)法訪問(wèn),這種情況當(dāng)然是我們不想遇到的,而且生產(chǎn)環(huán)境對(duì)這種情況是零容忍的。

問(wèn)題2:如果ASP.NET Core進(jìn)程意外終止那么需要人為連進(jìn)shell進(jìn)行再次啟動(dòng),往往這種操作都不夠及時(shí)。

問(wèn)題3:如果服務(wù)器宕機(jī)或需要重啟我們則還是需要連入shell進(jìn)行啟動(dòng)。

為了解決這個(gè)問(wèn)題,我們需要有一個(gè)程序來(lái)監(jiān)聽ASP.NET Core 應(yīng)用程序的狀況。在應(yīng)用程序停止運(yùn)行的時(shí)候立即重新啟動(dòng)。這邊我們用到了Supervisor這個(gè)工具,Supervisor使用Python開發(fā)的。

安裝Supervisor

yum install python-setuptools

easy_install supervisor

配置Supervisor

mkdir /etc/supervisor

echo_supervisord_conf > /etc/supervisor/supervisord.conf

修改supervisord.conf文件,將文件尾部的配置

修改為

ps:如果服務(wù)已啟動(dòng),修改配置文件可用“supervisorctl reload”命令來(lái)使其生效

配置對(duì)ASP.NET Core應(yīng)用的守護(hù)

創(chuàng)建一個(gè) WebApplication1.conf文件,內(nèi)容大致如下

[program:WebApplication1]
command=dotnet WebApplication1.dll ; 運(yùn)行程序的命令
directory=/home/wwwroot/WebApplication1/ ; 命令執(zhí)行的目錄
autorestart=true ; 程序意外退出是否自動(dòng)重啟
stderr_logfile=/var/log/WebApplication1.err.log ; 錯(cuò)誤日志文件
stdout_logfile=/var/log/WebApplication1.out.log ; 輸出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 進(jìn)程環(huán)境變量
user=root ; 進(jìn)程執(zhí)行的用戶身份
stopsignal=INT

將文件拷貝至:“/etc/supervisor/conf.d/WebApplication1.conf”下

運(yùn)行supervisord,查看是否生效

supervisord -c /etc/supervisor/supervisord.conf

ps -ef | grep WebApplication1

如果存在dotnet WebApplication1.dll 進(jìn)程則代表運(yùn)行成功,這時(shí)候在使用瀏覽器進(jìn)行訪問(wèn)。

至此關(guān)于ASP.NET Core應(yīng)用程序的守護(hù)即配置完成。

配置Supervisor開機(jī)啟動(dòng)

新建一個(gè)“supervisord.service”文件

# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

將文件拷貝至:“/usr/lib/systemd/system/supervisord.service”

執(zhí)行命令:systemctl enable supervisord

執(zhí)行命令:systemctl is-enabled supervisord #來(lái)驗(yàn)證是否為開機(jī)啟動(dòng)

測(cè)試


名稱欄目:將ASP.NETCore應(yīng)用程序部署至生產(chǎn)環(huán)境中(CentOS7)
轉(zhuǎn)載注明:http://www.5511xx.com/article/cdhccji.html