LAMP架構之分離式-php-fpm


1、LAMP架構之分離式拓撲php


wKioL1VKIweCgeCOAAqTmH2wcT4425.bmp

 

2、架構說明html


  當客戶端訪問Web服務器時,Web服務器根據客戶端訪問的資源進行判斷,若是是靜態的頁面Web服務器就直接返回給給客戶端,若是是動態的頁面,Web服務器就請求PHP服務器進行解析,在解析過程有須要MySQL數據的PHP服務器就請求MySQL服務器,PHP服務器解析完後封裝發送給Web服務器,Webt器在封裝發送給客戶端。node

 

3、架構規劃mysql


主機 網卡1 網卡2 備註
客戶端 172.16.9.6 - -
Web服務器 172.16.9.21 10.0.9.21 提供Web服務
PHP服務器 10.0.9.31 10.0.9.41 提供PHP程序解析
MySQL服務器 10.0.9.51 - 提供MySQL服務


4、LAMP程序包版本linux

apr-1.5.0.tar.bz2
apr-util-1.5.3.tar.bz2
httpd-2.4.10.tar.bz2
mariadb-5.5.43-linux-x86_64.tar.gz
php-5.6.4.tar.xz
phpMyAdmin-4.0.5-all-languages.zip
Discuz_X3.2_SC_UTF8.zip

 

5、準備安裝開發環境web

yum groupinstall  "Server Platform Development"  "Development tools" -y
yum install pcre-devel -y
yum install bzip2-devel libmcrypt-devel -y
yum install libxml2-devel -y

 

6、Web服務器上安裝httpd服務程序sql


1)安裝httpd程序依賴apr程序包數據庫

tar xf apr-1.5.0.tar.bz2
cd apr-1.5.0
./configure --prefix=/usr/local/apr
make && make install

2)安裝httpd程序依賴apr-util程序包apache

tar xf apr-util-1.5.3.tar.bz2
 cdapr-util-1.5.3
 ./configure --prefix=/usr/local/apr-util--with-apr=/usr/local/apr/
 make&& make install

3)安裝http程序包vim

[root@node-2 httpd-2.4.10]#useradd -r bbs
[root@node-2 httpd-2.4.10]# ./configure--prefix=/usr/local/apache-2.4.10 \
--sysconfdir=/etc/apache24 --with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/ --enable-so--enable-ssl \
--enable-cgi --enable-rewrite --with-zlib --with-pcre--enable-modules=most \
--enable-mpms-shared=all --with-mpm=prefork  --user=bbs
[root@node-2 httpd-2.4.10]# make &&make install

4)建立apahce軟連接

[root@node-2 ~]# ln -s/usr/local/apache-2.4.10/ /usr/local/apache
[root@node-2 ~]# ll /usr/local/apache
lrwxrwxrwx 1 root root 25 May  3 11:27 /usr/local/apache ->/usr/local/apache-2.4.10/

5)提供服務腳本/etc/rc.d/init.d/httpd

修改httpd的配置文件中指定pid文件存放路徑

   PidFile"/var/run/httpd.pid"

服務腳本經過複製系統原有的httpd服務腳本,在此基礎上進行簡單的修改,修改的內容以下:

[root@node-2 ~]# cp/etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd24
    apachectl=/usr/local/apache/bin/apachectl
    httpd=${HTTPD-/usr/local/apache/bin/httpd}

添加到開機自啓動服務中:

[root@node-2 ~]# chkconfig --add httpd24
[root@node-2 ~]# chkconfig httpd24 on

6)設置httpd環境變量

[root@node-2 httpd-2.4.10]# vim/etc/profile.d/httpd.sh
         PATH=/usr/local/apache/bin/:$PATH
[root@node-2 httpd-2.4.10]# ./etc/profile.d/httpd.sh

7)啓用http的相關php-fpm模塊/etc/apache24/httpd.conf

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

LoadModule proxy_modulemodules/mod_proxy.so
LoadModule proxy_fcgi_modulemodules/mod_proxy_fcgi.so

9)啓用httpphp的支持/etc/apache24/httpd.conf  

 AddType application/x-httpd-php .php
 AddType application/x-httpd-php-source .phps
 DirectoryIndex index.php index.html

10)提供httpd虛擬機爲www.blog.comwww.phpmysql.com

修改/etc/apache24/httpd.conf的配置文件,開啓虛擬文件:

#DocumentRoot "/usr/local/apache-2.4.10/htdocs"
Include/etc/apache24/extra/httpd-vhosts.conf

在編輯/etc/apache24/extra/httpd-vhost.conf文件,內容以下:

<VirtualHost *:80>
   ServerAdmin admin@bbs.com
   DocumentRoot "/web/discuz"
   ServerName www.bbs.com
   ServerAlias bbs.com
   ErrorLog "logs/bbs.com-error_log"
   CustomLog "logs/bbs.com-access_log" combined
   ProxyRequests Off
   ProxyPassMatch ^/(.*\.php)$ fcgi://10.0.9.31:9000/web/discuz/$1
   <Directory "/web/discuz">
     AllowOverride None
     Options None
      Require all granted
  </Directory>
