1、LAMP架構之分離式拓撲php
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)啓用http對php的支持/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.com和www.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數據庫了,登陸後的效果如圖:
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時很簡單,由於前面已經把文件的屬主和屬組已經更改了,進行對相應的目錄和文件都有寫的權限,只須要要贊成、下一步、全新安裝、填寫相應的數據庫名等,填寫數據庫內容如圖:
3)訪問www.bbs.com
11、安裝Discuz問題集
1)打開網頁缺乏CSS樣式
在安裝以後,發出打開Discuz頁面缺乏CSS樣式,後來通過分析,Discuz在安裝時把全部內容都安裝在PHP服務器了,而Web服務器沒有相應的文件,而生成的文件都是靜態的文件,因此Web服務器找不到相應的文件,效果以下:
經過調用Google Chrome瀏覽器的調試功能F12,發現頁面找不到相應的文件,把PHP服務器相應的文件複製過來就能夠解決問題了。
解決過程
在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的分析,頁面在加載時會使用互聯網上指定的連接;在沒有外網是就是出現加載頁面慢的狀況。
小結:
此架構是有一種的缺點:
1)Web服務器文件缺乏;安裝時有些文件被安裝在PHP服務器而調用去要使用Web服務器上的文件;
2)用戶上傳文件沒法顯示;用戶上傳文件時被放置於PHP服務器,顯示去查找的Web服務器上的文件;
改進方法:
1)Web服務器與PHP服務器站點文件目錄同步使用,如rsync+inotify;
2)使用共享存儲,如NFS;
3) 對程序進行二次開發