搭建Linux+Jexus+MariaDB+ASP.NET[LJMA]環境
備註:,將我的部落格內容整理成冊,首先會在部落格裡優先發布,後續可能的話整理成電子書,主要從linux的最基礎內容開始進入Linux的Mono開發方面的話題。本文是我整理部落格內容的一篇文章。
LJMA 是Linux+Jexus+MariaDB+ASP.NET的簡寫,其實就是把Jexus, MariaDB以及ASP.NET安裝在Linux系統上,組成一個環境來執行ASP.NET的應用。Jexus是Linux下的基於Mono編寫的WEB服務軟體,而MariaDB是比較小型的資料庫軟體,ASP.NET是由微軟在.NET Framework框架中所提供,開發Web應用程式的類庫,通過Mono我們可以讓他在Linux下執行。
Jexus相比其它Linux系統的WEB伺服器的優勢
一、Jexus直接支援跨平臺的ASP.NET網站和PHP網站,中間無需第三方外掛。
二、Jexus在靜態檔案處理方面同樣擁有非常優秀的效能。
三、Jexus專們針對應用伺服器的需求進行了優化,具有超強的穩定性和不間斷執行能力,其穩健度,絕不亞於其它任何WEB伺服器。
四、Jexus擁有最基礎而關鍵的入侵檢測能力,這是所有其它WEB伺服器所不具備的。
安裝Mono 環境
Mono是一個由Novell公司(由Ximian發起,並由Miguel de lcaza領導的,一個致力於開創.NET在Linux上使用的開源工程。它包含了一個C#語言的編譯器, 一個CLR的執行時,和一組類庫,並實現了 ADO NET和ASP NET。能夠使得開發人員在Linux用C#開發程式。)主持的專案.該專案的目標是建立一系列符合標準ECMA (Ecma-334和Ecma-335)的.Net 工具, 包括C #編譯器和共同語言(CL 即 Common Language)執行平臺(Platform).與微軟的.Net不同, Mono專案不僅可以運行於Windows系統內,還可以運行於Linux, FreeBSD, Unix, Mac OS X和Solaris。
1、系統,安裝編譯環境,為編譯Mono原始碼做準備。
yum –y update
2、安裝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
在執行yum 更新系統的時候可能發生瞭如下錯誤:
--> Running transaction check ---> Package gc.x86_64 0:7.1-10.el6 will be installed ---> Package glibc-headers.x86_64 0:2.12-1.80.el6_3.5 will be installed --> Processing Dependency: kernel-headers >= 2.2.1 for package: glibc-headers-2. 12-1.80.el6_3.5.x86_64 --> Processing Dependency: kernel-headers for package: glibc-headers-2.12-1.80.e l6_3.5.x86_64 --> Finished Dependency Resolution Error: Package: glibc-headers-2.12-1.80.el6_3.5.x86_64 (updates) Requires: kernel-headers Error: Package: glibc-headers-2.12-1.80.el6_3.5.x86_64 (updates) Requires: kernel-headers >= 2.2.1 You could try using --skip-broken to work around the problem ** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows: kernel-2.6.32-220.13.1.el6.x86_64 has missing requires of kernel-firmware >= ('0 ', '2.6.32', '220.13.1.el6')
解決方法:修改檔案vi /etc/yum.conf 將exclude=kernel*前加註釋即可解決,此引數的意思是排除安裝或更新kernel開頭的軟體,而我們安裝gcc需要依賴kernel相關的軟體glibc-headers-2.12-1.80.el6_3.5.x86_64 。
3、Mono需要的GDI+相容API的庫Libgdiplus 支援System.Drawing
cd /usr/local/src/
wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.tar.bz2
tar -jxvf libgdiplus-2.10.tar.bz2
cd libgdiplus-2.10
./configure --prefix=/usr
make
make install
4、原始碼安裝Mono 3.2.3
cd /usr/local/src/
wget http://download.mono-project.com/sources/mono/mono-3.2.3.tar.bz2
tar -jxvf mono-3.2.3.tar.bz2
cd mono-3.2.3
./configure --prefix=/usr
make
make install
輸入 mono -V 如有mono版本資訊,則安裝成功.
[[email protected] mono-3.2.3]$ mono -V
Mono JIT compiler version 3.2.3 (tarball Sat Sep 21 03:52:16 UTC 2013)
Copyright (C) 2002-2012 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: sgen
如果是64位版本的CentOS,在後續安裝好Jexus 5,啟動的時候會發生以下錯誤:
Sender: jws.exe, Sender TypeName: AppDomain
Exception Source: jws, TargetSite Name: A
Message is:
An exception was thrown by the type initializer for Mono.Unix.Native.Stdlib
StackTrace is:
at A.G.A (System.String[] A) [0x00000] in <filename unknown>:0
IsTerminating: True
建議大家在安裝mono後,都 ldconfig一下 。(ldconfig命令的用途,主要是在預設搜尋目錄(/lib和/usr/lib)以及動態庫配置檔案/etc/ld.so.conf內所列的目錄下,搜尋出可共享的動態連結庫(格式如前介紹,lib*.so*),進而創建出動態裝入程式(ld.so)所需的連線和快取檔案.快取檔案預設為/etc/ld.so.cache,此檔案儲存已排好序的動態連結庫名字列表. )
另外有一點也非常重要,要在編譯Mono的是指定安裝到/usr(./configure --prefix=/usr),如果安裝到一個系統根本"不瞭解"的資料夾,僅ldconfig都不行,還要在/etc/ld.so.conf檔案或/etc/ld.so.conf.d 中新增路徑後再 ldconfig才行呢。
安裝Jexus
Jexus Web Server for nux 是一款基於.NET相容環境,運行於Linux/unix作業系統之上,以支援ASP.NET為核心功能的高效能WEB伺服器,用於替換Apache+mod_mono、Nginx+FastCgi 方案執行ASP.NET。Jexus不但具有跨平臺ASP.NET伺服器這樣的標誌性特徵,同時還擁有核心級的安全監控、入侵檢測、URL重寫、無檔案路由等一系列重要功能和專有特性,將在第十九章詳細介紹Jexus。
從5.3.1版本開始,Jexus的安裝過程簡化了,內建了兩個新的指令碼,它們分別是“install”和“upgrade”,對應原來的“安裝”和“升級”,將Jexus的安裝過程自動化了。jexus本身的安裝和升級方式並沒有發生更多的變化,因此對於已經習慣於5.3.1之前版本的使用方式的使用者,你們仍然可以採用之前的安裝方式。
cd /usr/local/src/
wget http://linuxdot.net/down/jexus-5.4.3.tar.gz
tar -zvxf jexus-5.4.3.tar.gz
cd jexus-5.4.3
sudo ./install
安裝完成~!!!在執行install指令碼時,jexus預設是安裝到/usr/jexus/中,如果想安裝到其他目錄,可以在執行該指令碼時增加一個目錄的引數(比如 sudu install /usr/local/jexus/)。對於升級就是執行upgrade指令碼。
啟動jexus 檢查是否正常了
cd /usr/jexus
sudo ./jws start
[[email protected] jexus-5.4.3]$ cd /usr/jexus/
[[email protected] jexus]$ sudo ./jws start
Start ... OK
[[email protected] jexus]$ cat log/jws.log
09-21 06:07:56: * Jexus web server start-up success.
看到了Jexus已經成功啟動的日誌,我們還可以通過瀏覽器來檢查下:http://127.0.0.1/info
安裝MariaDB
MariaDB是一個向後相容、替代MySQL的資料庫伺服器。MariaDB 是一個採用 Maria 儲存引擎的 MySQL 分支版本,是由原來 MySQL 的作者 Michael Widenius 創辦的公司所開發的免費開源的資料庫伺服器。
從原始碼包安裝MariaDB,它的編譯需要很長的時間,推薦通過CentOS的yum方式安裝。
1、在 /etc/yum.repos.d/ 下建立 MariaDB.repo,內容如下:
[[email protected] etc]$ cd /etc/yum.repos.d
[[email protected] yum.repos.d]$ vi MariaDB.repo
# MariaDB 10.0 CentOS repository list - created 2013-08-23 13:08 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
如果是其他的作業系統,可以在這裡找到相關資訊。
2、使用YUM安裝MariaDB
[[email protected] yum.repos.d]$ sudo yum -y install MariaDB-client MariaDB-server MariaDB-devel
3、啟動資料庫
[[email protected] yum.repos.d]$ sudo service mysql start
如果啟動不了,請到 /data/mysql/ 下檢視錯誤日誌,這個日誌通常是主機名.err。
4、修改Root的密碼
[[email protected] yum.repos.d]$ mysqladmin -u root password ‘passwd’
5、配置遠端訪問,MariaDB為了安全起見,預設情況下繫結ip( 127.0.0.1)。
[[email protected] yum.repos.d]$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.0.4-MariaDB MariaDB Server
Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ‘passwd’ WITH GRANT OPTION;
MariaDB [(none)]> flush privileges;
第一句中"%"表示任何主機都可以遠端登入到該伺服器上訪問。如果要限制只有某臺機器可以訪問,將其換成相應的IP即可,如:
GRANT ALL PRIVILEGES ON *.* TO [email protected]"172.168.193.25" IDENTIFIED BY "root";
第二句表示從mysql資料庫的grant表中重新載入許可權資料。因為MySQL把許可權都放在了cache中,所以在做完更改後需要重新載入。
6、如果系統的防火牆開著(or behind a hardware firewall or NAT)你必須放開mysql使用的TCP埠,通常都是3306。
7、大小寫敏感
用root帳號登入後,在/etc/my.cnf 中的[mysqld]後新增新增lower_case_table_names=1,重啟MYSQL服務,這時已設定成功:不區分表名的大小寫;
lower_case_table_names引數詳解:
lower_case_table_names = 0
其中 0:區分大小寫,1:不區分大小寫
測試LJMA是否成功
放一個網站上去測試下,我這裡放個小泥鰍的Mono相容程式碼版本上去,可以從這裡獲取https://github.com/geffzhang/LoachsMono,使用Visual Studio編譯後放到jexus的 default站點所對應的目錄/var/www/default
LJMA環境是搭建好了,這其實僅僅是安裝上了軟體而已,而具體的配置還是有很多工作要做的呢?也就是說,您雖然搭建出來了環境,但是如果不會配置細節的東西,相當於沒有任何工作經驗,所以還是多配置Jexus或者ASP.NET。