[.Net跨平臺]部署DTCMS到Jexus遇到的問題及解決思路---部署
上一篇我們環境已經準備完成,此時可以部署了,我們就以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遇到的問題及解決思路---部署