天天看點

LAMP環境搭建

lamp

本次搭建環境采用 httpd2.4.4 + mysql-5.5.28 + php-5.4.13編譯安裝完成:

一、編譯安裝apache

1.解決依賴關系

httpd-2.4.4需要較新版本的apr和apr-util,是以需要事先對其進行更新。更新方式有兩種,一種是通過源代碼編譯安裝,一種是直接更新rpm包。這裡選擇使用編譯源碼的方式進行。下載下傳相應的軟體...

(1)編譯安裝apr

<code>#tar xf apr-1.4.6.tar.bz2</code>

<code>#cd apr-1.4.6</code>

<code>#./configure --prefix=/usr/local/apr</code>

<code>#make &amp;&amp; make install</code>

(2)編譯安裝apr-util

<code>#tar xf apr-util-1.5.2.tar.bz2</code>

<code>#cd apr-util-1.5.2</code>

<code>#./configure --prefix =/usr/local/apr-util --with-apr=/usr/local/apr</code>

附:apache官網對APR的介紹

The mission of the Apache Portable Runtime (APR) project is to create and maintain software libraries that provide a predictable and consistent interface to underlying platform-specific implementations. The primary goal is to provide an API to which software developers may code and be assured of predictable if not identical behaviour regardless of the platform on which their software is built, relieving them of the need to code special-case conditions to work around or take advantage of platform-specific deficiencies or features.

(3)httpd-2.4.4編譯過程也要依賴于pcre-devel軟體包,需要事先安裝。此軟體包一般系統自帶,是以,找到安裝即可。

2.編譯安裝httpd-2.4.4

<code>#tar xf httpd-2.4.4.tar.bz2</code>

<code>#cd httpd-2.4.4</code>

<code>#./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=most --with-mpm=event</code>

補充:

(1)建構MPM為靜态子產品

在全部平台中,MPM都可以建構為靜态子產品。在建構時選擇一種MPM,連結到伺服器中。如果要改變MPM,必須重新建構。為了使用指定的MPM,請在執行configure腳本 時,使用參數 --with-mpm=NAME。NAME是指定的MPM名稱。編譯完成後,可以使用 ./httpd -l 來确定選擇的MPM。 此指令會列出編譯到伺服器程式中的所有子產品,包括 MPM。

(2)建構MPM為動态子產品

在Unix或類似平台中,MPM可以建構為動态子產品,與其它動态子產品一樣在運作時加載。 建構 MPM 為動态子產品允許通過修改LoadModule指令内容來改變MPM,而不用重新建構伺服器程式。在執行configure腳本時,使用--enable-mpms-shared選項即可啟用此特性。當給出的參數為all時,所有此平台支援的MPM子產品都會被安裝。還可以在參數中給出子產品清單。預設MPM,可以自動選擇或者在執行configure腳本時通過--with-mpm選項來指定,然後出現在生成的伺服器配置檔案中。編輯LoadModule指令内容可以選擇不同的MPM。

3.修改httpd的主配置檔案,設定其pid檔案的路徑

編輯/etc/httpd/httpd.conf,添加如下行即可:

<code>PidFile “</code><code>/var/run/httpd</code><code>.pid”</code>

4.提供SysV服務腳本/etc/rc.d/init.d/httpd,内容如下:

<code>#!/bin/bash</code>

<code>#</code>

<code># httpd        Startup script for the Apache HTTP Server</code>

<code># chkconfig: - 85 15</code>

<code># description: Apache is a World Wide Web server.  It is used to serve \</code>

<code>#       HTML files and CGI.</code>

<code># processname: httpd</code>

<code># config: /etc/httpd/conf/httpd.conf</code>

<code># config: /etc/sysconfig/httpd</code>

<code># pidfile: /var/run/httpd.pid</code>

<code># Source function library.</code>

<code>. </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/functions</code>

<code>if</code> <code>[ -f </code><code>/etc/sysconfig/httpd</code> <code>]; </code><code>then</code>

<code>        </code><code>. </code><code>/etc/sysconfig/httpd</code>

<code>fi</code>

<code># Start httpd in the C locale by default.</code>

<code>HTTPD_LANG=${HTTPD_LANG-</code><code>"C"</code><code>}</code>

<code># This will prevent initlog from swallowing up a pass-phrase prompt if</code>

<code># mod_ssl needs a pass-phrase from the user.</code>

<code>INITLOG_ARGS=</code><code>""</code>

<code># Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server</code>

<code># with the thread-based "worker" MPM; BE WARNED that some modules may not</code>

<code># work correctly with a thread-based MPM; notably PHP will refuse to start.</code>

<code># Path to the apachectl script, server binary, and short-form for messages.</code>

<code>apachectl=</code><code>/usr/local/apache/bin/apachectl</code>

<code>httpd=${HTTPD-</code><code>/usr/local/apache/bin/httpd</code><code>}</code>

