1. 程式人生 > >搭建Linux+Jexus+MariaDB+ASP.NET[LJMA]環境

搭建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

image

LJMA環境是搭建好了,這其實僅僅是安裝上了軟體而已,而具體的配置還是有很多工作要做的呢?也就是說,您雖然搭建出來了環境,但是如果不會配置細節的東西,相當於沒有任何工作經驗,所以還是多配置Jexus或者ASP.NET。