之前寫過一篇相關的文章:在.NET Core之前,實現.Net跨平台之Mono+CentOS+Jexus初體驗
當時的部署還是比較繁瑣的,而且需要聯網下載各種東西..有興趣的可以看看,但是..已經過時了..
雖然已經出了.NET Core2.0 但是目前是預覽版本,而且部署來說 相對比較麻煩.
今天我們主要來講講目前的Jexus5.8.2的獨立版本和過程中遇到的一些小坑
部署系統環境:CentOS 6.5 64位(無外網)
部署Web應用所用技術:MVC5+EF6.1.3+Autofac
數據庫:SQL Server 2008R2(注意:數據庫並不在Linux上部署而是在一台Windows Server上)
參考資料:
https://www.linuxdot.net/bbsfile-4330
Jexus - ASP.NET跨平台從這里開始!(Jexus官網)
Jexus5.8.2的獨立版所支持的系統:Centos 6.6以上版本,ubuntu server 14.04以上.(ps:我Centos 6.5..也成功了..目前沒問題.)
這里說明一下為什么要用獨立版本.
1.部署方便快捷(這是一開始沒想到的..)
2.沒外網,無法下載相關資源(這是重點..)
好了,廢話不多說 我們開始部署過程:
一、下載 jexus獨立版的包:
因為我沒有外網,所以直接本地下載,然后拷貝到部署系統
下載地址:https://www.linuxdot.net/down/jexus-5.8.2-x64.tar.gz
二、解壓下載的包:
新手提示:記得進入你壓縮包所在的文件夾在解壓..
tar -zxvf jexus-5.8.2-x64.tar.gz
你會得到一個叫jexus的文件夾
(然后就大功告成了!!,意不意外,驚不驚喜,刺不刺激?..)
↓向下看..↓向下看..↓向下看..
三、移動文件所在的位置到利於自己維護的地方:
上面確實沒忽悠,解壓完了 就真完成了..
不過為了咱以后維護方便...還是繼續..
官方建議是移動到/usr文件夾下..嗯 我也就隨大流了..
命令:
sudo mv jexus /usr
清理原來的文件,(當然..你用Xftp什么之類的可視化工具清除和復制..都行.., 這里用命令我是想是裝個B..)
sudo rm -rf /tmp/jexus*
四、創建目錄,部署Web站點:
於jexus的默認的網站配置文件指向的物理路徑是/var/www/default這里的.. (當然,你也可以改)
所以,我們在/var下創建www文件夾,在www下創建default文件夾
然后復制我們發布的文件進去,如圖:
五、重啟一下我們的Juexs服務:
進入jexus文件夾
cd /usr/jexus
啟動Jexus:
sudo ./jws start
重啟Jexus:
sudo ./jws restart
六、一些常用的Jexus命令:
啟動:sudo ./jws start 重啟:sudo ./jws restart 停止:sudo ./jws stop 啟動某個網站: sudo start 網站名 重啟某個網站:sudo restart 網站名 停止某個網站:sudo stop 網站名
至此,我們的部署工作就算真正的大功告成了!~
如下:
下面講一下坑和注意事項..
1.錯誤信息:System.IO.FileNotFoundException,Could not find find file 'var/www/default\bin\roslyn\csc.exe'
找不到這個roslyn\csc.exe文件..
嗯..這個東西呢..是VS2015改用roslyn編譯的,新的roslyn編譯器,支持c# 6.0語法。它放到bin里面去是為了支持Asp.NET應用的動態編譯。
我們可以刪除...
進入要項目的nuget引用,刪除如下兩個包:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers
重新編譯即可
這里重新解釋一下,以上是針對Mono5.0以下的版本,Mono5.0已經支持了roslyn編譯器(感謝張善友老師的指導.)
2.AutoFac報錯,信息如下:
..嗯,比較蛋疼,在Autofac注入的時候,報的是我的泛型類型..他竟然不識別..說是非泛型..一口老血噴在屏幕上,,,
解決方案是..我發現.當時為了方便自動注入,我所有的類都繼承了一個空的接口..是非泛型的..包括我這個倉儲也繼承了..
所以在Mono超級無敵的強類型情況下..被認為是非泛型的了 - - ..(注意:.NET是沒有這個問題的可以編譯,可以運行)
刪除這個繼承,手動注入后.問題解決..
3.小驚喜..
之前我那篇文章說過....linux上的文件夾全小寫,你如果有大寫的文件夾比如Js,那么可能就資源加載不出來 ...404... 需要手動改小寫
但是這次我部署了之后,並沒有改..也能加載了..不知道是mono做的好事..還是Jexus..
當然..少了個麻煩當然是很開心的..
這里也解釋一下,Mono有個環境變量叫:MONO_IOMAP,設置它為all的時候,就會支持大小寫..
Jexus的jws文件設置中也有這個選項可以設置.(同樣 感謝張善友老師的指導)