Linux.NET學習手記(1)

來源:互聯網
上載者:User

Linux下面跑.NET程式,聽起來有點瘋狂,不過又是那麼的有前途。Linux作為伺服器,它的優勢是不容置疑的,可以說類Unix系統(Linux、Unix……)天生就是適合做為伺服器的作業系統,它的穩定性、它的高效、它的低成本,這都是Windows所不能媲美的。

不說太多了,我們直接進入我們討論學習的話題吧,這裡推薦幾個Linux.net的學習地點:mono中國,Linux DotNet大本營,jexus Web Server 技術部落格。

同時,這裡也推薦張善友先生的部落格,那裡有很多關於Linux.NET的文章。

本回合,我們主要討論學習:

1、什麼是mono

2、為什麼要用mono

3、如何在Linux中部署一個.NET的運行環境

4、部署時我們需要注意什麼,以及對一些關鍵步驟的解析

1、什麼是mono

關於什麼是mono,我想無論我怎麼說,應該都不會比官方的解釋,或者是百科更加詳細;我這裡就簡單說吧,Java之所以能夠跨平台運作,是依賴與Java的虛擬機器JVM,而.NET之所以只能夠在Windows中跑,同樣是因為.NET運行需要依賴與Framework的Runtime(公用運行時),那如果能夠在Linux同提供適合於.NET運作的環境(包括CLR等),那.NET也可以在Linux中跑起來了,這就是mono了。

 

2、為什麼要使用mono

為什麼使用mono,原因有很多,不過歸結起來,我個人認為以下這是最重要的:

(1)、作為伺服器來說,如果能夠實現一模一樣的功能的,還是主推Linux。為什麼呢?我列舉了幾個執行個體:

  首先,如果伺服器需要打補丁,作為Windows伺服器,你打完補丁之後必須重啟,這一定程度上會對你的業務造成一定程度上的影響

  其次,我們經常會聽到Windows會中毒,特別是作為Web伺服器和郵件伺服器,我們不知道使用者會給我們上傳一些什麼東西上來,相反,我們卻很少會聽到Linux中毒這麼一個說法;這是由於Linux存在著太多的發行版本,不同版本之間編譯後的軟體無法相互調用,因此,如果能夠感染A版本的Linux病毒無法感染B版本的Linux,這在很大程度上削減了病毒的危害性。

  再者,作為伺服器,我們會盡量希望自己的系統更加的輕量化,更加的高效,和更加的穩定;Linux對於我們的要求,都提供了,我們可以定製的安裝軟體和服務,對於一些不必要的服務我們可以直接不安裝(注意,是直接不安裝,而不是安裝之後再關閉),相反,如果採用Windows的話,一上來就啪嗒啪嗒的安裝一大堆軟體和服務,無論你用不用得上,先給你安裝;也許這個可以讓您的伺服器充當更多的角色,但是我們更加希望伺服器能夠做到單一高效而不是面面俱到。

  最後,Linux運行對於硬體的要求比較低,這也是由於Linux拋棄案頭環境(作為伺服器,我們不應該安裝XWindow)和沒有太多不必要的服務所決定的,而Windows則顯得矜貴多了,硬體設定低一點還不一定能夠正常運作。

(2)、從成本考慮:

  一般部署在Windows中的.NET程式都是採用 “Windows Server版本 + IIS +  MS SQLServer” 這確實是.NET的黃金組合,但是,值得遺憾的是,它們都是要收費的,系統要收費,資料庫要收費;作為大企業來說,上千上萬台伺服器,如果都採用這種模式的話,那將是一筆巨額的開銷;對於小公司,資金對於它們來說本就是一個難題,能省下來的基本上都希望省下來,如果放著一個能夠達到相同功能而且免費的模式不用而採取這種付費模式,那太說不過去了。

   而如果我們採用mono,把.NEt部署在Linux中,我們可以採用以下的組合:“Linux + mono + jexus(Apache/nginx + XSP2)+ MySql(PostgerSQL或其他免費資料庫)”,所有的這些無論是否開源(jexus不開源)都是免費的。

  作為老闆,你會選擇哪種呢?  

 

3、mono環境的部署

介紹再多也不過是紙上談兵,實戰才是硬道理。工欲善其事必先利其器,要實操,還必須先要有這個環境,下面進入本回合的重點環節,Mono環境的配置。

網上也有大量關於mono環境搭建的文章,基本上都是搭配以下這兩種類型的mono環境:以免費不開源jexus作為伺服器軟體的mono環境 和 以Apache(或nginx)作為伺服器軟體的mono環境,具體選擇哪款環境讀者可以自由選擇。選擇前者的,可以參考張善友先生的《32和64位的CentOS 6.0下 安裝 Mono 2.10.8 和Jexus 5.0》;而選擇後者的讀者則可以參考《CentOS 6.0 安裝 MONO 2.10.8》。

這裡我們就選擇前者[選擇的原因我打算放到下一回合再來說明]。

版本選擇,均選擇當前所能下載的最新版本(需要下載的可以連結下載):

作業系統:CentOS-6.4-x86_64

libgdiplus:libgdiplus-2.10.9

mono:mono-3.0.7

jexus:jexus-5.2.3(這裡最新版其實是jexus-5.3.0 beta3,不過基於穩定性,我選擇了最新的穩定發行版)

首先,先用Hyper-V虛擬機器安裝好系統,各位讀者也可以選擇用VM機或者其他虛擬機器來安裝作業系統,問題都不大。

