asp net core 跨平臺初體驗

標: 在 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 文件html

     刪除咱們不須要的代碼
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 上運行的網站啦。

相關文章
相關標籤/搜索