【題外話】
閑的無聊竟然想嘗試測試自己做的項目在不同作業系統上的效能表現,所以決定試試在Linux上部署Apache和Mono的環境。由於平時很少接觸Linux,所以從網上找了幾篇文章(附在相關連結中)嘗試,部署的過程也並非一帆風順,所以就根據自己在Azure上配置的情況重新進行了整理,希望對很少接觸Linux的同學有所協助。以下所有操作均在Azure上的虛擬機器裡配置,如果在本地或者虛擬機器裡配置,可能首先還需要配置網卡設定等。
【文章索引】
【一、在Ubuntu下安裝Apache】
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裡選擇對應的密鑰才可以串連。
安裝完後可以輸入“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
不知道為什麼,安裝到最後會卡在這個地方
sudo vim /etc/apache2/mods-available/mod_mono.conf
【三、在Ubuntu下部署ASP.NET網站】
在Windows上部署網站可以通過遠端桌面直接把網站或打包好的網站複製過去,在Linux下其實SSH不光可以支援命令列,還可以支援檔案傳輸,我這裡使用免費開源的Filezilla(https://filezilla-project.org/),Filezilla支援FTP和SSH兩種協議,在網站管理器中選擇SFTP協議,然後把登陸類型設定為正常,輸入使用者名稱和密碼即可登入。
然後將需要上傳的網站打包為zip檔案,然後上傳到使用者目錄下(/home/使用者名稱/),然後在命令列中輸入就可以了。
sudo unzip 壓縮檔名.zip -d /var/www
當然,現在用你的瀏覽器訪問你的伺服器位址仍然是“It works”,我們還要刪除index.html就可以了。
sudo rm /var/www/index.html
【四、在openSUSE下的操作】
不同的系統使用不同的軟體包管理程式,SUSE則提供了一個叫zypper的軟體包管理程式,使用也非常方便(這裡使用的openSUSE是Azure上提供的openSUSE 12.3)。
首先是安裝Apache。
sudo zypper install apache2
與Ubuntu安裝過程不同的是,在安裝完成後並沒有啟動Apache的提示。所以還需要手動設定服務自啟動。
sudo systemctl enable apache2.service
sudo systemctl 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/,頁面開啟後如所示:
之後可以像Ubuntu一樣給openSUSE安裝上zip解壓縮工具(sudo zypper install zip),將壓縮檔解壓縮到設定的網站根目錄後即可。之後只需要重啟Apache伺服器後就可以立即訪問ASP.NET網站了:
sudo systemctl restart apache2.service
需要注意的是,這樣完成後不像Ubuntu把很多依賴庫都裝上了,如果按上述命令的話只有以下組件被安裝:
與openSUSE類似,安裝完需要自己手動設定服務自啟動。
sudo chkconfig --levels 235 httpd
然後立即啟動Apache服務。
sudo /etc/init.d/httpd
現在再用瀏覽器訪問伺服器位址就可以正常訪問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:sudo wget http:sudo wget http:jxf libgdiplus-jxf mono-.--.tar.bz2
編譯並安裝libgdiplus。
-/configure --prefix=/usr
-./configure --prefix=/usr
-/configure --prefix=/usr
-/configure --prefix=/usr
然後再修改“/etc/httpd/conf/mod_mono.conf”這個檔案,與Ubuntu上同名的設定檔配置相同。不過由於不像Ubuntu下有現成的設定檔,所以需要在檔案中添加如下兩行,由於安裝的時候自動安裝了2.0和4.0的支援,所以可以將如下的2換為4即可啟用ASP.NET 4.0:
MonoServerPath
sudo cp /etc/httpd/conf/mod_mono.conf /etc/httpd/conf.d/
【六、相關連結】
1、配置linux(apache) + mono 下運行 asp.net:http://www.cnblogs.com/hcl0208/archive/2010/10/25/1860173.html
2、openSUSE上安裝Mono並發布ASP.Net程式:http://www.linuxidc.com/Linux/2011-04/34872.htm
3、CentOS 6.0 安裝 MONO 2.10.8:http://www.cnblogs.com/aquilahkj/archive/2011/11/03/2234380.html
4、Mono環境下不支援中文的解決方案:http://www.cnblogs.com/shanyou/archive/2010/10/08/1846198.html