編譯安裝LAMP[兩種結合方式]

本文旨在實踐編譯安裝LAMP環境,搭建Zblog系統,使用Xcache爲PHP加速,分離PHP與Apache Server


LAMP基礎知識


  1. Linux + Apache + MySQL[MariaDB] + PHP[Perl|Pyton] 是一套基礎的web環境;

  2. Apache有2.2版本,和最新的2.4版本,2.4版本支持Event MPM可用作生產環境,在http2.2中有3種MPM,爲不同的進程文件,切換需要重啓Apache服務;而2.4中MPM做成了DSO,可動態加載切換;

  3. Apache、MaraiaDB、PHP安裝都不困難,困難的是需要解決協同合作的關係,即不能成爲獨立個體

    <a> Apache要能夠將用戶請求的動態頁面如index.php交由PHP來執行並返回結果;

    <b> PHP能將index.php中數據庫操作的指令正確提交給MariaDB來處理,並返回結果;

    <c> 最終的結果能夠被Apache封裝成報文形式迴應客戶端Browser

4.  Apache和PHP結合的方式有, 參考博文《Apache+PHP3種結合方式》

    <a> CGI方式

    <b> Apache加載動態模塊結合的方式,

    <c> FastCGI方式

5.  PHP和MariaDB結合方式簡單,只需要安裝php-mysql這種插件即可,通過php-mysql插件的函數,在php頁面中使用這種函數即可連接MariaDB數據庫。

6.  Apache2.4需要依賴於apr1.40,apr-tuil1.40


實踐1:Apache+PHP模塊集合,MariaDB獨立安裝


實驗拓撲


步驟1.編譯安裝Apache2.4

1.1 準備編譯環境以及需要用到的包

yum  groupinstall "Development Tools" "Server Platform Development" -y
yum -y install pcre-devel zlib-devel

Apache2.4依賴於apr1.4以上版本,預先下載好apr-1.5.2、apr-util-1.5.4、httpd-2.4.17.tar.gz到/download目錄並解壓

wKioL1YsVmqCYJtHAAFaOs3JOVQ810.jpg

1.2 編譯安裝apr-1.5.2

./configure --prefix=/usr/local/apr
make && make install

1.3 編譯安裝apr-util-1.5.4

./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
make && make install

1.4 創建apache用戶和組,讓web服務進程運行在apache身份避免越權!

 groupadd -r apache
 useradd -r -g apache -s /sbin/nologin -M apache

1.5 編譯安裝httpd2.4

./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --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=all --with-mpm=prefork
make && make install

1.6 編譯參數的相關說明

--prefix指定httpd2.4的安裝路徑
--sysconfdir指定配置文件路徑
--enable-so啓動shared object共享對象
--enable-ssl啓用ssl,藉助於此可以實現HTTPS訪問
--enable-cgi啓用CGI,可以實現CGI腳本執行
--enable-rewrite啓用Rewrite重寫,能夠實現諸如301重定向的功能,以來PCRE包
--with-zlib
啓用zlib壓縮
--with-pcre啓用PCRE
--with-apr指定apr的路徑,httpd2.4依賴apr1.4版本以上,所以要指明
--with-apr-util指定apr-util的路徑,同上
--enable-modules啓用模塊加載
--enable-mpms-shared=allhttp2.4上prefork、worker、event是模塊化的,可以動態加載
--with-mpm=prefork指明默認的httpd2.4 MPM,即運行在prefork模型下


1.7 注意點:

在http2.2上,MPM有prefork、worker、event[測試版],切換不同的MPM模型需要重啓httpd進程,其實本質上不同的MPM對應的進程是不同的底層文件,而http2.4上把3種MPM做成了模塊的形式,可以動態加載實現。

1.8 編輯配置文件/etc/http24/httpd.conf

wKiom1YsXISzH4z4AAG0xF_cSF8840.jpg

到此,我們的apache2.4已經全部安裝成功。

1.9 啓用並測試

/usr/local/apache/bin/apachectl start 
由於目前還沒有寫入執行腳本,所以這裏我們直接使用絕對路徑來啓動

wKioL1YsXWWgqR6MAAGFypctKlc006.jpg

wKiom1YsXduiOEE2AAD6VT5m_yE146.jpg

1.10 注意點:

