LAMP平臺詳述

#######################################php

LAMP平臺相關組件功能簡述css

編譯安裝LAMP平臺html

編譯安裝LAMP之以FastCGI方式與php整合mysql

使用ab命令進行壓力測試linux

#######################################LAMP平臺相關組件功能簡述
web

1、httpdsql

   做爲一款web服務器自己它僅能處理靜態請求和內容,例如:html、css、圖片等……apache

2、php編程

   PHP是腳本編程語言,php解析器,其內部的Zend引擎將執行分爲兩段:vim

   第一段:詞法分析、語法分析

           用戶第一次訪問PHP頁面時候動態編譯爲opcode

   第二段:執行opcode。

3、xcache

   每一個用戶請求php都會生成一個進程用於處理和迴應,因爲進程之間沒法共享opcode,opcode在內存空間中,因此當進程消亡時opcode會隨之丟失,在實際生成環境中有大量用戶請求目標是徹底相同的,若是每一個請求都須要動態生成opcode這不只是一種巨大的資源浪費也會延長對用戶請求的響應時間,所以爲了使進程之間能共享opcode,引用緩存器例如:APC、eAccelerator、XCache。

4、php如何與mysql進行交互

   php解釋器(模塊)自己僅具有解釋php腳本的功能,真正跟mysql交互的是PHP程序,由此程序驅動訪問mysql(php53-mysql)。

5、httpd與php的交互方式

   CGI,這種方式把php直接編譯成httpd的模塊,每一個httpd請求進程對應一個php(cgi)進程,httpd動態建立進程須要時間,而且額外的進程會佔用資源開銷,進程間通訊的結果返回httpd進程,httpd負責銷燬進程。由httpd負責子進程的建立和回收。

   PHP_MOD,這種方式php做爲http進程內部模塊運行,須要時候動態加載模塊。

   fastcgi(httpd做爲客戶端想php服務器發起請求,php服務器內部管理和銷燬進程)fpm,監聽在一個套接字上,Daemon進程。



編譯安裝LAMP平臺

1、準備環境、所需軟件包版本、安裝順序。

平臺基於redhat5.8

httpd所需軟件包:

   apr-1.4.6.tar.bz2  

   apr-util-1.4.1.tar.bz2              

   httpd-2.4.3.tar.bz2

mysql所需軟件包:

   mysql-5.5.28-linux2.6-i686.tar.gz(通用二進制格式)

php所需軟件包:

   libmcrypt-2.5.7-5.el5.i386.rpm    

   libmcrypt-devel-2.5.7-5.el5.i386.rpm

   mhash-0.9.2-6.el5.i386.rpm

   mhash-devel-0.9.2-6.el5.i386.rpm

   php-5.4.13.tar.bz2

xcache所需軟件包:

   xcache-2.0.0.tar.bz2

phpMyAdmin所需軟件包:

   phpMyAdmin-3.5.1-all-languages.tar.bz2

安裝順序 httpd --> mysql --> php

2、編譯安裝httpd-2.4.4

一、解決依賴關係

##########################安裝apr##########################
tar xf apr-1.4.6.tar.bz2
./configure --prefix=/usr/local/apr
make && make install
##########################安裝apr-util#####################
tar xf apr-util-1.4.1.tar.bz2
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
##########################安裝pcre-devel###################
yum install pcre-devel

二、編譯安裝httpd-2.4.4

tar xf httpd-2.4.4.tar.bz2
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-rewirte --enable-ssl --enable-cgi --enable-cgid --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
make && make install

三、修改Pid文件的路徑以迎合啓動腳本

vim /etc/httpd/httpd.conf
PidFile "/var/run/httpd.pid" //添加以下行

四、提供SysV服務腳本/etc/rc.d/init.d/httpd,內容以下:

#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve \
#          HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid
# Source function library.
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
stop() {
    echo -n $"Stopping $prog: "
    killproc -p ${pidfile} -d 10 $httpd
    RETVAL=$?
    echo
    [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=$?
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
    fi
    echo
}
# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
        status -p ${pidfile} $httpd
    RETVAL=$?
    ;;
  restart)
    stop
    start
    ;;
  condrestart)
    if [ -f ${pidfile} ] ; then
        stop
        start
    fi
    ;;
  reload)
        reload
    ;;
  graceful|help|configtest|fullstatus)
    $apachectl $@
    RETVAL=$?
    ;;
  *)
    echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
    exit 1
esac
exit $RETVAL

五、爲腳本添加執行權限,開機自動啓動

chmod +x /etc/rc.d/init.d/httpd
chkconfig --add httpd
chkconfig --level 35 httpd on
chkconfig --list httpd

六、爲命令添加搜索路徑

vim /etc/profile.d/httpd.sh
export PATH=$PATH:/usr/local/apache/bin   //加入本行內容