裝好Linux系統之後,我們正式的來搭建mono環境,我們把需要的源碼包都上傳到Linux中

(1)、更新系統 yum update   (這裡我就不更新了,因為都是最新版的東西了)

(2)、通過yum安裝編譯mono所需要的庫

 yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettext make libpng-devel libjpeg-devel libtiff-devel libexif-devel giflib-devel libX11-devel freetype-devel fontconfig-devel  cairo-devel
(3)、編譯安裝Libgdiplus

tar jxf libgdiplus-2.10.9.tar.bz2

cd libgdiplus-2.10.9

./configure --prefix=/usr/local/mono/

make && make install

echo "/usr/local/mono/lib" > /etc/ld.so.conf.d/mono.conf

(4)、安裝mono

由於mono比較大,因此解壓和編譯安裝都需要比較長的時間

tar jxf mono-3.0.7.tar.bz2

cd mono-3.0.7

./configure --prefix=/usr/local/mono/

make

make install

ldconfig

echo  PATH=/usr/local/mono/bin:$PATH>>~/.bash_profile

source ~/.bash_profile

執行  “ mono -V ”如果可以看到mono的版本資訊,則表明編譯安裝成功

(5)、安裝jexus

安裝jexus比較簡單,jexus安裝分為全新安裝和升級安裝兩種,由於我們這裡是全新安裝,所以只講全新安裝部分,升級安裝可以閱讀jexus中內建的readme文檔,裡面有詳細介紹。

tar xzf jexus-5.2.3.tar.gz

mv jexus-5.2.3 /usr/local/jexus

cd /usr/local/jexus/

./jws.regsvr

ln -s /usr/local/mono/ /opt/mono

至此,jexus就安裝完畢了

 

輸入操作 “./jws.start”啟動伺服器,輸入網址XXXX/info,得到以下畫面,表明全部安裝成功。

 

4、部署需要注意的事項與解釋

上回合我們只是單純的部署講怎麼部署mono,並沒有對部署mono中每一步的作用做出解釋,很多讀者或許部署完了還不明白到底怎麼回事,因此這回合我們就上回合的操作作出解釋,並瞭解重點需要注意哪些事項。

(1)、部署 libgdiplus 時,執行最後一步是什麼意思?

  上回合中,我們部署 libgdiplus 時執行了一步 “echo "/usr/local/mono/lib" > /etc/ld.so.conf.d/mono.conf”,這一步的作用其實到了部署mono時,執行 ldconfig 才正式的發揮作用。由於我們部署libgdiplus 和mono沒有部署到系統預設的/usr 中,因此系統是不會預設的到我們部署mono的檔案夾中搜尋和讀取裡面的動態庫檔案,這時,我們需要在/etc/ld.so.conf.d/檔案夾中,手動的添加mono動態庫檔案夾的地址,再執行 ldconfig 來讓系統能夠找到我們的動態庫檔案。

(2)、部署mono後,執行 ldconfig 很重要

編譯部署mono之後,我們會得到大量需要載入的動態庫檔案,而這些動態庫檔案,我們再下一步的時候就需要用到,因此需要讓系統重新載入。(如果沒有重新載入,有可能在部署jexus的時候會出現各種各樣的問題)

(3)、部署mono之後,需要把bin目錄的路徑加入到環境變數PATH中

原理跟安裝完jdk之後,需要在環境變數註冊是一樣的。

(4)、部署jexus需要執行註冊

部署jexus的過程相當簡單,只需要解壓,然後把檔案夾拷貝到我們想要它存放的目錄就可以了,不過在此之後,我們需要註冊全域程式集(./jws.regsvr),這個很重要

(5)、為什麼註冊完jexus之後需要添加一個軟連結

事實上,本來這個軟連結是不會寫上來的,因為之前部署mono時,註冊完jexus了,服務就可以正常的跑起來了。但是這次不同,註冊完之後,“./jws.start”之後,服務並沒有起來,執行"./jws.stop"系統報了個notfoundXXX(找不到XXX)。於是用vi隨便開啟了其中的一個指令碼,注意到了如下的代碼:

很明顯,jws指令碼哪裡寫有了尋找mono的搜尋路徑,而恰好,我們部署的mono都不在這幾個路徑中,因此,jexus找不到想要的bin目錄下的檔案,所以就服務起不來或者報了個notfound。這時,我們只要在/opt/mono/ 中(當然Path中的任意一個都行,或者你也可以自己手動的一個一個指令檔添加上mono的目錄路徑)添加一個軟連結,把它連結到我們部署mono的目錄下,jexus就能夠順利的找到想要的檔案。

好了,要講的暫時就這麼多,我們的Linux.NET環境就基本搭建起來了。各位讀者此刻時候有一種躍躍欲試的感覺,如果有,歡迎您馬上行動,紙上得來終覺淺絕知此事必躬行。

此外:由於本人對Linux.NET接觸時間並不太久,手上也沒有比較有效資料,因此很多時候都是採取摸著石頭過河的方式來學習研究,如果在討論學習的過程中有任何錯漏的,歡迎各位讀者能夠指正出來,同時,如果各位讀者有任何的意見或者建議,也歡迎大家提出。

下一回合,我們將討論學習:jexus作為Linux下基於mono的.NET伺服器,其優勢在哪?jexus的配置與特色功能,還有其中的一些注意事項與小技巧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.