1. 程式人生 > 程式設計 >在MacOS+Linux+Nginx中釋出和部署Asp.Net Core

在MacOS+Linux+Nginx中釋出和部署Asp.Net Core

目錄
  • 新建一個 WebApp 專案
  • 釋出到 ,Mac OS
  • 使用 Nginx 進行反向代理
    • Mac OS
    • Linux(Ubuntu)
  • 注意事項

    新建一個 WebApp 專案

    在 Asp.Net Core 專案中,我們使用 dotnet new -t WebApp 命令和建立一個新的空的 Web 應用程式。

    以下是我在 Mac 中的截圖:

    在MacOS+Linux+Nginx中釋出和部署Asp.NetCore

    主要是用以下幾個命令:

    mkdir HelloWebApp 這個命令是建立一個名為 HelloWebApp 的資料夾。

    dotnet new -t Web 這個bLPMZd命令是使用 Web 模板來新建一個 WebApp 的 Mvc 應用程式。

    新建了應用程式之後,使用dotnet restore

    dotnet run 命令來測試一下我們的應用程式。

    在MacOS+Linux+Nginx中釋出和部署Asp.NetCore

    可以看到已經成功運行了。

    我們開啟瀏覽器輸入 http://localhost:5000,來看一下效果。

    ps: Safari 下面,瀏覽器位址列看不到埠號,實際上是5000埠。

    在MacOS+Linux+Nginx中釋出和部署Asp.NetCore

    釋出到 Linux,Mac OS

    如果釋出應用程式,我們需要使用 dotnet publish命令,通過使用 --help 引數可以看到一些可以使用的命令引數。

      -f|--framework <FRAMEWORK>          Target framework to compile for
      
      -r|--runtime <RUNTIME_IDENTIFIER>   Target runtime to publish for
      
      -b|--build-base-path <OUTPUT_DIR>   Directory in which to place temporary outputs
      
      -o|--output <OUTPUT_PAbLPMZd
    TH> www.cppcns.com Path in which to publish the app --version-suffix <VERSION_SUFFIX> Defines what `*` should be replaced with in version field in project.on -c|--configuration <CONFIGURATION> Configuration under which to build --native-subdirectory Temporary mechanism to include subdirectories from nativbLPMZd
    e assets of dependency packages in output --no-build Do not build projects before publishing

    我們直接執行dotnet publish 使用預設的釋出路徑,當看到Published 1/1 projects successfully的時候,說明已經發布成功了。 接著進入到 bin 資料夾下的Debug 資料夾下的netcoreapp1.0 資料夾,然後會看到有一個 publish 的資料夾。這就是預設釋出生成的資料夾,在這個資料夾中可以看到我們程式所有依賴的程式集檔案。

    釋出之後 publish 資料夾裡面的子資料夾有必要說明一下。

    appsettiong.json  應用程式的配置檔案
    refs 應用程式引用的.net fx系統程式集
    runtimes 執行時環境,可以看到裡面的資料夾包含 win7、linxu,mac os 等,說明我們這個應用程式是跨平臺的。
    views 這個資料夾存放的就是我們的 mvc 的檢視檔案。
    wwwroot 資料夾,存放的是前端使用的 js 庫, 樣式表,和圖片等。

    然後我們把工作目錄切換到釋出的 publish 資料夾。使用dotnet HelloWebApp.dll測試釋出過後的程式是否執行正常。

    使用 Nginx 進行反向代理

    • Mac OS
    • Linux(Ubuntu)
    • 注意事項

    反向代理,即把我們應用程式的一部分路徑交給 Nginx 去處理,比如靜態檔案,圖片等。另外一部分動態的交給 Kestrel 來處理。這樣可以降低我們的後端 Kestrel 的壓力,以及可以在 Nginx 配置負載均衡等。

    還有一個很重要的優勢就是 Web 中的快取,會在代理伺服器這一步來處理。大家看下面這個圖:

    在MacOS+Linux+Nginx中釋出和部署Asp.NetCore

    Mac OS

    安裝 dotnet 環境參見官方 https://www.microsoft.com/net/core。

    • 1、 在 mac 中開啟命令列,輸入 brew install nginx 首先安裝 nginx。
    • 2、 安裝完成之後,輸入 nginx -v檢視是否安裝成功。顯示nginx version: nginx/1.10.1表示安裝已經成功。
    • 3、配置 nginx 代理。

    安裝完 nginx 之後,預設的配置檔案路徑在 /usr/local/etc/nginx 資料夾中。在這個資料夾中找到nginx.conf 配置檔案,使用 Visual Studio Code 開啟,在 Server 節點中,找到監聽 80埠的location 節點,修改配置為如下:

    location / {
          proxy_pass http://localhost:5000;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection keep-alive;
          proxy_set_header Host $host;
          proxy_cache_bypass $http_upgrade;
        }

    儲存並退出。 然後使用sudo nginx -s reload命令來重新載入配置。

    然後我們開啟瀏覽器 輸入http://localhost,發現此時已經通過 nginx 來訪問我們的站點了。

    ps: Safari 下面,瀏覽器位址列看不到埠號,實際上是80埠。

    在MacOS+Linux+Nginx中釋出和部署Asp.NetCore

    Linux(Ubuntu)

    安裝 dotnet 環境參見官方網站 https://www.microsoft.com/net/core。

    首先在Ubuntu 中新建一個資料夾,把我們釋出的 publish 資料夾拷貝到 Liunx 中。然後測試一下是否可以正常執行。

    在MacOS+Linux+Nginx中釋出和部署Asp.NetCore

    • 1、 在 linux(Ubuntu) 中新開一個命令列視窗,輸入 apt-get install nginx 首先安裝 nginx。
    • 2、 安裝完成之後,輸入 nginx -v檢視是否安裝成功。顯示nginx version: nginx/1.4.6表示安裝已經成功。
    yxd@ubuntu:~$ sudo nginx -v
    nginx version: nginx/1.4.6 (Ubuntu)

    測試 nginx 是否執行成功,開啟瀏覽器,輸入 http://localhost 檢視是否顯示如下介面。

    在MacOS+Linux+Nginx中釋出和部署Asp.NetCore

    • 3、配置 nginx 代理。

    安裝完 nginx 之後,預設的配置檔案路徑在 /etc/nginx/sites-available/default 檔案中。切換工作目錄到/etc/nginx/sites-available/,使用sudo gedit default命令開啟 default 檔案。 在 Server 節點中,找到監聽 80埠的location 節點,修改內容為如下:

    server {
    	listen 80;
    
    	#root /usr/share/nginx/html;
    	#index index.html index.htm;
    
    	# Make site accessible from http://localhost/
    	server_name localhost;
    
    	location / {
    		proxy_pass http://localhost:5000;
    		proxy_http_version 1.1;
    		proxy_set_header Upgrade $http_upgrade;
    		proxy_set_header Connection keep-alive;
    		proxy_set_header Host $host;
    		proxy_cache_bypass $http_upgrade;
    	}
    }

    儲存並退出。 然後使用sudo nginx -s reload命令來重新載入配置。

    然後我們開啟瀏覽器 輸入http://localhost,發現此時已經通過 nginx 來訪問我們的站點了。

    在MacOS+Linux+Nginx中釋出和部署Asp.NetCore

    注意事項

    1、在使用 nginx 代理訪問站點的時候, 保持命令dotnet run HelloWebApp.dll的命令列視窗必須開啟。

    2、可以使用下面的命令來讓一個命令列執行在後臺程序中。

    nohup dotnet HelloWebApp.dll &

    這個時候你就可以把命令列視窗關掉了。

    以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。