CentOS7部署Dotnet Core2.1
聲明
本文翻譯自:How to setup ASP.NET Core 2.1 on Linux in under 10 minutes
文中截圖及代碼會根據本人實際情況做出調整,希望對比兩篇文章看的需要註意!!!
前言
筆者在毫無Linux部署.net core的經驗下,第一次用了15分鐘完成部署,第二次在生產環境用了5分鐘。下文將說明如何在CentOS7下完成.NetCore2.1的部署,包括如何創建ASP.NET Core項目並將程序持久運行在Kestrel上,如何修改代碼和防護墻進而使代碼可以遠程訪問。最後也會提及生產環境使用的不同點。
1.安裝RunTime
ASP.NET Core在Linux運行的首要條件便是需要安裝Runtime。
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7.4/packages-microsoft-prod.rpm
sudo yum update
sudo yum install aspnetcore-runtime-2.1
微軟對不同的Linux發行版本(包括RHEL,Ubuntu,Debian,Fedora,CentOS,openSUSE和SLES)提供了相似的解決方案.
如果想要在Linux做 .NET Core的開發和編譯工作,那麽需要同時安裝 Dotnet Core SDK(SDK的安裝並不是必須的,可以在開發環境編譯後上傳到Linux服務器),在CentOS下的指令為:
sudo yum install dotnet-sdk-2.1
2.創建並編譯
2.1創建MVC工程
使用如下指令創建ASP.NET Core2.1的工程:
dotnet new MVC -o MvcDemoApp
2.2修改代碼
默認的情況下ASP.NET Core2.1本地啟動會運行在 Kestrel服務器上,如果想要從其他電腦訪問網站,則需要修改綁定。
打開新建的工程文件中的 Program.cs 文件,修改代碼如下:
1 public static IWebHostBuilder CreateWebHostBuilder(string [] args) =>
2 WebHost.CreateDefaultBuilder(args)
3 .UseUrls("https://0.0.0.0:5001")
4 .UseStartup<Startup>();
這樣綁定的便是服務器上的所有IP,而不只是默認的 localhost。(???)
2.3編譯程序
在終端運行如下指令:
dotnet publish --configuration Release
該指令所有的文件放到 /bin/Release/netcoreapp2.1/publish文件夾中。為了方便管理,我們將該目錄下的文件放到Linux服務器下的 /home/RunService/MvcDemo 路徑下。
3.運行Web程序
完成了.NET Core程序的創建和編譯後,現在開始程序的部署。
3.1直接運行程序
最簡單的是直接進入程序的根目錄 /home/RunService/MvcDemo ,然後執行指令:
dotnet CoreMvcApp.dll
此時指令會根據代碼設定將程序運行在5001端口(結束程序 Ctrl + C),打開瀏覽器並輸入地址 http://localhost:5001/ 或者 http://0.0.0.0:5001/便可以訪問web服務。
3.2作為服務運行
直接運行可以用來測試程序,但是每次服務器重啟後,需要手動打開服務。更好的方法是將網站當作服務運行。
創建名為 MvcDemo_Conf 的配置文件:
sudo vi /etc/systemd/system/MvcDemo_Conf.service
將以下命令寫入打開的配置文件中
[Unit]
Description=.NET Core Test App
[Service]
WorkingDirectory=/home/long/RunService/MvcDemo
ExecStart=/usr/bin/dotnet /home/long/RunService/MvcDemo/MvcDemoApp.dll
Restart=always
RestartSec=10
SyslogIdentifier=MvcDemoApp
User=long
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
黃色背景的信息需要根據自己的需要修改
3.3配置文件
保存服務的配置文件後,使服務可用
sudo systemctl enable MvcDemo_Conf.service
啟動服務
sudo systemctl start MvcDemo_Conf.service
檢查服務運行狀態
sudo systemctl status MvcDemo_Conf.service
如果操作無誤,正常的提示如下圖所示
4.設置防火墻
如果想要在遠程訪問服務,需要打開防火墻的5001端口,從而其他計算機才可以遠程訪問。
打開防火墻的5001端口:
sudo firewall-cmd --add-port=5001/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
如果端口打開正常,則局域網內的計算機可通過地址 ip訪問
5.生產系統部署
上例說明了如何在CentOS上配置ASP.NET Core程序,但因為Kestrel是一個很基本的web服務器,所以需要配置性能更好的IIS、Nginx或者Apache。
正式程序可以不做步驟5,即打開防火墻的步驟。在Kestrel前置Apache服務器,Apache可以作為Kestrel的反向代理。
這樣可以通過反向代理將部分鏈接指向ASP.NET Core,而部分代碼仍舊使用php或者java,為程序的遷移提供了便利。
參考
centos安裝VsCode
centos出現“FirewallD is not running”怎麽辦
CentOS7部署Dotnet Core2.1