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

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


LAMP基礎知識html


  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,可動態加載切換;mysql

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

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

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

    <c> 最終的結果可以被Apache封裝成報文形式迴應客戶端Browserapache

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

    <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.二、apr-util-1.5.四、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=all http2.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的默認頁面,通過排查後才解決!

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

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

二、啓動時候因爲沒有指定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

相關文章
相關標籤/搜索