這裏出現的問題:我這臺虛擬機默認安裝了http2.2,所以當我編譯安裝好http2.4後,我使用service httpd start成功後,發現竟然顯示的是2.2的默認頁面,經過排查後才解決!

1、爲了方便httpd2.4的啓動,我將http24的執行目錄添加到了環境變量

echo "export PATH=/usr/local/mysql/bin:$PATH">>/etc/profile
source /etc/profile
apachectl start

2、啓動時候由於沒有指定ServerName,所以默認使用主機名,解決方法

vi /usr/local/apache/conf
ServerName localhost:80
apachectl restart

步驟2.通用二進制安裝MariaDB

    之前已經部署過,這裏不再贅述,只需要在192.168.1.123上同樣部署即可

    參考《MariaDB二進制安裝及基本管理

    需要說明的是,在我們架構中一共2臺服務器,前端是Apache+PHP Server[192.168.1.122],後端是MariaDB Server[192.168.1.123],這需要前端的PHP通過php-mysql插件中的mysql_connect函數連接到後端的MariaDB Server上的數據庫,而默認MariaDB不允許遠程連接的,此處我們先進行授權吧!

mysql -h localhost -u root -pzxczxc 
MariaDB > GRANT ALL ON *.* to 'root'@'%' identified by 'zxczxc' WITH GRANT OPTION;
MariaDB > FLUSH PRIVILEGES;
MariaDB > SELECT user,host,password FROM mysql.user;

wKiom1YscS_xWDxhAALGiYOVfPA437.jpg

在122這臺機器上,我們安裝了MariaDB-client後,進行TCP/IP方式的數據庫連接呢!

mysql -h 192.168.1.123 -u root -pzxczxc

wKioL1YscciTaIQYAAIpkr3Rogw325.jpg


至此基本架構已經完成,只需要編譯安裝PHP即可!


步驟3.編譯安裝PHP[還是在192.168.1.122這臺服務器上]

值得一提的是:PHP在這套環境中作用是“承上啓下”,

能負責接受和處理Apache提交過來的php請求,這需要apache-php以模塊的方式加載運行;

對於某些php請求需要操作數據庫的,PHP要負責和後端MariaDB Server通信,這需要php-mysql插件;

3.1 準備環境

yum -y groupinstall "Desktop Platform Development" 
yum -y install bzip2-devel libmcrypt-devel
yum -y install xml2

3.2 編譯安裝

wget 
tar -zxvf php-5.5.30.tar.gz
cd php-5.5.30
./configure --prefix=/usr/local/php --with-openssl  --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-bz2 --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   --enable-maintainer-zts --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd
make && make install

請注意編譯這裏可能會報錯,因爲一些組件支持的開啓需要依賴相關包,需要解決依賴關係。如:

wKioL1YsefzztVnRAAEU88R_eDk467.jpg

yum -y install libxml2 libxml2-devel

有時候依賴的包可能需要用到 -devel附包,指定好EPEL源安裝即可!

這裏我總結一下我遇到的幾個問題,附註:我是用的YUM源、EPEL源均爲Aliyun的

Error1

configure: error: xml2-config not found. Please check your libxml2 installation.

解決辦法:

yum -y install libxml2 libxml2-devel

Error2

configure: error: Please reinstall the BZip2 distribution

解決辦法:

yum -y install bzip2 bzip2-devel

Error3

configure: error: mcrypt.h not found. Please reinstall libmcrypt.

解決辦法:

yum -y install libmcrypt libmcrypt libmcrypt-devel

3.4 編譯參數的相關說明

--prefix指定php安裝路徑
--with-openssl啓用OpenSSL
--enable-mbstring
支持大字節字符串
--with-freetype-dir支持freetype,freetype是一個可移植的字體引擎
--with-jpeg-dir支持JPEG
--with-png-dir支持PNG
--with-zlib支持zlib壓縮,依賴於zlib包,有可能需要zlib-devel包
--with-bz2支持bz2壓縮,依賴bz包
--with-libxml-dir=/usr支持libxml,能簡單方便的提供對XML文件的各種操作
--enable-xml啓用xml
--enable-sockets啓用sockets套接字
--with-apxs2=apxs是一個專門用來加載第三方應用模塊的實用程序
--with-mcrypt支持加密
--with-config-file-path設置PHP主配置文件路徑
--with-config-file-scan-dir設置PHP分段式配置文件php.d的位置
--enable-maintainer-zts啓用線程安全,對於prefork而言是不需要的,但是之前編譯httpd2.4裝了3種MPM,爲了支持worker、event的安全,所以啓用

