日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Asp.NetCore轻松学-部署到 Linux 进行托管

發布時間:2023/12/4 linux 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Asp.NetCore轻松学-部署到 Linux 进行托管 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

上一篇文章介紹了如何將開發好的 Asp.Net Core 應用程序部署到 IIS,且學習了進程內托管和進程外托管的區別;接下來就要說說應用 Asp.Net Core 的特性(跨平臺),將 .NetCore 部署到 Linux 中,主流的 Linux 有多個版本的操作系統,這里以 Centos-7.5 為例子,其它版本的操作系統下的部署基本都是大同小異的,除了了一些命令上的區別。

在 Linux 上部署 .Net Core 應用程序,通常的做法是使用托管宿主,早在 1.0.4 的時代,曾經推薦的做法是使用自托管,即 Kestrel,后來官方主力推薦使用 Supervisor 進行托管部署;當然,還有如今最流行的 Docker 部署,但是 Docker 部署不在本文討論范圍,這次我們主要講講怎么使用 “Kestrel” 和 “Supervisor” 進行部署。

準備過程

為了演示部署,我專門到 Azure 上申請了 1 元使用套餐,創建了一個 Centos-7.5 的虛擬機,申請過程非常輕松愉快,支付 1 元即可完成 1500 元的信用額度,使用期限 30 天,童叟無欺,推薦大家申請,用作測試學習的機器。

花了幾分鐘,機器拿到了,感謝 Azure 的友情支持

SSH 連接到虛擬機,他是長這個樣子的,輸入命令 cat /etc/redhat-release 查看版本

大家拿到一臺機器的時候,一定要確認一下操作系統的版本,因為 ubuntu 和 centos 下的有些命令是不同的,比如 ubuntu 使用 apt-get,而 centos 使用 yun

1. 自托管的部署-使用 Kestrel

好了,機器已經拿到,系統已經確認,下面的工作首先就是要在 Centos 上安裝 .net core,因為是 Azure ,我抱著幻想輸入 dotnet --version,果然,提示命令不存在,這很工業標準。

1.1 安裝環境

