今天準備將一個在Windows上用VS2015開發的ASP.NET Core程序部署到阿里云Linux服務器上,部署時發現這臺服務器是內網服務器,無法直接安裝.NET Core SDK,于是想到嘗試用self-contained的方式進行部署。
Self-contained部署方式就是每個應用程序自帶.NET Core運行時環境與程序集依賴,部署的目標機器不需要安裝.NET Core SDK,將應用程序文件夾拷貝過來就能運行。我們通常用的是Portable部署方式,應用程序共享.NET Core運行時環境與程序集依賴,部署的目標機器上需要事先安裝.NET Core SDK,然后用dotnet命令運行程序,這也是.NET Core的默認部署方式。
一開始不知道從何處下手,在detnet publish命令中沒找到對應的參數,dotnet publish的輸出文件夾中也沒找到對應的可執行文件。
后來找到了這篇參考文檔 .NET Core Application Deployment,在project.json中將dependencies中的:
"Microsoft.NETCore.App": { "version": "1.0.0", "type": "platform" },
改為:
"Microsoft.NETCore.App": "1.0.0"
也就是去掉"type": "platform"。
并添加runtimes配置:
"runtimes": { "ubuntu.14.04-x64": {}, "osx.10.11-x64": {}, "win8-x64": {} }
然后運行下面的命令:
dotnet publish
就會在 bin/Debug/netcoreap.0/ubuntu.14.04-x64/publish 文件夾中生成self-contained部署方式所需的文件,其中有一個Linux可執行文件:
這個生成部署文件的操作是可以跨平臺的,在Windows上通過 dotnet publish -r ubuntu.14.04-x64 命令生成Linux的部署文件,然后將整個部署文件夾上傳到Linux服務器。
回到我們的部署場景,由于目標Linux服務器是內網服務器,無法直接將部署文件上傳到目標服務器。于是我們借助一臺安裝有.NET SDK的跳板機,在這臺機器上git簽出項目代碼,用 dotnet publish 命令生成self-containde方式的部署文件,然后通過scp命令上傳到部署服務器,最后在部署服務器上運行其中的可執行文件:
# ./Cnblogs.YuanDun.WebApi
就將ASP.NET Core站點運行起來了。
Hosting environment: Production Content root path: /data/YuanDunWebApi Now listening on: http://localhost:5000 Application started. Press Ctrl+C to shut down.
而部署服務器并沒有另外安裝.NET Core的任何東東,只是將ASP.NET Core站點文件夾拷貝過來就能直接運行,這就是self-contained部署方式,帥吧!
文章列表