asp net core 跨平臺初體驗

在天空飛翔發表於2017-06-16
標: 在 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 上執行的網站啦。

 

相關文章