.NET Core跨平臺部署 1. Windows IIS 大家對於在IIS上部署.NET站點已經駕輕就熟了,部署.NET Core也沒有什麼本質區別,但是這其中仍然有一些細節是不同的,下麵記錄了一些我在部署時遇到的問題 1.1 安裝.NET Core Windows Server Hosting ...
.NET Core跨平臺部署
1. Windows-IIS
大家對於在IIS上部署.NET站點已經駕輕就熟了,部署.NET Core也沒有什麼本質區別,但是這其中仍然有一些細節是不同的,下麵記錄了一些我在部署時遇到的問題
1.1 安裝.NET Core Windows Server Hosting
要在IIS上運行ASP.NET Core,必須安裝.NET Core Windows Server Hosting
安裝完成後最好重啟IIS
如果沒有安裝該組件就直接打開部署的網站會出現 500.19 相關的配置數據無效
1.2 配置應用程式池
Core的IIS站點應用程式池的.NET CLR版本要選擇 無托管代碼
1.3 使用發佈文件
我最開始測試的時候,仍然使用Web根目錄作為網站的物理路徑,但是網站無法訪問,報HTTP403錯誤——Web 伺服器被配置為不列出此目錄的內容,也是就是這個文件夾下沒有可以訪問的文件,在查閱網上的資料後發現其他人都是使用了發佈文件夾作為物理路徑,生成發佈版本設置相應路徑後.NET Core的示例站點即可正常訪問
發佈文件夾結構
成功訪問
2 Linux
微軟官方給出了不同系統的部署方法Tutorial Guide,由於Linux有不同的版本,所以這裡選擇CentOS作為示例,有以下幾個步驟
2.1 添加.NET產品依賴
在安裝.NET之前,你需要註冊微軟的Key,註冊產品倉庫,並且安裝需要的依賴,在每台機器上只需要做一次。
直接執行以下命令:
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
2.2 安裝.NET SDK
更新可供安裝的產品,然後安裝.NET SDK
輸入以下命令:
sudo yum update
sudo yum install dotnet-sdk-2.2
中間有兩次手動確認,然後等待安裝完成即可
2.3 創建你的應用
通過輸入命令就可以創建一個官方的示例.NET Core程式
dotnet new console -o myApp
cd myApp
第一條命令新建應用,第二條進入應用文件夾
通過 ls 命令我們可以看到該文件夾下只有兩個文件,obj是文件夾
預設的主文件Program.cs的內容如下:
using System;
namespace myApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
2.4 運行應用
dotnet run
2.5 創建web應用
使用mkdir命令新建一個文件夾mvc,然後進入目錄
創建網站
dotnet new mvc
然後發佈這個網站程式
dotnet restore
dotnet publish -c release
預設的發佈目錄是在/bin/release/netcoreapp2.x/publish/里,可以新建一個目錄拷貝進去
scp -r /root/mvc/bin/release/netcoreapp2.2/publish/* /root/www/firstapp
2.6 從外網訪問web應用
完成發佈後,已經可以通過執行dotnet命令來啟動網站了,但是只能在內網訪問,顯然這不是我們想要的,要想從外網訪問,我們需要反向代理伺服器,這裡選擇Nginx
使用yum命令遠程安裝
sudo yum install epel-release
yum install nginx
啟動
systemctl start nginx #啟用Nginx
systemctl enable nginx #設置開機啟動
這時候已經可以直接通過伺服器的IP地址的80埠訪問Nginx的測試頁了,需要註意的是如果使用阿裡雲伺服器,需要在安全組配置中開放80埠才能夠訪問
接下來根據需要進行一些埠的配置,dotnet預設的訪問埠為5000,但是我測試的時候好像是在linux上被占用了,所以對 Program.cs 進行修改,使其可以通過其他埠訪問,這裡使用8080
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:8080")
.UseStartup<Startup>();
}
改完之後需要重新生成發佈,開始我使用的是微軟官方的示常式序,這裡為了對比埠,我在自己Windows系統下新建了一個2.1的示常式序,使用VS2017進行程式修改,發佈後通過xftp再上傳到Linux伺服器上
然後去修改Nginx的配置,預設的路徑應該是/etc/nginx/nginx.conf,在server節點下的location節點加一句 proxy_pass http://localhost:8080; 就可以
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://localhost:8080;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
修改完成後測試並重啟Nginx服務
sudo nginx -t #測試配置
sudo nginx -s reload #重新載入配置
配置完成之後,啟動網站訪問伺服器IP地址的8080埠即可
但是啟動網站這裡存在一個問題,如果像上面那樣沒有使用cd命令進入網站目錄啟動,樣式和腳本等文件的路徑就會出現錯誤,導致頁面顯示不正常所以要在網站目錄啟動
基本的網站部署就到這裡,下一次講講用Docker如何進行.NET Core的部署與開發