首頁 > 軟體

部署ASP.NET Core程式到Linux系統

2022-03-20 22:00:22

一、前言

這篇文章我們將講解如何將ASP.NET Core 程式部署到Linux。這裡我們使用的是虛擬機器器裡面安裝的Centos7。這裡的ASP.NET Core程式,以上篇文章中釋出的框架依賴檔案為例進行講解。

二、安裝執行時環境

1、線上安裝

我們只是在Linux系統上面部署應用程式,所以只需要安裝ASP.NET Core Runtime即可。在安裝.NET之前,我們需要先註冊Microsoft金鑰和源,在終端裡面執行下面的命令:

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

更新可供安裝的產品:

sudo yum update

如下圖所示:

最後安裝ASP.NET Core 執行時

sudo yum install aspnetcore-runtime-3.1 

如下圖所示:

這時就比較考驗網速了,如果網速比較快,安裝就很快。安裝完成以後檢視當前環境:

參考微軟官方檔案:https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-package-manager-centos7

2、離線包安裝

如果Linux虛擬機器器可以連線外網,建議使用上面的方式直接進行安裝,如果是在生產環境下該如何安裝Runtime呢?下面我們使用微軟提供的離線安裝包進行安裝。首先下載tar.gz的離線包,下載網址:

https://dotnet.microsoft.com/download/dotnet-core/3.1

這裡選擇Linux對應的架構的離線包下載:

我們首先在Linux上建立一個目錄:

mkdir -p /var/lib/dotnet

如下圖所示:

建立完成以後,我們使用Xftp把上面下載的tar.gz離線包上傳到剛才建立的目錄中:

進入剛才建立的目錄,然後把tar.gz檔案解壓到目錄中:

tar zxf aspnetcore-runtime-3.1.1-linux-x64.tar.gz -C /var/lib/dotnet

如下圖所示:

然後執行下面的命令設定環境變數:

export DOTNET_ROOT=/var/lib/dotnet
export PATH=$PATH:/var/lib/dotnet

如下圖所示:

然後檢查環境:

可以看到Runtime已經安裝成功了。

注意:這種設定環境變數的方式只對當前對談視窗起作用,在另外的對談視窗就不起作用了,如下圖所示:

為了解決這個問題,我們需要建立軟連結方式來設定環境變數。

ln -s /var/lib/dotnet/dotnet /usr/local/bin

如下圖所示:

建立完軟連結以後,就可以在所有對談視窗存取了:

如果是使用線上rpm的方式進行安裝,不會出現這種問題,所有的對談視窗都可以存取。

三、上傳檔案

環境安裝完成以後,我們將釋出好的檔案上傳到伺服器。

在終端裡面新建立一個資料夾,用來存放我們上傳的檔案:

sudo mkdir /NetCoreDemo

如下圖所示:

建立完成以後我們在XFtp裡面檢視新建立的資料夾:

可以看到資料夾已經建立成功了。接著我們使用Xftp將檔案上傳到剛才建立的資料夾下面:

接下來我們就可以部署了。

四、部署

1、使用Kestrel啟動

我們進入資料夾裡面,然後直接使用命令列啟動:

可以看到服務以及啟動了。我們在網頁中瀏覽:

網頁沒有任何的輸入,這是為什麼呢?因為localhost是內網地址,這裡要加上--urls引數,

dotnet AspNetCoreDeployDemo.dll --urls http://*:5000

如下圖所示:

這時我們在存取網頁:

發現還是不能存取,這又是什麼原因呢?原來在Linux中防火牆預設是開啟的,所以要想外網存取,還需要關閉防火牆或者是把5000埠新增到防火牆中,檢視防火牆狀態命令:

service firewalld status

如下圖所示:

可以看到,現在防火牆是開啟的,我們把5000埠新增到防火牆中:

firewall-cmd --zone=public --add-port=5000/tcp --permanent

如下圖所示:

permanent:這個參數列示永久存在,否則重啟防火牆設定就丟失了。

新增了埠以後需要重啟防火牆:

firewall-cmd --reload

如下圖所示:

可以看到這時就可以存取了。

我們也可以關閉防火牆:

service firewalld stop

如下圖所示:

在生產環境中,不建議關閉防火牆,建議是開啟防火牆,然後把相應的埠號新增到防火牆裡面。

2、使用Nginx作為反向代理

上面我們是使用的控制檯的方式啟動的,這種方式不能處理反向代理,負載均衡等,所以我們建議在Linux上面使用Nginx作為反向代理伺服器。我們安裝Nginx。

因為預設情況下,Nginx不在CentOS的資源庫中,首先要執行下面的命令將Nginx新增到資源庫中:

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

如下圖所示:

然後就可以安裝Nginx了:

yum install nginx

如下圖所示:

安裝完以後啟動Nginx:

systemctl start nginx

如下圖所示:

將Nginx設定為開機啟動:

systemctl enable nginx

Nginx預設開啟80埠,我們要把80埠新增到防火牆中,新增完以後重啟防火牆:

firewall-cmd --zone=public --add-port=80/tcp --permanent

如下圖所示:

這時我們在外網存取Nginx:

我們看到這時可以存取Nginx了。接下來我們設定Nginx的反向代理。

首先進入Nginx的安裝目錄,然後檢視所有檔案:

如上圖所示,nginx.conf是主組態檔,使用vim編輯器開啟該檔案:

在上圖中可以發現:下面有一句include /etc/nginx/conf.d/*.conf,這說明還有一些設定在conf.d目錄裡面,而我們設定反向代理,主要就是在conf.d檔案裡面,使用下面的命令進入conf.d命令:

cd conf.d

然後檢視所有檔案:

發現裡面有一個default.conf的檔案,使用Vim編輯器開啟該檔案,然後修改如下:

listen表示監聽的埠,這裡是80埠。proxy_pass用來設定代理的地址。注意這裡不要忘記最後的“;”。

儲存以後使用下面的命令檢查修改是否正確:

這說明修改的檔案沒有錯誤。設定成功以後,我們需要重啟Nginx服務:

nginx -s reload

如下圖所示:

重啟之後我們存取:

這說明有錯誤,提示資訊告訴我們檢視Nginx紀錄檔,我們在nginx.conf裡面檢視紀錄檔路徑:

然後我們進入該路徑,檢視下面的所有檔案:

發現這下面有兩個紀錄檔,我們先檢視error.log:

使用下面的命令解決:

setsebool -P httpd_can_network_connect 1

我們重新存取:

這就可以存取了。我們在Linux上面部署就成功了。

到此這篇關於部署ASP.NET Core程式到Linux系統的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com