考慮我們為什麼要選擇.NET Core?
因為它面向的是高性能伺服器開發,抛卻了 AspNet 的臃腫元件,非常輕量,加上微軟的跨平台戰略,對 Docker 的親和性,對于開發人員也非常友好,是以整體環境來說是健康發展的,未來技術決策時 .Net Core 也有很大的優勢。那既然.NET Core 本身具有跨平台 (Windows、Mac OSX、Linux) 特性,而之前我們的網站一直是部署在 Windows Server 伺服器上,這個章節我們不妨學習在生産環境下,怎麼将我們的網站應用程式切換部署在Linux系統上。
CentOS / 7.1 (64bit) (Linux作業系統)
MySQL5.7(網站應用資料庫)
.NET Core SDK 2.0.0(網站應用環境)
Nginx(反向代理伺服器)
Supervisor(管理網站應用守護程序)
Symantec SSL(域名型證書,提供https協定服務)
這裡資料庫由SQL Server改為MySQL,因為SQL Server 2017對運作環境要求的配置比較高,我這1G記憶體的低端雲伺服器傷不起,o(╥﹏╥)o
Xshell 5(終端模拟軟體)
WinSCP(圖形化SFTP用戶端)
首先将雲伺服器,重新安裝作業系統,選擇CentOS / 7.1 x86_64 (64bit)版本的鏡像,并設定通路使用者名和密碼,系統會幫我們自動安裝好CentOS系統。接下來我們配置一下Xshell和WinSCP,使得這2個工具能正常通路并管理作業系統,相關的配置和使用方法,請大家自行百度。
完成上述操作後,首先檢視一下硬碟情況:

