國產化進程一直在推進,以前Windows系列的開發部署模式,也要有所改動了。
.NET Core也退出來了,奈何不支持WebForm啊,只能是MVC。
於是需要找到一種可以在Linux下運行ASP.NET的方式。
跟度娘聊了會兒,說到了今天的主角Jexus。
目錄
-
Jexus閃亮登場
Jexus以支持ASP.NET、Core、php在Linux上運行爲特色,能夠支持ASP.NET的原理,就是在Linux上安裝了Mono(跨平臺.NET運行環境),進而支持ASP.NET程序的運行。
獨立版(專業版)自帶Mono環境,省去了自己在Linux上安裝Mono的繁雜步驟,安裝獨立版的Jexus很簡單,一個命令就搞定了。這裏再插一句,要搞這些操作,首先你需要一個Linux環境,我是用VMWare做的CentOS 7.0的虛機Linux系統。可以從阿里雲的鏡像服務器直接下載相應的ISO文件,然後就可以做虛機了。
以下是官網首頁的說明:
Jexus獨立版(專業版)的安裝
Jexus“獨立版”指的是自帶.net運行時(mono),不需要在客戶服務器安裝mono就能正常運行的Jexus版本,該版本只支持 64位Linux操作系統。
-
Jexus安裝、啓動
安裝jexus獨立版的命令是:
curl https://jexus.org/release/x64/install.sh|sudo sh
注:運行安裝命令,需要操作者有root權限。
安裝幾分鐘就搞定了。
默認安裝在/usr/Jexus下
命令行:首先cd到Jexus目錄下
然後:./jws start
即可啓動服務。
也可以設置爲自動啓動,一開始我是問的度娘,給的方法也可以實現,就是比較麻煩些,見:https://blog.csdn.net/fwj380891124/article/details/52587861
問了下Linux專業交流羣(值得加入的收費羣,後面幾個問題都是羣裏大神幫助解決的),有簡單方法:
在/etc/rc.local 中,添加一行: /usr/jexus/jws start
意思差不多,都是在系統啓動的時候,可以直接Jexus的啓動Start
啓動後,其實就可以訪問了:http://localhost/info
-
Jexus網站配置
接下來就是配置自己的網站了。
在Jexus安裝目錄/usr/Jexus下,有個jsw.conf文件定義了Jexus的基本配置信息,可以不用管
再有個文件夾siteconf,這個是關鍵,所有的網站配置信息都在這裏了,默認有個default,可以設置網站程序的端口、路徑、主機名的。詳細的說明官網都有的。
默認的網站程序文件放在/var/www下,一個網站再新建一個子文件夾(注意這個www是自己手動新建的,默認沒有的)
注意:修改了上述siteconf下的網站配置文件後,重啓jexus纔會生效(restart)
正常,這麼配置以後就可以正常訪問我們的系統,看到熟悉的界面了。
不過我在搞的時候遇到了幾個問題,正好在這裏說下。
1、提示dll不存在,加載文件失敗
根據錯誤提示,應該是在web.config中註冊了這個提示錯誤的dll,一開始我是從我的win10電腦拷貝到bin下還是報錯,拷貝到mono下的目錄也不行,不知這傢伙的運行原理;
解決:看了下,應該這個dll其他地方也沒調用,直接web.config直接去掉,這個問題是過去了
2、繼續訪問,提示不存在xx.Global
這個就是程序下的Global.asax頁面,存在的啊
這裏想不明白,於是消費¥5進了Jexus交流羣(官網可以看到羣號),錯誤貼出來後,大佬一針見血發現問題所在:
由於我們的程序之前在IIS下都是部署到網站下的應用程序,所以我在拷貝代碼的時候,是把我的代碼根目錄拷貝到了default下,即:default/mysite下才是我的實際程序文件(bin、頁面這些的)
正是由於這個,導致找相關文件的時候出錯了,還好也可以按照IIS網站下應用程序方式配置,見下:
默認是沒有mySite這一級的,該問題也被滅。
3、繼續,連接數據庫錯誤
程序連接的數據庫在我的Win10上,ping是通的,但是搞不懂爲啥訪問不到。
一開始是按照機器名\實例名方式,後來改爲IP\實例名都不行,又加上,1433(SQL Server默認端口)還是不行
這會23點多,也不好意思在問大佬了,先休息了。
第二天8點繼續搞起,這時候思路清晰了些,應該先確定框架的數據庫訪問模塊有問題還是基本的SQLClient就不支持。
於是寫了個簡單的ASP.NET連接數據庫的程序,放Linux上跑跑看
提示sa登錄失敗,感覺有戲啊!說明可以連通,只是訪問出現問題,連接串改爲IP\實例名,可以了!
再次回到有問題的程序,試着連接串也改爲IP\實例名,竟然可以了!好吧,估計昨晚是想讓我早點休息,注意身體呢。
4、缺少動態加載dll
其實這個時候已經自動跳轉到了login頁,不過由於缺少動態調用的dll報錯了(日誌中也有記錄了),當時發佈版直接拷貝少了2個動態加載的dll了,缺少的dll放上去,好了,初步告成。
-
設置外部訪問
由於防火牆的原因(和Windows下IIS有點類似)默認情況下,Linux虛機部署的程序,只能在內部訪問,外部訪問不到,因爲防火牆將相關端口屏蔽了。
設置方法:https://www.cnblogs.com/fujinliang/p/4218802.html
設置完後,重啓機器,問題解決。
-
已知、未知的問題
不過,由於Linux與Windows文件系統不一樣,關於文件存儲相關的邏輯都得調整的:
Windows下是C盤D盤E盤…這種的,在Linux下沒這個的,直接就是/usr、/var這種的。
其他問題,還是未知,等着我去探索,需要做很多測試的。
補充
1)文件名大小寫敏感(Jexus官網介紹Core就是這樣,爲了保持一致so在Jexus下的ASP.NET也一樣的待遇了)導致 file not found 404
我說一個普通頁面怎麼那麼慢,這傢伙一直掛起等待文件404了。。
受影響的範圍:圖片、css、js、頁面等各種文件路徑,只要有一點不一樣,就404了。
2)aspx頁面動態加載的ascx中控件無法應用APPTheme的樣式,手動寫上CSSClass屬性是可以的
大把大把的修改啊啊啊
後記
這是我第一次實操Linux(大學的時候只是在學校Linux機器上玩過飄過~)
期間關於Linux系統本身、虛機VMTool等都是初步接觸,遇到的些問題也會在後面寫下來。
一句話感覺:如果做Server感覺還是Linux會更好(輕巧不笨重),但是很不習慣各種命令行操作。。。