ubuntu16.04-x64系統中Jexus web server部署.NetCore和埠分析引發的猜想!

来源:http://www.cnblogs.com/wangrudong003/archive/2017/06/21/7061064.html
-Advertisement-
Play Games

您有這樣的牢騷麽? 有一周沒更新博客了,簡單說下在乾什麼吧;主要是公司安排對接某旅游大公司的介面,介面數量倒也就10個左右,對接完後還需要加入到業務系統中和App端,因此還是需要花點時間的;時間上來說業務需求安排在6月最後一周上線,整個3周的時間,就本人一人負責,由於在這之前對接過另外一個公司介面, ...


您有這樣的牢騷麽?

有一周沒更新博客了,簡單說下在乾什麼吧;主要是公司安排對接某旅游大公司的介面,介面數量倒也就10個左右,對接完後還需要加入到業務系統中和App端,因此還是需要花點時間的;時間上來說業務需求安排在6月最後一周上線,整個3周的時間,就本人一人負責,由於在這之前對接過另外一個公司介面,我已經搭建好了整體架構和提供給app端介面了,因此主要還是對接某公司介面而已,至於細節上的東西改改後臺系統,調調數據格式應該就差不多了;就本人開發的熟練度來講一周時間基本能搞定,其他剩餘時間就測試,喝喝茶,學習一下;誰知。。。由於介面方說明文檔不全,介面幾乎是每位技術負責一兩個介面(沒錯這就是大公司,分得就這麼細),而且有疑問通過qq咨詢時響應慢(可能別人大公司的人就是忙),就這樣來到第一周的星期五,從app測試結果和對接介面幾乎都完成的情況來看還是不錯的(我的方式對接一個介面就嵌入到業務中,所以可以直接拿app測試),誰知第二周的時候,也就是本周星期二我在測試多人下單出現了異常,隨後聯繫對方,結果被告知對接的這個下單介面不是最新的,但是除此之外其他幾個介面都是最新的,最新的下單介面我們等一段時間才上線,等上線了在對接吧;來到此時我只能無語(誰叫您們是大公司呢),純屬浪費我對接和咨詢的“熱情”;

部署前的準備

來到這裡就開始進入正題了,首先要準備ubuntu系統(後面我會單獨寫一篇怎麼在OracleVM中安裝ubuntu和註意事項),這裡我是16.04-x64版本,為什麼我重點寫明版本號呢,因為我在官網直接下載最新的Jexus包後,盡然運行不起來,後來在善友兄文章中找到了個地址,安裝試運行後是可以的也同樣標記的是最新版,只不過後面帶了個64位的標記,這是一個悲催的天;

我們還需要一個.netcore程式,為了測試方便我這裡創建的是一個api程式,並且api的action裡面這樣修改了下:

1 [HttpGet]
2         public IEnumerable<string> Get()
3         {
4             return new string[] {$"這個站點是:{Request.Host.Host}:{Request.Host.Port}" };
5         }

輸出當前應用程式對應的ip和埠,因為在後面為了更好的測試以及區分;這裡也簡單改造了下Program.cs中的代碼,同樣也是為了方便測試:

 1  public static void Main(string[] args)
 2         {
 3             var builder = new WebHostBuilder()
 4                 .UseKestrel();
 5             //參數指定埠
 6             builder = args.Length > 0 ? builder.UseUrls(args[0]) : builder;
 7             var host = builder.UseContentRoot(Directory.GetCurrentDirectory())
 8                   .UseIISIntegration()
 9                   .UseStartup<Startup>()
10                   .UseApplicationInsights()
11                   .Build();
12             host.Run();
13         }

改完代碼後,需要生成運行包,怎麼生成這裡就不講了,有興趣的朋友可以去看這裡Asp.NetCore1.1版本沒了project.json,這樣來生成跨平臺包;然後通過多種方式把程式包傳到虛擬機上,這裡我通過共用目錄的方式傳遞的,如果有朋友需要以後有機會分享吧;

再來剩下的就是在ubuntu中使用Jexus web server服務了,為了我虛擬機空間著想,這裡我是在tmp中操作的,主要以下步驟,打開終端:

