【題外話】html
閒的無聊居然想嘗試測試本身作的項目在不一樣操做系統上的性能表現,因此決定試試在Linux上部署Apache和Mono的環境。因爲平時不多接觸Linux,因此從網上找了幾篇文章(附在相關連接中)嘗試,部署的過程也並不是一路順風,因此就根據本身在Azure上配置的狀況從新進行了整理,但願對不多接觸Linux的同窗有所幫助。如下全部操做均在Azure上的虛擬機裏配置,若是在本地或者虛擬機裏配置,可能首先還須要配置網卡設置等。linux
【文章索引】c++
Ubuntu Server安裝之後,默認沒有圖形界面,其實在Linux不用圖形界面也很容易就能夠進行配置。在Azure上配置好Ubuntu Server(這裏使用Azure上提供的Ubuntu Server 12.04 LTS,2013/6/24)之後,會自動配置好SSH的22端口,咱們能夠直接使用SSH工具鏈接服務器,這裏使用免費開源的PuTTY(http://www.putty.org/)。若是在Azure上配置的使用密碼鏈接主機則這裏直接輸入地址點擊「Open」便可,若是還上傳了SSH密鑰,則還應在Connection/SSH/Auth裏選擇對應的密鑰才能夠鏈接。apache
鏈接後輸入設置的用戶名和密碼便可登陸Ubuntu系統,會出現以下圖的命令行,咱們所作的幾乎全部工做都是經過命令行操做的。ubuntu
在Ubuntu下安裝軟件其實很是方便,Ubuntu提供了apt-get工具,可使用該工具直接下載安裝軟件。vim
在Linux裏,系統最高權限帳戶爲root帳戶,而默認登陸的帳戶並不是root帳戶,例如不具有安裝程序等權限,不過同Windows同樣都提供了提高權限的方式,就是sudo命令,在執行的每條命令前加上「sudo 」,便可以root帳戶的權限執行。在第一次使用sudo時會要求輸入當前帳戶的密碼,確認後便可在一段時間(默認5分鐘)內使用sudo命令都不須要輸入密碼,一段時間沒有使用後則須要從新輸入密碼。瀏覽器
首先咱們安裝Apache,輸入下列命令,以後會提示是否安裝等,輸入Y繼續。軟件包詳情:http://packages.ubuntu.com/quantal/apache2安全
sudo apt-get install apache2
等待一段時間後,Apache就會自動安裝配置好,這時候能夠配置好Azure上的80端口,配置好後使用瀏覽器訪問服務器的地址能夠看到以下圖的提示,說明安裝成功。服務器
Linux有個開源的.NET運行時,叫作Mono(http://www.mono-project.com/),能夠支持在Linux上運行.NET應用程序。
仍然按上述方法輸入下列命令安裝Mono及C#編譯器,軟件包詳情:http://packages.ubuntu.com/quantal/mono-gmcs
sudo apt-get install mono-gmcs
安裝完後能夠輸入「mono -V」查看安裝的mono的版本(注意V是大寫的),固然也能夠寫個C#的ConsoleApp看看,能夠用下列命令編譯C#代碼。
gmcs test.cs
若是程序沒有問題的話則會生成test.exe,能夠經過以下命令執行。固然也能夠在Windows上編譯好exe文件後複製到Linux上執行也是能夠的。
mono test.exe
接下來根據本身須要的版本選擇安裝Apache對ASP.NET 2.0或者ASP.NET 4.0的支持,mono-apache-server2爲ASP.NET 2.0的支持,mono-apache-server4是ASP.NET 4.0,二者能夠同時存在,切換須要在Apache的配置文件中切換。軟件包詳情:http://packages.ubuntu.com/quantal/mono-apache-server2
sudo apt-get install mono-apache-server2
不知道爲何,安裝到最後會卡在這個地方
只能經過Ctrl+Z強制退出,而後輸入「sudo reboot」重啓服務器,不過Linux服務器很快就能重啓完
以後再安裝Apache的模塊libapache2-mod-mono便可。固然,mono-gmcs、mono-apache-server二、libapache-mod-mono都是能夠一塊兒安裝的,不過要注意mono-apache-server2和libapache-mod-mono的順序,若是mono-apache-server2在libapache-mod-mono以後的話,因爲依賴項的緣由,libapache-mod-mono會如今自動選擇安裝mono-apache-server4。並且,若是一塊兒裝的話,在上述卡住的位置Ctrl+Z重啓後,libapache-mod-mono並無配置完成致使不少操做沒法執行,還須要執行「sudo dpkg --configure -a」這句命令才行。軟件包詳情:http://packages.ubuntu.com/quantal/libapache2-mod-mono
sudo apt-get install libapache2-mod-mono
不過安裝完若是打開網站發現仍是沒法執行,實際上是沒有配置ASP.NET應用程序。雖然如今支持自動配置應用程序,可是仍是須要修改/etc/apache2/mods-available/mod_mono.conf文件。(原文見:http://www.mono-project.com/AutoConfiguration)固然若是你會手動配置應用程序的話也能夠在該文件中手動配置應用程序(下同)。
sudo vim /etc/apache2/mods-available/mod_mono.conf
按鍵盤上的i鍵啓用vim的編輯模式,因爲mono-server2-hosts.conf文件中已經對不少參數進行了配置,因此僅須要按圖中的添加「MonoAutoApplication enabled」一行便可。此外,若是你的網站中還有其餘的文件格式(好比HttpHandler常用.axd),請添加在第一行後邊,另外若是網站默認文件不是index.aspx還須要修改第二行後的文件名。注意,因爲Linux是區分大小寫的,因此切記不要把大小寫搞錯。
若是服務器上還安裝了ASP.NET 4.0的支持(mono-apache-server4),而且須要切換到ASP.NET 4.0,那麼僅須要修改最後一行,將2改成4便可。
修改完後按Ctrl+C結束編輯模式,而後按冒號鍵(:)進入命令模式,輸入w保存文件,而後再次按冒號鍵,再按q鍵退出vim。
最後執行下述命令重啓Apache服務器便可。
sudo /etc/init.d/apache2 restart
在Windows上部署網站能夠經過遠程桌面直接把網站或打包好的網站複製過去,在Linux下其實SSH不光能夠支持命令行,還能夠支持文件傳輸,我這裏使用免費開源的Filezilla(https://filezilla-project.org/),Filezilla支持FTP和SSH兩種協議,在站點管理器中選擇SFTP協議,而後把登錄類型設置爲正常,輸入用戶名和密碼便可登陸。
登陸後默認的路徑爲/home/用戶名/,就跟命令行下默認的目錄一致。Apache的默認路徑在/var/www/,能夠在這之下找到index.html,也就是那個「It works」的網頁。不過這個目錄通常用戶的權限爲沒法寫入,因此沒法將網站直接部署到這個目錄下。固然你能夠在PuTTY下將這個目錄的權限修改後再上傳,不過其實還能夠有更簡單的方式,就是將打包文件上傳到用戶目錄下而後再解壓縮到這個目錄下。
首先安裝zip解壓縮程序,軟件包詳情:http://packages.ubuntu.com/quantal/zip
sudo apt-get install zip
而後將須要上傳的網站打包爲zip文件,而後上傳到用戶目錄下(/home/用戶名/),而後在命令行中輸入就能夠了。
sudo unzip 壓縮文件名.zip -d /var/www
固然,如今用你的瀏覽器訪問你的服務器地址仍然是「It works」,咱們還要刪除index.html就能夠了。
sudo rm /var/www/index.html
不一樣的系統使用不一樣的軟件包管理程序,SUSE則提供了一個叫zypper的軟件包管理程序,使用也很是方便(這裏使用的openSUSE是Azure上提供的openSUSE 12.3)。
首先是安裝Apache。
sudo zypper install apache2
與Ubuntu安裝過程不一樣的是,在安裝完成後並無啓動Apache的提示。因此還須要手動配置服務自啓動。
sudo systemctl enable apache2.service
而後當即啓動Apache。
sudo systemctl start apache2.service
如今用瀏覽器就能夠訪問服務器了。
而後使用zypper安裝Mono了(其中System.Drawing會用到libgdiplus,多語言支持會用到mono-locale-extras,不過即便如此還有部分組件沒有安裝,後邊會說明):
sudo zypper install mod_mono libgdiplus mono-locale-extras
接下來須要配置mod_mono,這裏推薦使用官方提供的http://go-mono.com/config-mod-mono/,頁面打開後以下圖所示:
能夠選擇Virtual Host或者Application兩種模式,第一種能夠根據請求的服務器地址設置ASP.NET網站的根路徑,第二種能夠根據請求的虛擬目錄設置ASP.NET網站的根路徑。除此以外頁面下方還有幾個設置能夠自定義,設置完後選擇頁面下方的Download下載.conf文件,將文件上傳到openSUSE服務器後使用以下命令複製到Apache配置文件夾下:
sudo cp 配置文件名.conf /etc/apache2/conf.d/
以後能夠像Ubuntu同樣給openSUSE安裝上zip解壓縮工具(sudo zypper install zip),將壓縮文件解壓縮到設置的網站根目錄後便可。以後只須要重啓Apache服務器後就能夠當即訪問ASP.NET網站了:
sudo systemctl restart apache2.service
須要注意的是,這樣完成後不像Ubuntu把不少依賴庫都裝上了,若是按上述命令的話只有如下部件被安裝:
因此可能還有不少須要的組件沒有安裝,好比須要鏈接Oracle數據庫時,可能提示找不到System.Data.OracleClient程序集,須要安裝「mono-data-oracle」,到時候能夠根據出現的錯誤再安裝。其實也能夠根據通配符安裝「mono*」,把跟mono有關的都安裝上,不過這樣也會裝不少不須要的組件。
CentOS的軟件管理程序是yum(這裏使用的CentOS是Azure上提供的CentOS 6.3)。
首先仍是安裝Apache。
sudo yum install httpd
與openSUSE相似,安裝完須要本身手動配置服務自啓動。
sudo chkconfig --levels 235 httpd on
而後當即啓動Apache服務。
sudo /etc/init.d/httpd start
如今再用瀏覽器訪問服務器地址就能夠正常訪問Http服務器了。
可是CentOS官方沒有打包好的mono的rpm包,因此比較好的方式是本身編譯。
首先配置好編譯的環境。
sudo yum install gcc gcc-c++ bison pkgconfig glib2-devel gettext make freetype-devel fontconfig-devel libX11-devel libpng-devel libjpeg-devel libtiff-devel giflib-devel libexif-devel cairo-devel httpd-devel
可能會提示須要升級kernel-headers,可是系統可能默認禁止了核心的包,因此若是出現上述命令沒法執行安裝的話,還須要在上一條命令以後附加「 --disableexcludes=main」,即以下的形式。
sudo yum install gcc gcc-c++ bison pkgconfig glib2-devel gettext make freetype-devel fontconfig-devel libX11-devel libpng-devel libjpeg-devel libtiff-devel giflib-devel libexif-devel cairo-devel httpd-devel --disableexcludes=main
若是一切安裝成功,能夠執行下列語句下載須要安裝組件的源碼包並解壓縮。
cd /usr/src/ sudo wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.tar.bz2 sudo wget http://download.mono-project.com/sources/mono/mono-2.10.8.tar.bz2 sudo wget http://download.mono-project.com/sources/xsp/xsp-2.10.tar.bz2 sudo wget http://download.mono-project.com/sources/mod_mono/mod_mono-2.10.tar.bz2 sudo tar jxf libgdiplus-2.10.tar.bz2 sudo tar jxf mono-2.10.8.tar.bz2 sudo tar jxf xsp-2.10.tar.bz2 sudo tar jxf mod_mono-2.10.tar.bz2
編譯並安裝libgdiplus。
cd /usr/src/libgdiplus-2.10 sudo ./configure --prefix=/usr sudo make ; sudo make install
而後編輯/etc/ld.so.conf文件,添加一行「/usr/lib/」,以下圖所示,保存以後再執行以下命令,從而使系統能夠將libgdiplus.dll自動映射到對應的so文件中。(原文見:http://www.mono-project.com/DllNotFoundException)
sudo ldconfig
而後是Mono。
cd /usr/src/mono-2.10.8 sudo ./configure --prefix=/usr sudo make ; sudo make install
接下來安裝xsp。
export PKG_CONFIG_PATH=/usr/lib/pkgconfig cd /usr/src/xsp-2.10 sudo ./configure --prefix=/usr sudo make ; sudo make install
而後安裝mod_mono。
cd /usr/src/mod_mono-2.10 sudo ./configure --prefix=/usr sudo make ; sudo make install
而後再修改「/etc/httpd/conf/mod_mono.conf」這個文件,與Ubuntu上同名的配置文件配置相同。不過因爲不像Ubuntu下有現成的配置文件,因此須要在文件中添加以下兩行,因爲安裝的時候自動安裝了2.0和4.0的支持,因此能夠將以下的2換爲4便可啓用ASP.NET 4.0:
MonoServerPath "/usr/bin/mod-mono-server2" MonoAutoApplication enabled
而後將配置文件複製到Apache的配置文件目錄中:
sudo cp /etc/httpd/conf/mod_mono.conf /etc/httpd/conf.d/
因爲CentOS自帶的SELinux的緣由,使得Apache沒法鏈接到mod-mono-server,因此咱們如今還須要配置SELinux。固然,這裏爲了簡單就僅僅禁用SELinux,有興趣的能夠本身建立安全策略,使mod-mono-server能夠生效。這裏修改/etc/sysconfig/selinux文件。將「SELINUX=enforcing」修改成「SELINUX=permissive」或「SELINUX=disabled」,例以下圖,保存重啓系統便可。
以後就能夠經過SSH將網站打包上傳上去就能夠直接訪問了。不過須要注意的是,CentOS上的Apache默認的根路徑在「/var/www/html」下,固然也能夠在「/etc/httpd/conf/httpd.conf」文件中修改存放網站根目錄的路徑。
一、配置linux(apache) + mono 下運行 asp.net:http://www.cnblogs.com/hcl0208/archive/2010/10/25/1860173.html
二、openSUSE上安裝Mono併發布ASP.Net程序:http://www.linuxidc.com/Linux/2011-04/34872.htm
三、CentOS 6.0 安裝 MONO 2.10.8:http://www.cnblogs.com/aquilahkj/archive/2011/11/03/2234380.html
四、Mono環境下不支持中文的解決方法:http://www.cnblogs.com/shanyou/archive/2010/10/08/1846198.html