本文旨在實踐編譯安裝LAMP環境,搭建Zblog系統,使用Xcache爲PHP加速,分離PHP與Apache Serverphp
LAMP基礎知識html
Linux + Apache + MySQL[MariaDB] + PHP[Perl|Pyton] 是一套基礎的web環境;前端
Apache有2.2版本,和最新的2.4版本,2.4版本支持Event MPM可用做生產環境,在http2.2中有3種MPM,爲不一樣的進程文件,切換須要重啓Apache服務;而2.4中MPM作成了DSO,可動態加載切換;mysql
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目錄並解壓
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
到此,咱們的apache2.4已經所有安裝成功。
1.9 啓用並測試
/usr/local/apache/bin/apachectl start 因爲目前尚未寫入執行腳本,因此這裏咱們直接使用絕對路徑來啓動
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上一樣部署便可
須要說明的是,在咱們架構中一共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;
在122這臺機器上,咱們安裝了MariaDB-client後,進行TCP/IP方式的數據庫鏈接呢!
mysql -h 192.168.1.123 -u root -pzxczxc
至此基本架構已經完成,只須要編譯安裝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
請注意編譯這裏可能會報錯,由於一些組件支持的開啓須要依賴相關包,須要解決依賴關係。如:
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(); ?>
成功能夠訪問!
注意點:
在這裏我遇到一個錯誤,一開始打開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 訪問頁面進行安裝
居然須要用到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
把該目錄下的curl.so拷貝到你php.ini中的extension_dir指向的目錄中,修改php.ini,在最後添加一句extension=curl.so 重啓apache便可咯
1.3 選擇數據庫,此處須要鏈接遠程數據庫
1.4 數據庫信息寫入,完成ZBLOG系統安裝
1.5 訪問測試,一切正常,至此LAMP環境下ZBLOG搭建完畢!
實踐3:使用Xcache,爲PHP加速
默認狀況下,Aapche將動態請求php的交由php引擎來執行,每一次請求都會去從新執行一遍,效率極其低下。而PHP加速器可以緩存這些執行過程,將執行結果緩存到內存中,起到加速php的效果。
加速前,使用ab命令對當前的zblog進行壓力測試
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插件目錄
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,再次進行壓力測試,能夠明顯看出來響應提升不少!