<code>prog=httpd</code>

<code>pidfile=${PIDFILE-</code><code>/var/run/httpd</code><code>.pid}</code>

<code>lockfile=${LOCKFILE-</code><code>/var/lock/subsys/httpd</code><code>}</code>

<code>RETVAL=0</code>

<code>start() {</code>

<code>        </code><code>echo</code> <code>-n $</code><code>"Starting $prog: "</code>

<code>        </code><code>LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS</code>

<code>        </code><code>RETVAL=$?</code>

<code>        </code><code>echo</code>

<code>        </code><code>[ $RETVAL = 0 ] &amp;&amp; </code><code>touch</code> <code>${lockfile}</code>

<code>        </code><code>return</code> <code>$RETVAL</code>

<code>}</code>

<code>stop() {</code>

<code>echo</code> <code>-n $</code><code>"Stopping $prog: "</code>

<code>killproc -p ${pidfile} -d 10 $httpd</code>

<code>RETVAL=$?</code>

<code>echo</code>

<code>[ $RETVAL = 0 ] &amp;&amp; </code><code>rm</code> <code>-f ${lockfile} ${pidfile}</code>

<code>reload() {</code>

<code>    </code><code>echo</code> <code>-n $</code><code>"Reloading $prog: "</code>

<code>    </code><code>if</code> <code>! LANG=$HTTPD_LANG $httpd $OPTIONS -t &gt;&amp;</code><code>/dev/null</code><code>; </code><code>then</code>

<code>        </code><code>echo</code> <code>$</code><code>"not reloading due to configuration syntax error"</code>

<code>        </code><code>failure $</code><code>"not reloading $httpd due to configuration syntax error"</code>

<code>    </code><code>else</code>

<code>        </code><code>killproc -p ${pidfile} $httpd -HUP</code>

<code>    </code><code>fi</code>

<code>    </code><code>echo</code>

<code># See how we were called.</code>

<code>case</code> <code>"$1"</code> <code>in</code>

<code>  </code><code>start)</code>

<code>start</code>

<code>;;</code>

<code>  </code><code>stop)</code>

<code>stop</code>

<code>  </code><code>status)</code>

<code>        </code><code>status -p ${pidfile} $httpd</code>

<code>  </code><code>restart)</code>

<code>  </code><code>condrestart)</code>

<code>if</code> <code>[ -f ${pidfile} ] ; </code><code>then</code>

<code>  </code><code>reload)</code>

<code>        </code><code>reload</code>

<code>  </code><code>graceful|help|configtest|fullstatus)</code>

<code>$apachectl $@</code>

<code>  </code><code>*)</code>

<code>echo</code> <code>$</code><code>"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"</code>

<code>exit</code> <code>1</code>

<code>esac</code>

<code>exit</code> <code>$RETVAL</code>

而後為此腳本賦予執行權限:

<code>#chmod +x /etc/rc.d/init.d/httpd</code>

加入服務清單

<code>#chkconfig --add httpd</code>

接下來就可以啟動服務進行測試了。

二、安裝mysql-5.5.28

1.準備資料存放的檔案系統

建立一個邏輯卷,并将其挂載至特定的目錄即可。這裡不再給出過程。

這裡假定其邏輯卷挂載目錄為/mydata,而後需要建立/mydata/data目錄作為mysql資料的存放目錄。

2.建立使用者已安全方式運作過程:

<code>#groupadd -r mysql </code>

<code>#useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql</code>

<code>#chown -R mysql:mysql /mydata/data</code>

3.安裝并初始化mysql-5.5.28

<code>#tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local</code>

<code>#cd /usr/local/</code>

<code>#ln -sv mysql-5.5.28-linux2.6-i686 mysql</code>

<code>#cd mysql</code>

<code>#chown -R mysql:mysql .</code>

<code>#scripts/mysql_install_db --user=mysql --datadir=/mydata/data</code>

<code>#chown -R root .</code>

4.為mysql提供主配置檔案:

<code>#cd /usr/local/mysql</code>

<code>#cp support-files/my-large.cnf /etc/my.cnf</code>

并修改此檔案中thread_concurrency的值為你的CPU個數乘以2,比如這裡使用如下行:

<code>thread_concurrency=2</code>

另外還需要添加如下行指定mysql資料檔案的存放位置:

<code>datadir=</code><code>/mydata/data</code>

5.為mysql提供sysv服務腳本

<code>#cp support-files/mysql.server /etc/rc.d/init.d/mysqld</code>

添加至服務清單:

<code>#chkconfig --add mysqld</code>

<code>#chkconfig mysqld on</code>

而後就可以啟動服務測試使用了。

為了使用mysql的安裝符合系統使用規範,并将其開發元件導出給系統使用,這裡還需要進行如下步驟:

6.輸出mysql的man手冊至man指令的查找路徑:

編輯/etc/man.config,添加如下行即可:

