在CentOS上部署Asp.netCore應用程序

作為一個Linux新手,許多人向我鼓吹說CentOS多么強大,于是我就開始把一個演示程序發(fā)布到CentOS,想試一下它到底有多強大。在此之前,我將同樣的程序已經成功發(fā)布到了Ubuntu,我覺得,既然已經有了前一次的成功經驗,不論CentOS還是Ubuntu都是Linux,道理應該差不多吧。但事實證明,還是有些差異的,某些在CentOS上頻出的問題在Ubuntu上卻沒有,所以我的感覺是Ubuntu部署Asp.net Core程序更容易些。

創(chuàng)新互聯(lián)主營王益網站建設的網絡公司,主營網站建設方案,成都App制作,王益h5小程序設計搭建,王益網站營銷推廣歡迎王益等地區(qū)企業(yè)咨詢

過程很不順利,但最終經過一天摸索已摸清個七八成,應用總算能運行了。

Asp.net Core應用需要反向代理配合才能運行,IIS、Apache和Nginx等Web服務軟件都可以作為它的反向代理。這里使用Nginx作為反向代理。

1.安裝.NET Core SDK。四個命令,依次執(zhí)行:

sudo yum install libunwind libicu

curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=847103

sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet

sudo ln -s /opt/dotnet/dotnet /usr/local/bin

2.安裝nginx。

yum install nginx

3.上傳應用程序。使用工具不限,在Windows上可以用MobaXterm,這個東西不錯,既能登錄系統(tǒng),也能傳送和下載文件,還可以可視化地瀏覽服務器上的目錄、打開文件進行編輯。

4. 配置nginx。打開/etc/nginx/nginx.conf,找到“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;

        }

此時,應用內部的Kestrel監(jiān)聽的端口是5000,而外部用戶訪問應用仍然使用80端口。 

注意找到“user XXX;”這句,"XXX"可以為任何字串,這個東西要記住,稍后把.net Core應用監(jiān)聽服務設置為系統(tǒng)服務時需要它。

5.經過第4步配置后,進入應用程序所在目錄,執(zhí)行 

dotnet app.dll(app.dll是asp.net core應用程序發(fā)布后生成的文件,需要用你自己的應用名稱替代app.dll)

一切安好的話,此時應用應該可以訪問了,打開瀏覽器去試一下。

到此為止,應用程序已經部署好了。但是,你發(fā)現(xiàn)了,有個命令窗口一直開著,它就是執(zhí)行dotnet xxxx.dll那個窗口,如果這個窗口關閉了,那么應用程序也隨即不能訪問了。作為完美型的程序猿,肯定不希望這個窗口總趴在屏幕上,這時就用到了系統(tǒng)服務,讓應用程序監(jiān)聽服務在系統(tǒng)啟動時自動啟動,省去了每次啟動都需要再次執(zhí)行dotnet命令去運行服務。

6.將應用程序的監(jiān)聽服務設置為系統(tǒng)服務。這一步中,許多介紹部署.net core應用的文章都使用一個叫“Supervisor”的東西,這個東西我不熟,當然,其實我對整個Linux就不熟,通過參考資料,我使用系統(tǒng)自帶的systemd(據說以前的版本沒有這個東西,我用的是CentOS 7)來制作守護進程。

在/etc/systemd/system/目錄下建一個服務文件xxxx.service(用自己的名稱替換xxxx),然后打開,寫入:

[Unit]
    Description=應用描述
    [Service]
    WorkingDirectory=/sites/test_app   #工作目錄,合理配置
    #執(zhí)行dotnet命令的地方,注意配置為自己機器上正確的dotnet所在路徑及程序所在路徑 
    ExecStart=/usr/local/bin/dotnet /sites/test_app/WebApp.dll  
    Restart=always
    RestartSec=10
    # 注意,這里User的值應該與第4步nginx.conf配置文件里user XXX的XXX相同。
    # 比如在nginx.conf中,有一句:user nginx;那么此處也為User的值就為nginx
    User=nginx
 
    Environment=ASPNETCORE_ENVIRONMENT=Production 
    [Install]
    WantedBy=multi-user.target

上面“#”號后面的是注釋,我加了些說明,實際使用時可以移除這些注釋。

在這步中遇到個問題,一開始,在“ExecStart ……“后面有個注釋,在執(zhí)行
    systemctl enable xxxx.service
時老是報錯。后來把注釋移除,并且把這句后面的空格刪除后就正常了。

7.將服務設置為開機自啟,這樣每當機器重啟就不需要再執(zhí)行dotnet命令來啟動應用程序監(jiān)聽了,那個礙眼的dotnet監(jiān)聽窗口也可以關閉了。

設置服務開機自啟:

systemctl enable xxxx.service

啟動服務:

systemctl start xxxx.service

查看服務狀態(tài):

systemctl status xxxx.service 

如果服務沒能正常啟動,這個命令可以顯示哪里出錯。如果有錯誤,修改錯誤。

 

到此,部署完成,應該能訪問應用了。

第二天,我想起了已經把監(jiān)聽服務設置成了系統(tǒng)服務,可以在重啟后不需要執(zhí)行dotnet命令,于是我就想測一測到底靠不靠譜,就把機器重啟了。結果瀏覽器給我回饋了個“Bad Gateway”,真是不靠譜啊,說好的Linux強大呢?

我用systemctl status檢查了服務,顯示運行中,不是服務沒啟動,說明系統(tǒng)服務還是靠譜的。那怎么不能訪問了呢?網上找了半天沒找到想要的答案,突然想到,是不是nginx這玩意掛了,因為在安裝、配置nginx時這貨就曾經癱過,使用nginx -s reload命令想重啟一下nginx,結果發(fā)現(xiàn)它提示nginx.pid文件出了問題。關于這個問題的解決辦法,我在《Nginx在CentOS中丟失nginx.pid文件的處理》中提到過。

 

在Ubuntu下部署與這個差不多,某些命令不一樣。參考:https://docs.microsoft.com/zh-cn/aspnet/core/publishing/linuxproduction。

分享文章:在CentOS上部署Asp.netCore應用程序
網頁鏈接:http://muchs.cn/article44/ghihhe.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供品牌網站設計、網站設計、手機網站建設、域名注冊、網站收錄網站策劃

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網站建設