</VirtualHost>
 
<VirtualHost *:80>
   ServerAdmin admin@phpmysql.com
   DocumentRoot "/web/pma"
   ServerName www.phpmysql.com
   ServerAlias phpmysql.com
   ErrorLog "logs/phpmysql.com-error_log"
   CustomLog "logs/phpmysql.com-access_log" combined
   ProxyRequests Off
   ProxyPassMatch ^/(.*\.php)$ fcgi://10.0.9.31:9000/web/pma/$1
   <Directory "/web/pma">
     AllowOverride None
     Options None
     Require all granted
   </Directory>
</VirtualHost>

11)啓用httpd服務

service httpd24 start

 

7、MySQL服務器上安裝MariaDb數據庫


1)建立MariaDB運行的用戶

[root@mysql ~]# groupadd -r mysql
[root@mysql ~]# useradd -r -g mysql mysql

2)建立數據庫存放目錄並設置屬主、屬組

[root@mysql ~]# mkdir /data/mysql -p
[root@mysql ~]# chown -R  mysql.mysql /data/mysql/

3)解壓MariaDB程序包到/usr/local目錄下

[root@mysql tools]# tar xfmariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local/

4)建立軟連接

[root@ mysql tools]# cd /usr/local/
[root@ mysql local]# ln -smariadb-5.5.43-linux-x86_64/ mysql

5)初始化數據庫

[root@ mysql local]# cd mysql
[root@ mysql mysql]# chown -R  root.mysql ./*
[root@ mysql mysql]#scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql

6)提供MySQL的主配置文件

[root@ mysql mysql]# mkdir /etc/mysql
[root@ mysql mysql]# cpsupport-files/my-large.cnf /etc/mysql/my.cnf

7)編輯/etc/mysql/my.cnf配置文件

/etc/mysql/my.cnf配置文件中在[mysqld]標籤中添加數據庫存放目錄。

datadir = /data/mysql

8)爲MySQL提供服務腳本

[root@ mysql mysql]# cpsupport-files/mysql.server /etc/rc.d/init.d/mysqld
[root@ mysql mysql]# chmod +x/etc/rc.d/init.d/mysqld
[root@ mysql mysql]# chkconfig --add mysqld
[root@ mysql mysql]# chkconfig mysqld on

9)設置mysql命令的環境變量

[root@ mysql mysql]# vim/etc/profile.d/mysql.sh
    PATH=/usr/local/mysql/bin:$PATH
[root@ mysql mysql]# ./etc/profile.d/mysql.sh

10)設置mysql命令的man幫助手冊

/etc/man.cnf中添加以下一行 

   MANPATH/usr/local/mysql/man

11)導出mysql頭文件至/usr/include

[root@ mysql mysql]# ln -s/usr/local/mysql/include/mysql/ /usr/include/

12)輸出MySQL庫文件

[root@ mysql mysql]# echo '/usr/local/mysql/lib'> /etc/ld.so.conf.d/mysql.conf
[root@ mysql mysql]# ldconfig

12)添加用於BBS的數據庫和設置管理MySQL的用戶名和密碼

MariaDB [(none)]> CREATE DATABASE bbs;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT ALL ON bbs.* TO'userbbs'@'10.%.%.%' IDENTIFIED BY 'bbspass';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL ON *.* TO'root'@'10.%.%.%' IDENTIFIED BY 'bbspass';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

8、PHP服務器上安裝PHP程序


建立php的運行用戶bbs

useradd -r bbs

1)編譯安裝php

tar xf php-5.6.4.tar.xz
cd php-5.6.4
./configure--prefix=/usr/local/php5.6.4 --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/php \
--with-config-file-scan-dir=/etc/php/php.d --with-bz2  --user=bbs
make && make install

2)爲/usr/local/php-5.6.4建立軟連接

[root@node-3 php-5.6.4]# ln -s/usr/local/php5.6.4/ /usr/local/php
[root@node-3 php-5.6.4]# ll /usr/local/php
lrwxrwxrwx 1 root root 20 May  3 18:42 /usr/local/php ->/usr/local/php5.6.4/

3)爲PHP提供配置文件

[root@node-3 php-5.6.4]# mkdir -p/etc/php/php.d/
[root@node-3 php-5.6.4]# cpphp.ini-development /etc/php/php.ini

4)配置php-fpm

[root@node-3 php-5.6.4]# cpsapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@node-3 php-5.6.4]# chmod +x/etc/rc.d/init.d/php-fpm
[root@node-3 php-5.6.4]# chkconfig --addphp-fpm
[root@node-3 php-5.6.4]# chkconfig php-fpmon

5)爲php-fpm提供配置文件

[root@node-3 php-5.6.4]# cp /usr/local/php5.6.4/etc/php-fpm.conf.default  /usr/local/php5.6.4/etc/php-fpm.conf