<code>MANPATH </code><code>/usr/local/mysql/man</code>

7.輸出mysql的頭檔案至系統頭檔案路徑/sr/include:

這可以通過簡單的建立連結實作:

<code>#ln -sv /usr/local/mysql/include  /usr/include/mysql</code>

8.輸出mysql的庫檔案給系統庫查找路徑:

<code>#echo '/usr/local/mysql/lib' &gt; /etc/ld.so.conf.d/mysql.conf</code>

而後讓系統重新載入系統庫:

<code>#ldconfig</code>

9.修改PATH環境變量,讓系統可以使用mysql的相關指令。具體實作過程這裡不再給出。

三、編譯安裝php-5.4.13

1.解決依賴關系:

請配置好yum源後執行如下指令:

<code>#yum -y groupinstall "X Software Development"</code>

如果想讓編譯的php支援mcrypt擴充,需要下載下傳兩個rpm包并安裝:

<code>libmcrypt-2.5.7-5.el5.i386.rpm</code>

<code>libmcrypt-devel-2.5.7-5.el5.i386.rpm</code>

2.編譯安裝php-5.4.13

<code>#tar xf php-5.4.13.tar.bz2</code>

<code>#cd php-5.4.13</code>

<code># ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2  --enable-maintainer-zts</code>

說明:

1.這裡為了支援apache的worker或event這兩個MPM,編譯時使用了--enable-maintainer-zts選項。

2.如果使用php5.3以上版本,為了連接配接MySql資料庫,可以指定mysqlnd,這樣在本機就不需要先安裝MySql或MySql開發包了。mysqlnd從php5.3開始可用,可以編譯時綁定到它(而不用和具體的MySql用戶端綁定形成依賴),但從php5.4開始他就是預設設定了。

<code>#./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd</code>

<code>#make</code>

<code>#make test</code>

<code>#make install</code>

為php提供配置檔案:

<code>#cp php.ini-production /etc/php.ini</code>

3.編輯apache配置檔案httpd.conf,以apache支援php

<code>#vim /etc/httpd/httpd.conf</code>

1.添加如下二行

<code>AddType application</code><code>/x-httpd-php</code>    <code>.php</code>

<code>AddType application</code><code>/x-httpd-php-source</code>    <code>.phps</code>

2.定位至DirectoryIndex    index.html

修改為:

<code>DirectoryIndex    index.php    index.html</code>

而後,重新啟動httpd,或讓其重新載入配置檔案即可測試php是否已經可以正常使用。

四、安裝xcache,為php加速:

1.安裝

<code>#tar xf xcache-3.0.1.tar.gz</code>

<code>#cd xcache-3.0.1</code>

<code>#/usr/local/php/bin/phpize</code>

<code>#./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config</code>

安裝結束時,會出現類似如下行:

<code>Installing shared extensions:     </code><code>/usr/local/php/lib/php/extensions/no-debug-zts-20100525/</code>

2.編輯php.ini,整合php和xcache

首先将xcache提供的樣例配置導入php.ini

<code>#mkdir /etc/php.d</code>

<code>#cp xcache.ini /etc/php.d</code>

說明:xcache.ini檔案在xcache的源碼目錄中。

接下來編輯/etc/php.d/xcache.ini,找到zend_extension開頭的行,修改為如下行:

<code>zend_extension = </code><code>/usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache</code><code>.so</code>

注意:如果php.ini檔案中有多條zend_extension指令行,要確定此新增的行排在第一位。

五、啟用伺服器狀态

mod_status子產品可以讓管理者檢視伺服器的執行狀态,它通過一個HTML頁面展示了目前伺服器的統計資料。這些資料通常包括但不限于:

(1) 處于工作狀态的worker程序數;

(2) 空閑狀态的worker程序數;

(3) 每個worker的狀态,包括此worker已經響應的請求數,及由此worker發送的内容的位元組數;

(4) 目前伺服器總共發送的位元組數;

(5) 伺服器自上次啟動或重新開機以來至目前的時長;

(6) 平均每秒鐘響應的請求數、平均每秒鐘發送的位元組數、平均每個請求所請求内容的位元組數;

啟用狀态頁面的方法很簡單,隻需要在主配置檔案中添加如下内容即可:

<code>&lt;Location </code><code>/server-status</code><code>&gt;</code>

<code>    </code><code>SedHandler server-status</code>

<code>    </code><code>Requir all granted</code>

<code>&lt;</code><code>/Location</code><code>&gt;</code>

需要提醒的是,這裡的狀态資訊不應該被所有人随意通路,是以,應該限制僅允許某些特定位址的用戶端檢視。比如使用Require ip 172.16.0.0/16 來限制僅允許指定網段的主機檢視此頁面。

本文轉自 SoulMio 51CTO部落格,原文連結:http://blog.51cto.com/bovin/1842587,如需轉載請自行聯系原作者