七、修改mpm_module爲prefork、檢查語法並重啓服務

vim /etc/httpd/httpd.conf
#LoadModule mpm_event_module modules/mod_mpm_event.so       註釋
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so    添加
httpd -t                    檢查語法
service httpd restart       重啓服務

至此httpd安裝完成:

3、安裝mysql-5.5.28

一、建立mysql用戶和mysql組

groupadd -r -g 306 mysql
useradd -g 306 -r -u 306 mysql

二、建立連接文件

tar xf mysql-5.5.28-linux2.6-i686.tar.gz  -C /usr/local
cd /usr/local
ln -sv mysql-5.5.28-linux2.6-i686  mysql
chown -R mysql.mysql /usr/local/mysql/*3

三、爲數據目錄建立lvm

fdisk /dev/sdb            略過步驟
partprobe  /dev/sdb       檢測
pvcreate /dev/sdb1        建立物理塊
vgcreate myvg /dev/sdb1   建立卷組
lvcreate -n mydata -L 5G  myvg    建立邏輯卷
lvs
mke2fs -j /dev/myvg/mydata    格式化
mkdir /mydata           
vim /etc/fstab         添加開機自啓動
/dev/myvg/mydata   /mydata    ext3    defaults     0 0
mount -a    掛載
mount
mkdir /mydata/data    建立數據目錄
chown -R mysql.mysql /mydata/data/    修改數據目錄屬主與屬組
chmod o-rx /mydata/data/              修改其餘人對此目錄權限

四、初始化mysql

scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
chown -R root /usr/local/mysql/*

五、添加啓動腳本、主配置文件、命令路徑、庫文件、頭文件

#########################添加啓動腳本########################
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
########################添加主配置文件#######################
cp support-files/my-large.cnf /etc/my.cnf
vim /etc/my.cnf
datadir = /mydata/data   定義數據目錄位置
#########################添加命令############################
vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin    //添加本行內容
########################添加庫文件###########################
echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
########################添加頭文件###########################
ln -sv /usr/local/mysql/include /usr/include/mysql

至此mysql安裝完成:

3、安裝php-5.4.13(php做爲httpd模塊運行)

一、解決依賴

rpm -ivh libmcrypt-2.5.7-5.el5.i386.rpm  libmcrypt-devel-2.5.7-5.el5.i386.rpm  mhash-0.9.2-6.el5.i386.rpm mhash-devel-0.9.2-6.el5.i386.rpm

二、編譯安裝php-5.4.13

tar xf php-5.4.13
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-opensll --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
#--enable-maintainer-zts(event worker基於線程工做類型的時候須要此選項)
make && make install
cp php.ini-production /etc/php.ini  建立配置文件

三、結合php和httpd

vim  /etc/httpd/httpd.conf
DirectoryIndex index.php index.html        //添加index.php
AddType application/x-httpd-php .php        //添加本行內容
AddType application/x-httpd-php-source .phps //添加本行內容

四、測試php是否正常工做

vim /usr/local/apache/htdocs/index.php
<?php
        phpinfo();
?>

五、測試php是否能正常訪問mysql

<?php
        $conn=mysql_connect('localhost','root','');
        if($conn)
                echo "Success....";
        else
                echo "Failure....";
?>

4、編譯安裝xcache-2.0.0

一、編譯安裝xcache

tar xf xcache-2.0.0.bz2
cd xcacge
/usr/local/php/bin/phpize  準備好php擴展編譯以備編譯,讓擴展自己識別php
./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
make && make install

2整合php和xcache

mkdir /etc/php.d
cp xcache.ini /etc/php.d
vim /etc/php.d/xcache.ini
zend_extension =  /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so   複製安裝完成的內容後加xcache.so

重啓httpd,至此xcache安裝完成:

5、httpd2.4.4虛擬主機配置

1、中心主機和虛擬主機不能共存

註釋中心主機
#DocumentRoot "/usr/local/apache/htdocs"
開啓虛擬主機選項
# Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf

2、建立虛擬主機 vim /etc/httpd/extra/httpd-vhosts.conf

<VirtualHost *:80>
    ServerName www.soulboy.com   
    DocumentRoot "/www/soulboy.com"
    <Directory "/www/soulboy.com">    如不聲明目錄權限則默認拒絕
        Options none   
        AllowOverride none
        Require all granted
    </Directory>
    ErrorLog "/var/log/httpd/soulboy.com-error_log"
    CustomLog "/var/log/httpd/soulgirl.com-error_log" combined
</VirtualHost>
<VirtualHost *:80>
    ServerName www.soulgirl.com
    DocumentRoot "/www/soulgirl.com"
    <Directory "/www/soulgirl.com">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
    ErrorLog "/var/log/httpd/soulgirl.com-error_log"
    CustomLog "/var/log/httpd/soulgirl.com-error_log" common
</VirtualHost>

3、測試虛擬主機是否生效

5、部署phpMyAdmin-3.5.1

1、加壓到虛擬主機目錄並從新修改目錄名,並建立和修改配置文件

tar xf phpMyAdmin-3.5.1-all-languages.tar.bz2/ -C /www/soulgirl.com
cd /www/soulgirl.com
mv phpMyAdmin-3.5.1-all-languages / pma       修改目錄名方便訪問
cd pma
cp config.sample.inc.php config.inc.php       建立配置文件
penssl rand -base64 10        生成10位的隨機數
vim config.inc.php            把生成的隨機數複製到配置文件中
$cfg['blowfish_secret'] = 'QkMTw3ZlpJlBKA'

2、修改mysql用戶密碼

mysqladmin -uroot password 'redhat'

3、測試phpMyAdmin部署是否正常

至此說明php和httpd工做正常:

至此說明mysql工做正常:


編譯安裝LAMP之以FastCGI方式與php整合

1、編譯安裝httpd-2.4.4

安裝步驟同上

2、mysql-5.6.10

安裝步驟同上

3、編譯安裝php-5.4.13

1、解決依賴關係

yum -y groupinstall "X Software Development"
rpm -ivh libmcrypt-2.5.7-5.el5.i386.rpm libmcrypt-devel-2.5.7-5.el5.i386.rpm mhash-0.9.9-1.el5.centos.i386.rpm mhash-devel-0.9.9-1.el5.centos.i386.rpm

2、編譯安裝php-5.4.13

tar xf php-5.4.13.tar.bz2
cd php-5.4.13
./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 --enable-fpm --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2
make
make intall
cp php.ini-production /etc/php.ini    爲php提供配置文件:

3、配置php-fpm

###################爲php-fpm添加腳本#######################
cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm
chmod +x /etc/rc.d/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
##################爲php-fpm提供配置文件####################
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
######################編輯php-fpm的配置文件################
# vim /usr/local/php/etc/php-fpm.conf
配置fpm的相關選項爲你所須要的值,並啓用pid文件(以下最後一行):
pm.max_children = 50            最大進程數
pm.start_servers = 5            啓動後建立空閒進程數
pm.min_spare_servers = 5        最小空閒進程數
pm.max_spare_servers = 8        最大空閒進程數
pid = /usr/local/php/var/run/php-fpm.pid     PidFile路徑
#################啓動php-fpm##############################
service php-fpm start
ps aux | grep php-fpm
netstat -tnlp | grep php-fpm
默認狀況下,fpm監聽在127.0.0.1的9000端口,也可使用以下命令驗正其是否已經監聽在相應的套接字。

4、配置httpd-2.4.4

1、配置php-fpm

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
    在Apache httpd 2.4之後已經專門有一個模塊針對FastCGI的實現,此模塊爲mod_proxy_fcgi.so,它實際上是做爲mod_proxy.so模塊的擴充,所以,這兩個模塊都要加載2

2、配置httpd識別php頁面

vim /etc/httpd/httpd.conf
一、添加以下二行
   AddType application/x-httpd-php  .php
   AddType application/x-httpd-php-source  .phps
二、定位至DirectoryIndex index.html
   修改成:
    DirectoryIndex  index.php  index.html
三、註釋中心主機
    #DocumentRoot "/usr/local/apache/htdocs"
四、刪除註釋,開啓支持虛擬主機功能
    # Virtual hosts
    Include /etc/httpd/extra/httpd-vhosts.conf

3、配置虛擬主機支持使用fcgi

ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1

4、配置虛擬主機支持fastcgi

<VirtualHost *:80>
    DocumentRoot "/www/soulboy"
    ServerName www.soulboy.com
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/www/soulboy/$1
    <Directory "/www/soulboy">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
    ErrorLog "logs/dummy-host.example.com-error_log"
    CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>

5、測試以上配置是否正常

<h1>www.soulboy.com</h1>
<?php
 $conn=mysql_connect('localhost','root','redhat');
        if($conn)
                echo "Success....";
        else
                echo "Failure....";
 phpinfo();
?>

至此說明一切正常:

5、編譯安裝xcache-3.0.1

tar xf xcache-3.0.1.tar.bz2
cd xcache-3.0.1
/usr/local/php/bin/phpize
./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
make && make install
mkdir /etc/php.d/
cp xcache.ini /etc/php.d/
service php-fpm restart


使用ab命令進行壓力測試

1、安裝xcache以前

ab -c 100 -n 1000 http://www.soulboy.com/pma/index.php

2、安裝xcache以後(以一樣的併發量測試)

ab -c 100 -n 1000 http://www.soulboy.com/pma/index.php


總結:xcache做用尤其明顯,大大節約了資源的浪費。

相關文章
相關標籤/搜索