ASP.NET Core教程:ASP.NET Core程序部署到Linux


一、前言

這篇文章我們將講解如何將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上面部署就成功了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM