.NET Core跨平臺部署

.NET Core跨平臺部署

1. Windows-IIS

你們對於在IIS上部署.NET站點已經得心應手了,部署.NET Core也沒有什麼本質區別,可是這其中仍然有一些細節是不一樣的,下面記錄了一些我在部署時遇到的問題linux

1.1 安裝.NET Core Windows Server Hosting

要在IIS上運行ASP.NET Core,必須安裝.NET Core Windows Server Hostingnginx

安裝完成後最好重啓IISweb

若是沒有安裝該組件就直接打開部署的網站會出現 500.19 相關的配置數據無效windows

1.2 配置應用程序池

Core的IIS站點應用程序池的.NET CLR版本要選擇 無託管代碼安全

選擇無託管代碼

1.3 使用發佈文件

我最開始測試的時候,仍然使用Web根目錄做爲網站的物理路徑,可是網站沒法訪問,報HTTP403錯誤——Web 服務器被配置爲不列出此目錄的內容,也是就是這個文件夾下沒有能夠訪問的文件,在查閱網上的資料後發現其餘人都是使用了發佈文件夾做爲物理路徑,生成發佈版本設置相應路徑後.NET Core的示例站點便可正常訪問服務器

站點設置

發佈文件夾結構mvc

發佈文件夾結構

成功訪問app

成功訪問

2 Linux

微軟官方給出了不一樣系統的部署方法Tutorial Guide,因爲Linux有不一樣的版本,因此這裏選擇CentOS做爲示例,有如下幾個步驟ide

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是文件夾

Linux下的文件結構

默認的主文件Program.cs的內容以下:

using System;

namespace myApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

2.4 運行應用

dotnet run

Hello World

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的部署與開發

相關文章
相關標籤/搜索