.NET Core跨平臺部署

来源:https://www.cnblogs.com/LFeather/archive/2018/12/09/10094196.html
-Advertisement-
Play Games

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

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • python的內建模塊collections有幾個關鍵的數據結構,平常在使用的時候,開發者可以直接調用,不需要自己重覆製造輪子,這樣可以提高開發效率。 1. deque雙端隊列 平常我們使用的python內置list類的append,extend,pop方法都是從list的尾部執行的(pop()預設 ...
  • import os import time # 添加員工信息 def zengjia(): print('請輸入員工的基本信息:') while 1: while 1: id = input("請輸入編號").strip() if not id.isdigit(): print("... ...
  • 轉自:https://blog.csdn.net/apache0554/article/details/53889253 前言:中文編碼問題一直是程式員頭疼的問題,而Python2中的字元編碼足矣令新手抓狂。本文將儘量用通俗的語言帶大家徹底的瞭解字元編碼以及Python2和3中的各種編碼問題。 一、 ...
  • 今天晚上學習《零基礎學Java》,看到第50頁時,發現書上一行代碼自己想不通,這行代碼意思是將123按位取反,程式運行後輸出結果是-124,即~123=-124. 開始我個人理解是123轉換成二進位為:01111011,按位取反後為10000100,即132,與真實輸出結果-124不一致。後來我查閱 ...
  • python學習之數字 1.python數值類型 2. 數字類型轉換 3. 常用函數 3.1 數學函數 3.2 隨機函數 ...
  • 列表(list) 基本操作 比如說我要整理一個近期熱映的電影列表: 列表很像數組,但功能超越數組。列表都是從0開始的,python中列表無需事先聲明類型。 從列表後面加上一個新的元素,比如說加個“無名之輩”,是 方法。 刪除列表最後一個元素: 方法。 兩個列表相銜接,用的是 方法。 我想在某個條件下 ...
  • python學習之運算符; 算術運算符; 比較運算符;位運算符; 邏輯運算符; 成員運算符; 身份運算符; ++ 或 -- 自運算符; is 和 ==; 數組的兩種賦值方式區別 ...
  • 這兩天比較忙,周末也在加班,所以更新的就慢了一點,不過沒關係,今天我們就進行千呼萬喚的系統開發框架的設計。不知道上篇關於架構設計的文章大家有沒有閱讀,如果閱讀後相信一定對架構設計有了更近一部的理解,如果你沒有閱讀也希望大家能好好閱讀一下!其實說白了,架構是為了應對軟體系統複雜度而提出的一個解決方案, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...