1. cd /tmp(進入臨時目錄)

2. wget linuxdot.net/down/jexus-5.8.2-x64.tar.gz(下載jexus文件包)

3. tar zxvf jexus-5.8.2-x64.tar.gz(解壓到當前目錄,無需安裝)

4. chmod o+w /tmp/jexus/siteconf(為了方便設置jexus文件夾中的siteconf配置文件夾可以直接操作)

5. chmod o+w /tmp/jexus/siteconf/default(設置預設配置default文件可直接通過打開文件方式修改 註:本人不喜歡通過命令來修改,才有此步驟)

6. cd jexus(進入jexus目錄  註:由於如果按照我步驟操作的話這樣可以直接進入jexus目錄,實際jexus目錄在 cd /tmp/jexus)

7. ./jws start(測試jexus是否能正常運行,就我寫本篇博客的時候第一次執行這命令返回的結果是:Failure,原因是我沒用root許可權執行命令,改成root執行命令就行了,怎麼root以後有機會再講)

 

Jexus web server開始部署.NetCore

首先直接通過點擊文件夾的方式進入如下目錄(您也可以通過終端進入,個人喜好便捷):/tmp/jexus/siteconf;能夠看到名稱問default的文件,此文件在安裝時是非root許可權只讀的,由於我們在上面使用命令:chmod o+w /tmp/jexus/siteconf/default設置了運行其他許可權的用戶都能修改內容,所以這裡我直接改,其他信息暫時不改動,只需要增加apphost節點:

1 port=80
2 root=/ /var/www/default
3 hosts=*    #OR your.com,*.your.com
4 #增加apphost節點
5 AppHost={CmdLine=dotnet /home/wangrudong003/netcore/publish01/T_Jexus.dll;AppRoot=/home/wangrudong003/netcore/publish01;Port=5000}

增加apphost節點的幾個屬性說明:

CmdLine:執行命令(熟悉一點.netcore運行的朋友可能知道,.netcore運行命令可以這樣:dotnet xxx.dll這樣就能跑起來程式了,同理可以看成一樣的,但是需要指定應用程式具體目錄,這裡我的是 /home/wangrudong003/netcore/publish01 )
AppRoot:表示應用程式的目錄,這裡我的是 /home/wangrudong003/netcore/publish01
Port:監聽埠;

 

