LAMP分佈式部署
LAMP分佈式部署是將數據,PHP(python,perl,這裏主要說PHP)和apache分開部署在不同主機上的web架構。PHP以fpm獨立守護進程的方式監聽另一臺apache服務器以fcgi模式發送來的請求的工作模式。
如下圖:
一、環境準備
IP地址如下:
apache服務器 172.16.1.120 172.16.1.150(其中一個接受用戶請求,一個發送動態內容請求到php服務器)
php服務器 172.16.1.160
數據服務器 172.16.1.170
系統環境:
所有系統全部是最小化安裝的centos6.7
# cat/etc/redhat-release CentOS release6.7 (Final) # uname -rm 2.6.32-573.el6.x86_64x86_64 # setenforce 0 # serviceiptables stop
需要準備的軟件包
mariadb-5.5.36-linux-x86_64.tar.gz
Discuz_X3.2_SC_GBK.zip
libiconv-1.9.2.tar.gz
php-5.6.14.tar.gz
apr-1.5.2.tar.gz
apr-util-1.5.4.tar.gz
Discuz_X3.2_SC_GBK.zip
httpd-2.4.16.tar.gz
二、安裝MariaDB數據庫服務器
注:如果是集中式安裝LAMP,應先安裝apache和mysql。因爲php在安裝時需要指定apache和數據庫的路徑。
我們使用MariaDB 5.5.36通用二進制格式安裝。
# mkdir /tools 把安裝程序放到這個目錄下。
1、解壓軟件包:
#tar xzvf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/src/
# ln -sv/usr/src/mariadb-5.5.36-linux-x86_64/ /usr/local/mysql
`/usr/local/mysql'-> `/usr/src/mariadb-5.5.36-linux-x86_64/'
# cd/usr/local/mysql
2、創建mysql用戶和組:
# groupadd -r -g 306mysql
#useradd -r -g 306 -u 306 -s /sbin/nologin -M mysql
3、建立數據目錄並授權:
# mkdir /data/mysql/{data,logs} -pv
mkdir: created directory `/data'
mkdir: created directory `/data/mysql'
mkdir: created directory `/data/mysql/data'
mkdir: created directory `/data/mysql/logs'
# chown -R mysql.mysql /data/mysql/
# chown -R mysql.mysql /usr/local/mysql/
4、建立配置文件目錄並創建配置文件:
# mkdir /etc/mysql
# cp /usr/local/mysql/support-files/my-large.cnf/etc/mysql/my.cnf 主配置文件
# cp/usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld 啓動腳本
5、修改配置主文件:
vim /etc/mysql/my.cnf
添加和修改如下內容:
[mysqld]
port = 3306
socket = /tmp/mysql.sock
datadir = /data/mysql/data
pid_file = /data/mysql/mysql.pid
log-bin = /data/mysql/logs/mysql-bin
log-error = /data/mysql/logs/mysql.err
6、修改啓動腳本:
vim /etc/rc.d/init.d/mysqld
修改如下參數:
basedir=/usr/local/mysql
datadir=/data/mysql/data
# chkconfig mysqld –add
# chkconfig mysqld on
# chmod +x /etc/rc.d/init.d/mysqld
7、初始化數據庫:
#/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/data/--basedir=/usr/local/mysql/ --defaults-extra-file=/etc/mysql/my.cnf
一般看到兩個OK就表示初始化成功了。
8、啓動數據庫並設置數據密碼:
# service mysqld start
Starting MySQL... SUCCESS!
export PATH=$PATH:/usr/local/mysql/bin/
# mysqladmin -u root password ABCabc123
# mysql -u root -pABCabc123
9、到這裏數據庫就安裝完成了。
三、安裝PHP
在172.16.1.160上安裝php服務器.版本選擇PHP5.6.14
# mkdir /tools;cd /tools 創建程序包下載路徑
1、安裝依賴環境:
# cd /etc/yum.repos.d/
# wget http://mirrors.aliyun.com/repo/epel-6.repo
yum install gcc gcc-c++ autoconf automake ncurses-devel libxml2-devel bison make pcre pcre-devel zlib-devel libtool-ldtd-devel libtool flex vim openssl openssl-devel bzip2-devel gmp-devel openldap-devel libxslt* libcurl libcurl-devel libmcrypt libmcrypt-devel -y
# tar xzvf libiconv-1.9.2.tar.gz -C /usr/src/;cd/usr/src/libiconv-1.9.2/
# ./configure --prefix=/usr/local/libiconv
# make && make install
2、開始編譯安裝PHP
# tar xzvf php-5.6.14.tar.gz -C/usr/src/;cd /usr/src/php-5.6.14
# ./configure --prefix=/usr/local/php--with-config-file-path=/etc/php/php.ini --with-config-file-scan-dir=/etc/php.d/--enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir--with-zlib --with-libxml-dir --enable-xml --with-mcrypt --with-bz2--with-openssl --with-curl --with-xsl --with-iconv=/usr/local/libiconv--enable-sockets --enable-short-tags --enable-static --enable-gd-native-ttf--enable-ftp --enable-maintainer-zts --with-mysql=mysqlnd--with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-fpm
# make && make install
fastcgi:php-5.3.3 之後的版本自帶了fpm組件,
fpm組件能把PHP解釋器工作爲守護進程,並提供類似prefork模式的應用,它能夠接收來自前端httpd,http-proxy-fcgi反向代理用戶對動態內容請求至後端的fastcgi server
注意:把php編譯爲fpm工作模式時需要加一個重要的選項 --enable-fpm,而不再使用 -with-apxs2=/usr/local/apache/bin/apxs
3、爲php提供主配置文件
# mkdir /etc/php/etc/php.d
# cp/usr/src/php-5.6.14/php.ini-production /etc/php/php.ini
4、配置和修改php-fpm信息
#cp /usr/src/php-5.6.14/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
# chmod +x /etc/rc.d/init.d/php-fpm
# chkconfig php-fpm --add
# chkconfig php-fpm on
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# vim /usr/local/php/etc/php-fpm.conf
修改php-fpm配置文件,添加和修改如下信息
listen= 192.168.1.160:9000
pm.max_children= 50 ###靜態方式下開啓的php-fpm進程數量
pm.start_servers= 5 ###動態方式下的起始php-fpm進程數量
pm.min_spare_servers= 2 ###動態方式下的最小php-fpm進程數量
pm.max_spare_servers= 8 ###動態方式下的最大php-fpm進程數量
pid =/usr/local/php/var/run/php-fpm.pid ###PID文件路徑
啓動php-fpm
#service php-fpm start
Startingphp-fpm done
到這裏,PHP服務器安裝完成!
四、安裝Apache
mkdir /tools 創建包下載目錄
cd /tools
1、裝依賴環境:
# yum groupinstall "Development Tools" "Server PlatformDevelopment" -y
# yum install pcre-devel zlib-devel –y
2、apr
# tar xzvf apr-1.5.2.tar.gz -C /usr/src/
# cd /usr/src/apr-1.5.2/
# ./configure --prefix=/usr/local/apr
# make&& make install
3、apr-util
# tar xzvf apr-util-1.5.4.tar.gz -C /usr/src/
# cd /usr/src/apr-util-1.5.4/
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
# make && makeinstall
4、安裝 apache
cd /tools
# tar xzvf httpd-2.4.16.tar.gz -C /usr/src/
# cd /usr/src/httpd-2.4.16/
# ./configure --prefix=/usr/local/apache --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-deflate --enable-expires--enable-headers --enable-modules=most --enable-mpms-shared=all--with-mpm=event
# make && make install
編譯參數說明:
--prefix ###安裝路徑
--sysconfdir ###指定配置文件路徑
--with-apr ###指定apr安裝路徑
--with-apr-util ###指定par-util安裝路徑
--enable-so ##DSO兼容,DSO=Dynamic Shared Object,動態共享對象,可實現模塊裝載
--enable-ssl ###支持SSL/TLS,可以實現https訪問
--enable-cgi ###支持CGI腳本
--enable-rewrite ###加入mod_rewrite模塊,支持URL重寫
--with-zilb ###打開zlib庫的支持
--with-pcre ###支持perl的正則表達式
--enable-deflate ###支持網頁壓縮
--enable-expires ###支持HTTP控制,對網站圖片、js、css等內容,提供在客戶端遊覽器緩存
--enable-headers ###允許對HTTP請求頭的控制
--enable-modules=most ###支持大多數模塊
--enable-mpms-shared=all 支持動態加載的MPM模塊
--with-mpm=event #設置默認啓用的MPM模式
★關於MPM模塊的構建:
(1)構建MPM爲靜態模塊
在全部平臺中,MPM都可以構建爲靜態模塊。在構建時選擇一種MPM,鏈接到服務器中。如果要改變MPM,必須重新構建。爲了使用指定的MPM,請在執行 configure腳本時,使用參數 --with-mpm=NAME。NAME是指定的MPM名稱。編譯完成後,可以使用 ./httpd -l 來確定選擇的MPM。此命令會列出編譯到服務器程序中的所有模塊,包括 MPM。
(2)構建 MPM 爲動態模塊
在 Unix或類似平臺中,MPM可以構建爲動態模塊,與其它動態模塊一樣在運行時加載。構建 MPM 爲動態模塊允許通過修改LoadModule指令內容來改變MPM,而不用重新構建服務器程序。在執行configure腳本時,使用--enable-mpms-shared選項即可啓用此特性。當給出的參數爲all時,所有此平臺支持的MPM模塊都會被安裝。還可以在參數中給出模塊列表。默認MPM,可以自動選擇或者在執行configure腳本時通過--with-mpm選項來指定,然後出現在生成的服務器配置文件中。編輯LoadModule指令內容可以選擇不同的MPM。
5、apache用戶和組
# groupadd -r apache
# useradd -r -gapache -s /sbin/nologin -M apache
6、Apache配置文件
# cd/usr/local/apache/conf/
# cp httpd.confhttpd.conf.ori
vim /usrl/local/apache/conf/httpd.conf
1)找到如下模塊並打開
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
2)如下內容
AddTypeapplication/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps
3)修改監聽地址
Listen 192.168.1.120:80
4)註銷DocumentRoot
#DocumentRoot "/usr/local/apache/htdocs"
#<Directory "/usr/local/apache/htdocs">
因爲我們要使用虛擬主機。
5)添加虛擬主機
在文件末尾添加虛擬主機如下:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/data/www/yy"
ServerName www.yy.com
ServerAlias yy.com
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.1.160:9000/data/www/yy/$1
ErrorLog "/usr/local/apache/logs/phpinfo-error_log"
CustomLog "/usr/local/apache/logs/phpinfo-access_log"common
<Directory "/data/www/yy">
AllowOverride None
Options None
Require all granted
</Directory>
6)添加PHP主頁索引index.php
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
7)修改ServerName
ServerName www.yy.com:80
8)戶和組改爲apache
User apache
Group apache
9)創建DocumentRoot目錄
# mkdir /data/www/yy –pv
這條命令要分別在php服務器和apache服務器上都執行。即兩邊都創建這個目錄 。
10)提供索引文件
apache服務器上放置靜態內容
# echo "www.yy.com" >/data/www/yy/index.html
php服務器上放置動態內容
# cat > /data/www/yy/index.php<<EOF
> <?php
> phpinfo();
> ?>
> EOF
7、Apache
#/usr/local/apache/bin/apachectl -t
Syntax OK 語法檢查OK
#/usr/local/apache/bin/apachectl start
# netstat -ntpul| grep 80 檢查端口有沒有啓動
修改測試客戶端的host地址,
在 C:\Windows\System32\drivers\etc\hosts下添加
192.168.1.120 www.yy.com yy.com
使用瀏覽器訪問www.yy.com
到這裏LAMP的分佈式部署就完成了。
需要注意的問題:
動態資源需要放在PHP服務器上,當httpd服務器接收到客戶端瀏覽器請求的是動態頁面內容時,
會把請求發往指定的PHP服務器上處理,但是靜態頁面例如:html、jpg等還是會在httpd服務器上
處理,不然圖片等信息可能就無法顯示,因此在部署網站時,需要把網站的資源分別放在兩邊。
分別在HTTPD服務器和PHP服務器上各自創建同樣路徑的目錄,不然啓動httpd服務時會報錯。
五、實驗搭建discuz
# cd /tools
# wget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_GBK.zip
# mkdir /data/www/discuz
# unzip Discuz_X3.2_SC_GBK.zip -d /data/www/discuz/
以上操作要同時在PHP和apache服務器上都做一次
修改apache服務器添加如下虛擬主機
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/data/www/discuz"
ServerName www.discuz.com
ServerAlias discuz.com
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$fcgi://192.168.1.160:9000/data/www/discuz/$1
ErrorLog "/usr/local/apache/logs/phpinfo-error_log"
CustomLog "/usr/local/apache/logs/phpinfo-access_log"common
<Directory "/data/www/discuz">
AllowOverride None
Options None
Require all granted
</Directory>
</VirtualHost>
回到MariaDB,創建數據庫並授權
#mysql -u root -p
Enterpassword: ===>輸入密碼,前面設置的 ABCabc123
MariaDB[(none)]> create database bbsdb;
QueryOK, 1 row affected (0.00 sec)
MariaDB[(none)]> GRANT ALL ON bbsdb.* TO'bbsAdmin'@'%' IDENTIFIED BY'magelinux';
QueryOK, 0 rows affected (0.02 sec)
MariaDB[(none)]> FLUSH PRIVILEGES;
QueryOK, 0 rows affected (0.00 sec)
MariaDB[(none)]> SHOW DATABASES;
+--------------------+
|Database |
+--------------------+
|information_schema |
| bbsdb |
|mysql |
|performance_schema |
| test |
+--------------------+
5 rowsin set (0.01 sec)
MariaDB[(none)]>
在客戶機添中如下host
192.168.1.120 discuz.com www.discuz.com
在瀏覽器中訪問http://www.discuz.com/upload/install/
後面按提示來即可。由於最小化安裝沒有字符集支持,這裏看到的中文是亂碼。
後面如可提示沒有權限,可把/data/www/discuz目錄設爲777即可。