好的,沒問題,我們就按照 https://dotnet.microsoft.com/learn/web/aspnet-hello-world-tutorial/install 的指引進行安裝即可,依次輸入下面的命令

  • sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

  • sudo yum update

  • sudo yum install dotnet-sdk-2.2

  • 因為現在我們登錄的賬號不是 root,所以執行命令期間可能會提示輸入密碼,照做即可,由于是新機器第一次進行 yum update ,可能各種依賴比較多,請耐心等待安裝完成。如果是第一次使用 Linux 的同學,請把 Linux 想象成 Windows 下的 dos 系統操作,這樣就可以實現平滑過渡了。

    安裝完成,輸入 dotnet --version 輸出下面的信息,證明安裝成功了

    1.2 配置服務運行的端口

    配置服務運行的端口有兩種方式,之前的文章介紹了使用 hosting.json 文件的方式,這里演示為了方便,因為 linux 下要配置防火墻等操作會把新手搞懵逼,我們直接的代碼中指定 80 端口,代碼如下

  • ? ?public class Program

  • ? ?{

  • ? ? ? ?public static void Main(string[] args)

  • ? ? ? ?{

  • ? ? ? ? ? ?CreateWebHostBuilder(args).Build().Run();

  • ? ? ? ?}


  • ? ? ? ?public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>

  • ? ? ? ? ? ?WebHost.CreateDefaultBuilder(args)

  • ? ? ? ? ? ? ? ? ? .UseKestrel(options =>

  • ? ? ? ? ? ? ? ? ? {

  • ? ? ? ? ? ? ? ? ? ? ? options.Listen(IPAddress.Parse("0.0.0.0"), 80);

  • ? ? ? ? ? ? ? ? ? })

  • ? ? ? ? ? ? ? ? ? .UseStartup<Startup>();

  • ? ?}

  • 非常簡潔的代碼,僅僅使用 UseKestrel 就可以配置偵聽地址和端口,如果有多塊網卡的朋友,注意最好還是指定 IP 地址。

    2. 開始發布

    2.1 發布到本地文件夾

    定位到項目 D:\Learning\Deploy.Linux\Deploy.Linux,輸入 cmd 啟動命令行,輸入以下命令

  • dotnet publish --runtime centos.7-x64 ?--framework netcoreapp2.2 --configuration release

  • 執行上述命令后,將會在項目 bin\release\netcoreapp2.2\centos.7-x64\publish 下看到有發布好的項目文件和依賴項目

    • 注意:參數 --runtime 是有固定 RID 的,想了解更多有關 RID 的知識,請移步?.NET Core RID 目錄

    接下來,在服務器中新建一個文件夾,在控制臺中輸入命令

  • sudo mkdir -p /data/sites/demo

  • // 修改權限為當前登錄用戶,否則無法上傳

  • sudo chown -R ron:ron /data

  • 將 publish 文件夾上傳到服務器上剛才創建好的文件夾 /data/sites/demo 下,我這里使用的是 SecureFx ,簡單粗暴,直接復制上傳

    2.2 測試啟動

    上傳成功后,先不要著急的寫服務文件,先測試一下是否可以啟動,先使用控制臺進行測試,輸入命令定位到 publish 文件夾

  • cd /data/sites/demo/publish

  • // 啟動,因為要偵聽端口,而且我們使用的不是 root 用戶,這里需要使用 sudo 進行提權,如果提示輸入密碼,請輸入當前登錄用戶的密碼即可

  • sudo dotnet Deploy.Linux.dll

  • 測試啟動成功,上面輸出的信息表示,我們的發布是沒有問題的,先來了解一下上面的輸出信息

  • // 主機環境:Production

  • Hosting environment: Production

  • // 根目錄

  • Content root path: /data/sites/demo/publish

  • // 偵聽地址和端口

  • Now listening on: http://0.0.0.0:80

  • // 提示關閉技巧,Ctrl+C 可以關閉此主機

  • Application started. Press Ctrl+C to shut down.

  • 沒有太多的信息,同樣的簡單明了,實際上,現在我們已經通過 80 端口來訪問該站點了,但是作為服務,必須要常駐內存中運行,而不是關閉窗口就停止了站點。

    2.3 創建常駐服務

    所以,接下來我們就編寫一個腳本文件,將該站點托管到 Linux 服務中,這個腳本文件官網有示例,我們可以直接拿過來用,但是首先,我們得先在系統中創建一個服務文件 kestrel-dotnet.service

    定位到文件夾 /etc/systemd/system,輸入命令

  • sudo vi kestrel-dotnet.service


  • // 按 i 將編輯器轉換為輸入模式

  • // 將以下內容 copy 到當前編輯器中

  • [Unit]

  • Description=Example .NET Web Site running on Centos


  • [Service]

  • WorkingDirectory=/data/sites/demo/publish

  • ExecStart=/usr/bin/dotnet Deploy.Linux.dll

  • Restart=always

  • # Restart service after 10 seconds if the dotnet service crashes:

  • RestartSec=10

  • KillSignal=SIGINT

  • SyslogIdentifier=dotnet-example

  • User=root

  • Environment=ASPNETCORE_ENVIRONMENT=Production

  • Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false


  • [Install]

  • WantedBy=multi-user.target


  • // 按 esc 鍵推出編輯模式,輸入命令 :wq! 保存并退出

  • 通過上面這波操作以后,你就得到了一個服務文件 kestrel-dotnet.service,這是一個標準的 Linux 服務配置文件

    經過上面的一系列操作,對于還沒有接觸過 Linux 的同學來說,已經有點疲憊了,再堅持一下,馬上就好

    現在將創建好的服務文件注冊到系統中,然后啟動它,依次輸入以下命令

  • // 注冊服務

  • sudo systemctl enable kestrel-dotnet.service

  • // 啟動服務

  • sudo systemctl start kestrel-dotnet.service

  • 好了,現在訪問我們的站點,目前我的站點是: http://139.219.9.102/ 在服務沒有到期之前,大家應該都是該地址應該是可以訪問的

    結束語

    寫到這里,發現文章居然有點長了,對于入門文章來說,這是不合適的,好吧,下一篇再繼續介紹使用 Supervisor 進行托管部署 Asp.Net Core 應用程序

    演示代碼下載: https://github.com/lianggx/EasyAspNetCoreDemo/tree/master/Deploy.Linux

    原文地址:https://www.cnblogs.com/viter/p/10408012.html

    .NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com


    總結

    以上是生活随笔為你收集整理的Asp.NetCore轻松学-部署到 Linux 进行托管的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。