jexus註意點(大家可以去這裡詳細瞭解:https://www.linuxdot.net/bbsfile-3084):
port=80:表示通過jexus來監聽80埠,以此來訪問我們的  /home/wangrudong003/netcore/publish01/T_Jexus.dll  程式
root=/ /var/www/default:指定的虛擬目錄

最後root許可權進入cd /tmp/jesux目錄,然後開啟服務:./jws start  ;如果不出意外的話,您也能夠看到如下截圖信息:

然後咋們來通過80埠訪問以下我們部署的介面(這裡我ubuntu伺服器的ip是172.16.9.66):http://172.16.9.66/api/values,訪問成功的截圖:

 

分析一下AppHost配置中的Port是否起作用

有上圖測試我們看到了通過80埠能正常訪問我們的介面站點,現在我們通過linux命令,查看下伺服器上所監聽的埠,查看tcp監聽埠命令: sudo netstat -lntp ,能投得到如圖:

由圖能夠看出來jexus服務監聽的80埠,dotnet命令執行的5000埠;為了更好的測試apphost的port的作用,我們需要把default文件中的port為5000埠改成5001來測試,改完之後的配置:

1 AppHost={CmdLine=dotnet /home/wangrudong003/netcore/publish01/T_Jexus.dll;AppRoot=/home/wangrudong003/netcore/publish01;Port=5001}

然後需要重啟jexus服務,通過如下命令: ./jws restart :

重啟完之後,我們又來訪問:http://172.16.9.66/api/values,這個時候就訪問不了介面了:

儘管我們的jexus伺服器是ok狀態,但是介面已經無法訪問了,那麼我們再來看看監聽的埠:

埠圖對比分析

這張和之前埠截圖對比,能夠發現dotnet執行的還是5000埠,和我們修改配置文件的port:5001不能對應,這有點奇怪,就這點能夠讓我們大膽猜想jexus的這個port埠設置沒有效果;而最後5000埠應該還是dotnet自帶的預設埠;

疑問

然而又讓我們奇怪的是,如果5000埠運行沒問題,那麼為什麼jexus公佈出去的80埠無法訪問api介面能,我們又來大膽猜想,是不是由於我們設置的jexus的port:5001埠也真實監聽的5000不對應造成的呢?為了測試我們再一次修改下AppHost的配置信息:

AppHost={CmdLine=dotnet /home/wangrudong003/netcore/publish01/T_Jexus.dll http://127.0.0.1:5001;AppRoot=/home/wangrudong003/netcore/publish01;Port=5001}

這次我們按照netcore的命令格式:dotnet xxx.dll http://127.0.0.1:5001來設置下netcore監聽的埠,這也就是為什麼開篇部分我修改Program.cs中代碼的原因,一切為了測試猜想;同樣修改完後,我們執行jexus服務的命令:./jws restart ;命令執行ok有,先來訪問下80埠的介面:

此時能夠正常訪問咋們的介面了,那最好需要驗證的就是看看監聽埠了:

第二幅與第三幅埠圖大比拼分析

通過上面第三方圖能夠看到netcore程式此時綁定的是5001埠,這個時候由jexus開放出去的80埠也能正常訪問咋們的介面了,那說明我們在jexus的defaut文件中的apphost節點中的port:5001必須要與dotnetcore自身監聽的埠一致,沒錯一致;假如jexus的埠是8080,那麼netcore監聽的埠也必須是8080,這樣咋們通過jexus開放出來的地址才能正常的訪問;好了到這裡本篇分享文章就結束了,希望能給您帶來好的幫助,也希望大家多多點贊推薦,謝謝!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 去官網找到合適的版本,可以直接下載下來,再用fxp上傳,也可以直接以下麵這種方式下載:$ wget http://download.redis.io/releases/redis-3.2.9.tar.gz $ tar xzf redis-3.2.9.tar.gz $ cd redis-3.2.9 $ ...
  • error: unrecognized command line option ‘-fuse-ld=gold’ linux qt5 ...
  • 本文目錄: 12.1 配置定時任務 12.2 crontab file 12.3 crond命令的調試 12.4 精確到秒的任務計劃 12.1 配置定時任務 首先需弄清的概念: (1).crond是一個daemon類程式,路徑為/usr/sbin/crond。預設會以後臺方式啟動,service或s ...
  • 本文目錄: 11.1 服務的概念 11.2 管理獨立守護進程 11.3 管理服務的開機自啟動 11.4 管理xinetd及相關瞬時守護進程 11.5 CentOS 7上管理服務 CentOS 7和CentOS 6管理服務的方式完全不同。本文先說明CentOS 6上的管理方式,在最後列出CentOS ...
  • 說明:為表述方便,待填的表為【表A】,資料庫的表稱為【表B】。該工具可以快捷地從【表B】中提取相關數據到【表A】,順序和列可自定義。 使用方法:1、打開【ExcelGetFromB.exe】(如要打開示例則根據文字提示跳過步驟2)2、打開【表A】和【表B】(如果打開2個以上Excel表,需要在【設置 ...
  • 本文目錄: 10.1 /proc的意義及說明 10.2 查看進程信息 10.2.1 pstree命令 10.2.2 ps命令 10.2.3 ps後grep問題 10.2.4 top、htop以及iftop命令 10.3 vmstat命令 10.4 iostat命令 10.5 sar命令 10.5.1 ...
  • 本文目錄: 9.1 進程的簡單說明 9.11 進程和程式的區別 9.12 多任務和cpu時間片 9.13 父子進程及創建進程的方式 9.14 進程的狀態 9.15 舉例分析進程狀態轉換過程 9.16 進程結構和子shell 9.2 job任務 9.3 終端和進程的關係 9.4 信號 9.41 需知道 ...
  • 學習網址:http://c.biancheng.net/cpp/html/2728.html 1.在當前目錄下添加多重文件夾: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...