標: 在 ubuntu 16.04 上部署一個 asp.net core 站點,打開網站后顯示一段文字。
安裝 net core
運行環境:ubuntu 16.04 LTS
1.添加 apt 源
依次執行三條命令
sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 417A0893
sudo apt-get update
2.執行安裝
sudo apt-get install dotnet-dev-1.0.4
3.驗證安裝結果
執行命令
dotnet --version
顯示 1.0.4 表示一切正常。

編寫程序
IDE:visual studio community 2017 版
Web 框架:Nancy(nancy 是一個輕量級、但是功能很強大的 web 框架,在此不做詳細介紹。)
1.在 vs 中新建一個空的 asp.net core web 應用程序

2.添加 nuget 包
默認的程序有三個包

咱們用不上 application insight,刪掉,然后添加 microsoft.aspnetcore.owin 和 nancy 兩個包,先安裝 owin,再安裝 nancy。
注意 nancy 對 aspnet core 的支持還處於測試版,所以再搜索 nancy 之前需要勾選 nuget 包管理器的 “包括預發行版”
3.修改 Program.cs 文件
刪除我們不需要的代碼
public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) //去掉 .UseIISIntegration() .UseStartup<Startup>() // 去掉 .UseApplicationInsights() .Build(); host.Run(); }
4.修改 Startup.cs 文件
using Nancy.Owin; // 添加 nancy 的 owin 支持 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // 只需要添加一行代碼即可,注意必須先 using Nancy.Owin; app.UseOwin(p => p.UseNancy()); /*因為咱們用 nancy 框架,下面的代碼可刪掉 app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); }*/
5.添加 nancy 所需的 module 文件,本文中使用 homeModule.cs
public homeModule() { Get("/", p => { return View["index.html"]; }); }
和 asp net mvc 類似, nancy 的 module 文件名直接影響到 nancy 搜索 view 的路徑, 比如 homeModule, nancy 會搜索 views/home/index.html 這個路徑。當然也可以通過配置修改 nancy 搜索 view 的方法。
事實上 nancy 的任何組件都可以配置、甚至替換成自己的,所以相當靈活。
新建 views/home/index.html 文件, 隨便寫一段話,不做贅述。按 F5 調試運行即可。
有兩點要注意一下
1.因為咱們不是以 iis 作為宿主來運行( 在Program.cs文件中刪掉了 UseIISIntegration 代碼) ,所以在 vs 的瀏覽方式中不能選 IIS Express,要選擇項目名稱。

2.新添加的 view 文件,vs 不會復制到輸出目錄,導致運行出錯,要改一下輸出方式。

部署到 ubuntu
將項目改為 release 模式,然后在 vs 的項目上點右鍵,選擇“打包”命令, vs 會進行編譯,最后將 dll 編譯到 bin\release\netcore1.1 目錄下。

在把文件上傳到 ubuntu 之前要對 hello.runtimeconfig.dev.json 做一點修改,這是一個大坑,微軟的官方教程中都沒提到這塊。
這個文件的內容很簡單:
"additionalProbingPaths": [
"C:\\Users\\michael\\.nuget\\packages"
]
additionalProbingPaths 就是 nuget 的包路徑, 因為我們是在 win 上開發,所以是 %USERPROFILE%\.nuget\packages,
要部署到 ubuntu 之前,需修改為 /root/.nuget/packages
將上述文件通過 scp 或者 ftp 等等工具傳到 ubuntu 上,比如放在 /home/web/hello 中,然后在 Ubuntu 上執行
dotnet hello.dll 即可

此時只能在遠程服務器上用 http://localhost:5000 訪問,非常不方便,要想在客戶端訪問,需要再添加一個反向代理。
添加反向代理
依照主流,咱們選擇 nginx
1.安裝 nginx
執行 apt install nginx. 不做贅述
2.配置 nginx
編輯/etc/nginx/sites-available/default 文件。
server {
listen 80;
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;
}
}
3.運行 nginx
執行 sudo service nginx start。
大功告成,現在在客戶端使用 http://服務器IP/ 即可看到 net core 在 ubuntu 上運行的網站啦。