發現我們的第二塊磁盤雲磁盤(/dev/vdb)并沒有被加載。
在挂載之前,首先要格式化這塊硬碟。我們選擇的是ext4格式:
硬碟格式化後,建立一個挂載目标目錄,并将磁盤挂載該目錄上:
這時候,我們再檢視下系統磁盤情況:
可以看到,雲磁盤可以正常的被挂載了。但是如果重新開機系統的話,磁盤仍舊會丢失,我們還必須在每次啟動的時候将磁盤挂載。
修改/etc/fstab檔案,需要在該檔案的最後添加一行,具體如下:
至此,我們重新開機系統,發現磁盤可以正常挂載使用了。
參考官方文檔:Prerequisites for .NET Core on Linux
第1步,注冊Microsoft簽名密鑰,然後添加Microsoft産品Feed:
第2步,更新可用于安裝的産品清單,安裝.NET Core所需的元件,然後安裝.NET Core SDK:
第3步,設定環境變量:
以上,.NET Core環境已配置完成,可以建立一個項目HelloWorld,執行指令:dotnet run,正常運作,并使用localhost:5000正常通路,這裡就不再多述。
第1步,下載下傳MySQL Yum倉庫的RPM安裝包:
在MySQL官網中下載下傳YUM源rpm安裝包:http://dev.mysql.com/downloads/repo/yum/
第2步,安裝MySQL RPM安裝包:
第3步,安裝MySQL伺服器:
安裝完畢後,我們啟動MySQL,并檢視運作狀态,并設定開機啟動:
mysql安裝完成之後,在/var/log/mysqld.log檔案中給root生成了一個預設密碼。通過下面的方式找到root預設密碼:
我們擷取了預設密碼,就可以進行一些安全設定,輸入指令:
最後設定遠端通路權限:
預設情況,MySQL的字元集為lanti,考慮我們使用中文的習慣,修改mysql配置檔案/etc/my.cnf,增加如下一行,把預設的字元集改成utf8:
因為.NET Core本身就是支援跨平台,是以程式邏輯不用進行任何調整,但是我們已将資料庫切換成MySQL,是以針對這塊,稍微調整下。
首先,将appsettings.json中的資料庫連接配接字元串修改為新的連接配接;
然後,Startup.cs檔案啟動配置修改如下:
重新編譯釋出到目錄:/data/wwwroot/MyWebSite
進入該目錄,執行:
現在我們的項目就正常的部署并運作在localhost:5000上了。
Nginx是一個高性能的HTTP和反向代理伺服器,在CentOS中很容易安裝和配置,接下來進行如下操作:
安裝完成後,我們啟動Nginx,并将它設定為開機啟動:
要使得Nginx代理外網80端口,通路我們内部5000端口監聽的網站程式,需要修改Nginx配置檔案/etc/nginx/nginx.conf:
最後,我們重新啟動restart nginx.service,并通過外網連結,發現可以正常通路我們的網站了。
其實,經過以上的步驟,已經完成基本的移植和部署,網站通路也沒有問題了。但是,.NET Core應用程式運作在shell之中,如果shell關閉,.NET Core應用程式也随之關閉,導緻應用無法通路。而且.NET Core程序意外終止或者伺服器當機或重新開機,都會導緻服務不可用,這是我們不想看到的。
為了解決這個問題,我們需要有一個守護程序來監聽ASP.NET Core 應用程式的狀況,在應用程式停止運作的時候立即重新啟動。
這裡利用Supervisor工具幫我們建立這樣的守護程序,先安裝:
安裝完畢後,如下操作
修改supervisord.conf檔案,将檔案尾部的配置修改:
再建立一個/etc/supervisor/conf.d/ MyWebSite.conf檔案,内容大緻如下:
運作supervisord,檢視是否生效:
最後,我們要配置Supervisor開機啟動,建立一個“/usr/lib/systemd/system/supervisord.service”檔案
執行指令,使得服務開機啟動:
CentOS中防火牆程式主要是firewall和iptables,CentOS7中firewall服務已經預設安裝好了。是以,這裡介紹一下firewall相關配置。
預設防火牆是關閉的,為了通路的安全性,我們首先将防火牆開啟,并設定開啟啟動:
這時候,我們通路網站連結,發現已經端口屏蔽無法正常通路。是以接下來,我們要開放http(80端口)、https(443端口)、MySQL(3306端口):
重新開機伺服器,重新打開網站連結,可以正常通路。
在之前Windows Server伺服器上,已經配置過FTP伺服器,項目部署時,通過VS可以很友善的一鍵部署,那CentOS上該如何配置呢?
第1步,安裝一下ftp服務:
第2步,打開/etc/vsftpd/vsftpd.conf配置檔案,修改如下2處:
第3步,打開ftp服務,并設定開機啟動,并開放遠端通路端口:
最後,增加一個ftp通路使用者,配置釋出目錄,并提供寫權限和設定密碼:
VS2017中,修改ftp部署配置如下圖:
為了實作資料資訊在用戶端和伺服器之間的加密傳輸,防止資料資訊的洩露,保證雙方傳遞資訊的安全性,我們需要HTTP下加入SSL層,我之前已經申請過Symantec免費的SSL證書,是以就簡單說明一下怎麼配置。
前面我們的網站應用程式,已經通過Nginx反向代理來通路,那其實隻用通過配置Nginx來管理我們申請的證書檔案。首先下載下傳證書檔案,包括.crt和.key兩個檔案,然後拷貝到目錄:/etc/nginx/ssl下,接着編輯Nginx配置檔案,找到相關地方做如下修改:
最後,我們重新開機一下Nginx,輸入我們的網站位址:https://www.lancel0t.cn/ ,看到能夠正常通路。
至此,網站應用程式移植到Linux環境中完美完成!當然,實施的過程中筆者也踩過不少的坑,這裡希望能抛磚引玉,有什麼問題歡迎給我部落格留言,一起讨論。
文章作者:原子蛋 文章出處:https://www.cnblogs.com/lizzie-xhu/ 個人網站:https://www.lancelot.tech/ 微信公衆号:原子蛋Live+ 掃一掃左側的二維碼(或者長按識别二維碼),關注本人微信公共号,擷取更多資源。 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。![]()
ASP.NET Core 一步步搭建個人網站(7)_Linux系統移植