請注意:

如果使用PHP5.3以上版本,爲了鏈接MySQL數據庫,可以指定mysqlnd,這樣在本機就不需要先安裝MySQL或MySQL開發包了。mysqlnd從php 5.3開始可用,可以編譯時綁定到它(而不用和具體的MySQL客戶端庫綁定形成依賴),但從PHP 5.4開始它就是默認設置了。

# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

3.5 提供PHP配置文件

cp php.ini-production /etc/php.ini

3.6 編輯Apache配置文件以支持php,並重啓Apache服務

vim /etc/httpd/httpd.conf
AddType application/x-httpd-php  .php
AddType application/x-httpd-php-source  .phps --->增添對php頁面的支持
<IfModule dir_module>
    DirectoryIndex Index.php index.html       --->修改默認主頁index.php       
</IfModule>

3.7 編輯php測試頁面,驗證Apache+PHP Server和後端MariaDB Server能夠協同工作

<?php
  $link = mysql_connect('192.168.1.123','root','zxczxc');
  if ($link)
      echo "Success...";
  else
      echo "Failure...";

      mysql_close();
?>

成功可以訪問!

wKioL1YsiurgL5m4AAEyDye_BcE046.jpg

注意點:

在這裏我遇到一個錯誤,一開始打開192.168.1.122/mysql.php頁面總是提示網絡連接錯誤,最後排查出來是由於httpd.conf中加載的php_mod使用的絕對路徑modules/libphp5.so,而父目錄/usr/local/apache並不在環境變量中,使用

export PATH=/usr/local/apache:$PATH

即解決問題了。

實踐2:在LAMP環境下搭建一個ZBLOG博客系統


1.1 下載zblog文件解壓縮至網站目錄

cd /usr/local/apache/
tar -xvf zblog.tar

1.2 訪問頁面進行安裝

wKiom1YskEPjqNzDAAKewCiofvE907.jpg

竟然需要用到php-curl,這咋辦?我編譯的時候沒有啓用curl,好在PHP的phpize可以動態的加載插件,省得重新編譯!前提你有源碼包,操作如下:

cd /download/php-5.5.30/ext/curl/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config

wKioL1YskXPxbwY2AAD6EF7BO2Q202.jpg

把該目錄下的curl.so拷貝到你php.ini中的extension_dir指向的目錄中,修改php.ini,在最後添加一句extension=curl.so 重啓apache即可咯


1.3 選擇數據庫,此處需要連接遠程數據庫

wKiom1YslFLCnLyEAAIzavc8Mpg349.jpg

1.4 數據庫信息寫入,完成ZBLOG系統安裝

wKioL1YslJCxGIRZAAEmR-V3YG0864.jpg1.5 訪問測試,一切正常,至此LAMP環境下ZBLOG搭建完畢!

wKioL1Ysltmya5r2AAFPEwsEx8M784.jpg


實踐3:使用Xcache,爲PHP加速


默認情況下,Aapche將動態請求php的交由php引擎來執行,每一次請求都會去重新執行一遍,效率極其低下。而PHP加速器能夠緩存這些執行過程,將執行結果緩存到內存中,起到加速php的效果。


加速前,使用ab命令對當前的zblog進行壓力測試

wKiom1YsnJiw7EGiAALnQp3kRYE351.jpg

1.1 編譯安裝

PHP一個很好的機制在於使用phpize能夠對編譯時未加載的插件進行動態編譯,然後進行簡單的配置即可加載該php插件,而省去了重新編譯php的時間!非常方便。

tar xf xcache-3.2.0.tar.gz
cd xcache-3.2.0
/usr/local/php/bin/phpize         ---->phpize是執行命令,
./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
make && make install

1.2 安裝結束後,給出了編譯後的php插件目錄

wKioL1YsmpqwPKp-AAEG0vfT_xk187.jpg


1.3 編輯php.ini,整合PHP和Xcache

mkdir /etc/php.d
cp /download/xcache-3.2.0/xcache.ini /etc/php.d
vi /etc/php.d/xcache.ini
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20121212/xcache.so

1.4 重啓apache,再次進行壓力測試,可以明顯看出來響應提高很多!

wKioL1YsnLLCBV1oAALbjm1acTs524.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章