1. 程式人生 > >[.Net跨平臺]部署DTCMS到Jexus遇到的問題及解決思路---部署

[.Net跨平臺]部署DTCMS到Jexus遇到的問題及解決思路---部署

嘗試 htm not xshel pil ida 控制 兼容 sts

上一篇我們環境已經準備完成,此時可以部署了,我們就以dtcms作為例子,http://bbs.dtcms.net/forum.php?mod=viewthread&tid=2420&extra=page%3D1,到這裏下載源碼,裏面有文檔和數據庫腳本

用這個項目做例子主要是幫朋友研究的就是這個產品,並且相對來說功能比vs創建的模板網站要多不少,應該會遇到一些問題

1.創建數據庫

  我們需要一個可在虛擬機中訪問到的數據庫服務器,大部分同學本機應該就有數據庫引擎,數據庫創建到本地即可,我這邊由於沒裝,所以使用了一個阿裏雲上的數據庫,執行源碼裏面的腳本即可

2.修改webconfig連接字符串

3.發布網站,根據文檔,我們發布後要把bin目錄下的一些dll拷貝到發布文件的bin目錄下

4.壓縮發布後的文件夾,記得使用zip格式,現在我們遇到的問題就是如何上傳到虛擬機的指定文件夾中

  1)使用xshell連接Linux虛擬機

  2)使用xshell的文件傳輸功能,需要你下載Xftp

技術分享圖片

  3)和普通的ftp軟件差不多,上傳zip文件即可

5.解壓縮zip,我上傳到了/var/www/dtcms文件夾下

cd /var/www/dtcms/ #定位到文件
unzip -o PublishOutput.zip #解壓縮

6.創建網站配置

vi /usr/jexus/siteconf/dtcms #創建文件

#內容
port=8080
root=/ /var/www/dtcms
indexs=index.aspx,index.html

記得增加防火墻配置
7.重啟Jexus

cd /usr/jexus/
./jws restart

8.訪問測試(發現不通)無任何日誌,請求未被網站應用接收,開始嘗試解決問題

1)使用vs創建默認網站模板(webform)部署測試不存在問題

2)創建默認mvc網站模板部署測試不存在問題

3)檢查cms請求處理管道發現cms為了url重寫,采用了自定義的httpModules,因此,嘗試註釋webconfig中httpModules相關配置,共三處

<system.web>
<compilation debug="true" targetFramework="4.0" /> <customErrors mode="Off"/> <!--<httpModules> <add type="DTcms.Web.UI.HttpModule, DTcms.Web.UI" name="HttpModule" /> </httpModules>--> <!--<httpHandlers> <add verb="*" path="templates/main/*.html" type="System.Web.HttpForbiddenHandler" /> </httpHandlers>--> <!-- 文件上傳大小KB--> <httpRuntime requestValidationMode="2.0" maxRequestLength="2097151" executionTimeout="36000" /> </system.web> <system.webServer> <validation validateIntegratedModeConfiguration="false"/> <!--<modules runAllManagedModulesForAllRequests="true"> <add type="DTcms.Web.UI.HttpModule, DTcms.Web.UI" name="HttpModule" /> </modules>--> <security> <requestFiltering> <requestLimits maxAllowedContentLength="2147483647" /> </requestFiltering> </security> </system.webServer>

部署後可以訪問管理後臺

4)由於xml中第三處依賴第一處,因此通過恢復註釋的方法,確認問題出現在

  

<httpHandlers>
      <add verb="*" path="templates/main/*.html" type="System.Web.HttpForbiddenHandler" />
    </httpHandlers>

這個節點功能是定義禁止訪問下載 templates/main/ 下的html模板文件,主要是考慮安全問題,目前還未找到為何影響了Jexus

目前修改為

 <httpHandlers>
      <add verb="*" path="*.html" type="System.Web.HttpNotFoundHandler" />
    </httpHandlers>

解決了問題,但看起來和上面的配置並不等價

還有個解決的方案,可以通過Jexus配置:

  https://www.linuxdot.net/bbsfile-3084
  禁止訪問某文件夾及其子文件夾中的內容
  DenyDirs=網站文件夾路徑的URL路徑,如 “/abcfiles”或 “~/abcfiles”,多個路徑,用英文逗號分開

解決這樣的安全問題

5.url大小寫問題

vi /usr/jexus/jws

  註釋掉export MONO_IOMAP前面的#

目前來說基本功能無問題了,準備生成模板看看url重新有沒有問題,結果發現控制面板-界面管理-站點模板管理 沒有模板記錄,通過代碼分析+記錄日誌發現

\DTcms.Web\admin\settings\templet_list.aspx.cs中的GetInfo方法存在Linux兼容問題,

其實就是路徑的/\問題,windows下就兩種都可以,而Linux只支持/,修改後重新發布,問題解決(目前發現此問題已無法重現)

[.Net跨平臺]部署DTCMS到Jexus遇到的問題及解決思路---部署