一 LAMMP 是什麼php
L linux ,A Apache,M mysql,M Memcachedhtml
LAMMP 架構圖mysql
Apache 相應回覆用戶html請求linux
FastCGI 把PHP程序執行的結果響應給Apacheweb
Memcache 根據用戶請求的動態網頁,由程序決定是否須要把數據緩存至Memcache服務器中,Memcache是把數據緩存在內存中sql
Mysql 響應用戶查詢寫入數據數據庫
準備環境apache
每一個服務器採用系統centos6.4 x86_64最小化安裝,啓動網卡,修改主機名,關閉SElinux ,關閉防火牆vim
安裝編譯環境centos
yum install vim yum install man yum install ntp yum groupinstall "development tools" "server platform development" "desktop platform development"
apache 主機名 www.daphne.com ip 192.168.200.201
php 主機名 php.daphne.com ip 192.168.200.202
mem 主機名 mem.daphne.com ip 192.168.200.203
mysql 主機名 sql.daphne.com ip 192.168.200.204
二 LAMMP 實現
1 apache安裝
依賴的軟件包 apr-1.4.6.tar.bz2 apr-util-1.5.2.tar.bz2 pcre-devel httpd-2.4.4.tar.bz2
安裝apr
tar xf apr-1.4.6.tar.bz2 cd apr-1.4.6 ./configure --prefix=/usr/local/apr make && make install
安裝apr-util
tar xf apr-util-1.5.2.tar.bz2 cd apr-util-1.5.2 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr make && make install
yum install pcre-devel
安裝httpd
tar xf httpd-2.4.4.tar.bz2 cd httpd-2.4.4 ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl
--enable-cgi --enable-cgid --enable-modules=most --enable-mods-shared=most --enable-rewrite
--with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
--enable-mpms-shared=all --with-mpm=--sysconfdir=/etc/httpd :指定配置文件安裝位置 --enable-so :支持動態共享模塊若是沒有這個模塊PHP將沒法與apache結合工做 --enable-ssl :啓用支持ssl --enable-cgi :支持cgi --enable-rewrite :支持URL重寫 --with-zlib :壓縮庫,在互聯網上傳播時可節約帶寬 --with-apr=/usr/local/apr :指定apr路徑 --with-apr-util=/usr/local/apr-util :指定apr-util路徑 --enable-mpms-shared=all :支持多道處理模塊 --with-mpm= :設定默認的模塊
更改配置文件
cd /etc/httpd/ cp httpd.conf httpd.conf.bak vim httpd.conf PidFile # 定義pid 文件的路徑
提供服務腳本
Vim /etc/init.d/httpd #!/bin/bash # # chkconfig: - 85 15 # description: Apache a World Wide Web server. It used to serve \ . /etc/rc.d/init.d/functions -----讀取函數 [ -f /etc/sysconfig/httpd ]; then . /etc/sysconfig/httpd fi # Start httpd the C locale by . HTTPD_LANG=${HTTPD_LANG-} # This will prevent initlog from swallowing up a pass-phrase prompt # mod_ssl needs a pass-phrase from the user. INITLOG_ARGS=# Set HTTPD=/usr/sbin/httpd.worker /etc/sysconfig/httpd to use a server # with the thread-based 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 -form messages. apachectl=/usr/local/apache/bin/apachectl # -----指定apachectl程序位置 httpd=${HTTPD-/usr/local/apache/bin/httpd} #-------httpd程序位置 prog=httpd pidfile=${PIDFILE-/var/run/httpd.pid} #----若是文件存在就使用存在文件路徑,若是不存在就使用/var/rum/httpd.pid lockfile=${LOCKFILE-/var//subsys/httpd} # --------建立的鎖文件 RETVAL=0 start() { echo -n $LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS #----以$pidfile文件執行httpd 而且使用選項start RETVAL=$? #------定義執行狀態返回值 echo [ $RETVAL = 0 ] && touch ${lockfile} #-----成功時建立鎖文件 $RETVAL } stop() { echo -n $ killproc -p ${pidfile} -d 10 $httpd RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} } reload() { echo -n $ ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/; then RETVAL=$? echo $failure $killproc -p ${pidfile} $httpd -HUP RETVAL=$? fi echo } # See how we were called. start) start ;; stop) stop ;; status) status -p ${pidfile} $httpd RETVAL=$? ;; restart) stop start ;; condrestart) [ -f ${pidfile} ] ; then stop start fi ;; reload) reload ;; graceful|help|configtest|fullstatus) $apachectl RETVAL=$? ;; *) echo $ exit 1 esac exit $RETVAL
chmod u+x /etc/init.d/httpd
設置開機自動啓動
chkconfig --add httpd chkconfig httpd on chkconfig httpd --list httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
啓動apache 測試
service httpd start Starting httpd: AH00558: httpd: Could not reliably determine the serverServerName' directive globally to suppress message [ OK ] 啓動成功 有警告 vim /etc/httpd/httpd.conf ServerName localhost :80 service httpd restart
用瀏覽器訪問一下
顯示 It Works!
爲httpd服務添加環境變量
Vim /etc/profile.d/httpd.sh export PATH=$PATH:/usr/local/apache/bin source /etc/profile.d/httpd.sh httpd -t Syntax OK
二 安裝mysql數據庫
解壓通用二進制軟件包
tar xf mysql-5.5.37-linux2.6-x86_64.tar.gz -C /usr/local cd /usr/local ln -sv mysql-5.5.37-linux2.6-x86_64 msql
創建數據庫文件 生產環境數據庫存放在獨立LVM硬盤上面
mkdir -pv /mydata/data useradd -r mysql chown -R mysql:mysql /mydata/data
創建mysql配置文件
cd /usr/local/mysql cd support-files/ cp my-large.cnf /etc/my.cnf
創建服務腳本
cp mysql.server /etc/rc.d/init.d/mysqld
修改配置文件
Vim /etc/my.cnf thread-concurrency = 4 #cpu物理核心的1-2 倍 datadir= /mydata/data
初始化mysql 腳本
yum install libaio cd /usr/local/mysql scripts/mysql_install_db --user=mysql --datadir=/mydata/data
開機自動啓動mysql
chkconfig --add mysqld chkconfig mysqld on
修改PATH環境變量
cd /etc/profile.d/ vim mysqld.sh export PATH=$PATH:/usr/local/mysql/bin source /etc/profile.d/mysqld.sh
連接頭文件
ln -sv /usr/local/mysql/include /usr/include/mysqld.conf
連接庫文件
cd /etc/ld.so.conf.d/ vim mysqld.conf /usr/local/mysql/lib ldconfig
建立登錄數據庫用戶和密碼
mysql mysql>drop user root@; mysql>drop user root@; mysql>create user root@ identified by ; mysql>flush privileges;
三 安裝PHP
注
若是使用PHP5.3以上版本,爲了連接MySQL數據庫,能夠指定mysqlnd,這樣在本機就不須要先安裝MySQL或MySQL開發包了。mysqlnd從php 5.3開始可用,能夠編譯時綁定到它(而不用和具體的MySQL客戶端庫綁定造成依賴),但從PHP 5.4開始它就是默認設置了。
安裝圖片資源軟件
yum -y install gd gd-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel
安裝libxml 庫
yum -y install libxml2 libxml2-devel
安裝bzip2壓縮庫
yum install -y bzip2 bzip2-devel
安裝mcrypt加密庫
默認yum沒有此安裝包 須要添加epel
yum install libmcrypt libmcrypt-devel
編譯PHP
注 編譯參數--enable-fpm,支持FastCGI PHP模塊,此參數決定是否能把PHP安裝成#FastCGI服務器
--with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd 本機不須要先安裝
mysql 並能夠連接其餘mysql服務器
tar xf php-5.4.19.tar.gz cd php-5.4.19 ./configure --prefix=/usr/local/php --with-openssl --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 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl :讓其可以支持openssl功能 --enable-mbstring :多字節string,支持中文或者是非一個字節可以表示的語言 --with-gd : 支持gd庫 --with-freetpye-dir:支持freetype功能,freetype:自由的可移植的字體庫,能夠實現去引用特定字體的 --with-jpeg-dir:支持jpeg圖片 --with-png-dir:支持png圖片 --with-zlib:互聯網上經常使用的,通用格式的壓縮庫,讓數據文件先壓縮再傳送給客戶端 --with-libxml-dir:xml(擴展標記語言),如今的不少系統在實現數據交互的時候,都要基於xml來實現,因此要php支持xml,而且讓其知道其庫文件所在位置 --enable-sockets:讓php支持基於套接字的通訊 --with-mcrypt:支持加密功能的,額外的加密庫 --with-config-file-path :php配置文件的路徑放在了什麼地方 主配置文件是php.ini --with-config-file-scan :主配置文件的片斷,也是配置文件,這個路徑下以.ini結尾的都是配置文件片斷 --with-bz2 :壓縮庫 --enable-maintainer-zts :這一項的使用取決於apache是什麼類型的,apache使用的是prefork就不須要;若是使用的是event make && make install
提供PHP 配置文件
cd php-5.4.19 cp php.ini-production /etc/php.ini
修改PATH環境變量
cd /etc/profile.d/ vim php-fpm.sh export PATH=$PATH:/usr/local/php/bin source /etc/profile.d/php-fpm.sh
創建php-fpm服務的配置文件
cd /usr/local/php/etc mv php-fpm.conf. php-fpm.conf vim php-fpm.conf listen 192.168.200.202:9000
爲php-fpm創建服務腳本
cd cd php-5.4.19/sapi/fpm cp 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
安裝FastCGI 與 memcached服務連接的軟件
tar xf memcache-2.7.7.tgz cd memcache-2.7.7 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/loca/php/bin/php-config --enable-memcahe
加載memcache.so模塊
mkdir -pv /etc/php.d vim memcache.ini extension=memcache.so service php-fpm restart
安裝FastCGI 加速opcode代碼的軟件
tar xf xcache-3.0.3 /uar/local/php/bin/phpize ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
創建xcache配置文件,加載xcache.so模塊
cp xcache.ini /etc/php.d/ service php-fpm restart
四 memcached服務器的安裝
在此採用 yum 安裝的方式
yum install memcached service memcached start
到此爲止每一個服務器獨立安裝完成,爲使其協同工做,配置以下
1 apache 與 FastCGI
apache服務的設置
vim /etc/httpd/httpd.conf #DocumentRoot #註釋這行 LoadModule proxy_module modules/mod_proxy.so #開啓代理的模塊 LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so#開啓鏈接fastcgi的模塊 Include conf/extra/httpd-vhosts.conf #開啓讓主配置文件載入虛擬主機的配置文件 ############################################################ [root@jie1 ~]# vim /usr/local/apache/conf/extra/httpd-vhosts.conf #####vim /usr/local/apache/conf/extra/httpd-vhosts.conf############ #開啓一個虛擬主機便可 <VirtualHost *:80> DocumentRoot #Apache服務器存放網頁的目錄 ServerName <Directory > AllowOverride None Options None Require all granted </Directory> ProxyRequests Off #關閉代理請求 ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.200.202:9000/web/docs/$1 #把接收客戶端來着php的請求,轉到FastCGI服務器上面去執行,/web/docs是指 #FastCGI服務存放php網頁的目錄 </VirtualHost> ##################################################################### mkdir -pv /web/docs mkdir: created directory `/web
在PHP 服務器上創建於apache 相同架構的網站文件 .php 文件放在PHP服務器上相應目錄便可
PHP 服務器的設置
mkdir -p /web/docs cd /web/docs vim test.php <?php infophp() ?>
測試 http://192.168.200.201/test.php
2 PHP-FPM 鏈接memcached
FastCGI安裝了鏈接memcached的軟件包memcache且把memcache.so模塊裝載到php的配置文件中了,這樣就實現了PH-FPM(FastCGI)鏈接Memcached。
創建測試文件
<?php $mem = new Memcache; $mem->connect("192.168.200.203", 11211) or die("Could not connect"); $version = $mem->getVersion(); echo "Server's version: ".$version."<br/>\n"; $mem->set('hellokey', 'Hello World', 0, 600) or die("Failed to save data at the memcached server"); echo "Store data in the cache (data will expire in 600 seconds)<br/>\n"; $get_result = $mem->get('hellokey'); echo "$get_result is from memcached server."; ?>
3 PHP-FPM 鏈接mysql
PHP-FPM鏈接mysql,在編譯的時候能夠加這三個參數,而後PHP-FPM服務器上也能夠不用安裝mysql也能夠鏈接mysqld服務器。
--with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd
創建測試文件
<?php $link=mysql_connect('192.168.200.204','root','password'); if($link) echo "mysql test success!!"; else echo "mysql test failed!!"; mysql_close(); ?>