6)編輯php-fpm配置文件/etc/local/php/etc/php-fpm.conf

pid = /usr/local/php/var/run/php-fpm.pid
listen = 10.0.9.31:9000
pm.max_children = 60
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 8

6)啓動php-fpm

[root@node-3 pma]# service php-fpm start
Starting php-fpm  done

 

9、安裝和配置phpMyAdmin程序


1)分別在Web服務器上和PHP服務器解壓PHPMyAdmin程序

  在解壓完以後,把PHPMyAdmin複製至/web/pma目錄中,若是你看懂PHPMyAdmin的程序是能夠把動態的面面放PHP服務器,靜態的頁面放在Web服務器的,這樣能夠實現動靜的分離。

# mkdir /web/
# unzip phpMyAdmin-4.0.5-all-languages.zip
# mv phpMyAdmin-4.0.5-all-languages/web/pma

2)修復PHP服務器中的PHPMyAdmin的數據庫鏈接文件

# cd /web/pma
# cp config.sample.inc.php config.inc.php
# vim config.inc.php

 $cfg['Servers'][$i]['host']= 'localhost';更改成:

$cfg['Servers'][$i]['host'] = '10.0.9.51';

3)編輯本地電腦上hosts文件

編輯本地電腦上hosts文件,以實現解析域名的目的,內容以下:

172.16.9.21 www.bbs.com
172.16.9.21 www.phpmysql.com

4)在瀏覽器訪問

在瀏覽器訪問www.phpmysql.com,出現登陸界面,根據在數據庫的受權登陸數據庫,登陸後就能夠輕鬆的管理MySQL數據庫了,登陸後的效果如圖:

wKioL1VKI7HyjC6cAA4nWL0sN9w188.bmp

 

10、安裝和配置Discuz程序


  安裝Discuz程序須要在Web服務器和PHP服務器都要有程序,靜態的內容的Web服務器將調用本地的文件,php頁面就將交給PHP服務器來進行解析完成。

1)解壓Discuz程序包

# unzip Discuz_X3.2_SC_UTF8.zip
# mv upload/ /web/discuz

2)更改Discuz文件的屬主和屬組

[root@http discuz]# chown -R  bbs.bbs ./*

2)安裝Discuz程序

安裝Discuz時很簡單,由於前面已經把文件的屬主和屬組已經更改了,進行對相應的目錄和文件都有寫的權限,只須要要贊成、下一步、全新安裝、填寫相應的數據庫名等,填寫數據庫內容如圖:

wKiom1VKImrRLUOtAAvOPMol8b8963.bmp

3)訪問www.bbs.com

wKiom1VKIrbD9fLSAA318NN_3wM052.bmp

 

11、安裝Discuz問題集


1)打開網頁缺乏CSS樣式

  在安裝以後,發出打開Discuz頁面缺乏CSS樣式,後來通過分析,Discuz在安裝時把全部內容都安裝在PHP服務器了,而Web服務器沒有相應的文件,而生成的文件都是靜態的文件,因此Web服務器找不到相應的文件,效果以下:

wKiom1VKIunBU1M3AAw5SO8ZveI570.bmp

 

經過調用Google Chrome瀏覽器的調試功能F12,發現頁面找不到相應的文件,把PHP服務器相應的文件複製過來就能夠解決問題了。

 

wKioL1VKJJHRUwxqAAtCQI0reYQ907.bmp

 

解決過程

PHP服務器打包cache目錄中的文件

[root@php discuz]# cd data/
[root@php data]# tar jcf cache.tar.gzcache/
[root@php data]# scp cache.tar.gz172.16.9.21:/web/discuz/data/
root@172.16.9.21's password:
cache.tar.gz                    100%  32KB  32.3KB/s   00:00

Web服務器中解壓cache目錄

[root@http discuz]# cd data/
[root@http data]# rm -fr cache
[root@http data]# tar xf cache.tar.gz

 

2)網頁頁面加載慢

  在實驗環境中,客戶端在沒有與互聯網連網時,只有內網的環境中,就會出現網頁頁面加載很慢,但在有外網的環境網頁頁面加載就會很快,後來通過使用HttpWatch的分析,頁面在加載時會使用互聯網上指定的連接;在沒有外網是就是出現加載頁面慢的狀況。

wKioL1VKJLbi7Sn9AAvGAPlReIk271.bmp

 

小結:

此架構是有一種的缺點:

   1Web服務器文件缺乏;安裝時有些文件被安裝在PHP服務器而調用去要使用Web服務器上的文件;

   2)用戶上傳文件沒法顯示;用戶上傳文件時被放置於PHP服務器,顯示去查找的Web服務器上的文件;

改進方法:

   1Web服務器與PHP服務器站點文件目錄同步使用,如rsync+inotify;

   2)使用共享存儲,如NFS;

   3) 對程序進行二次開發

相關文章
相關標籤/搜索