基於centos 7部署LNMP動靜分離以及部署Discuz論壇

博文結構
php的概念
部署lnmp
壓力測試
部署
Discuz論壇php

一.php的工做模式

  • 三種工做模式
CGI模式:在這種模式下運行PHP,性能不是很好;
apache模塊:在這種模式下運行PHP,在LAMP平臺部署及應用 就是使用的這種模式,使用apache調用php完成工做;
FastCGI模式:在這種模式下運行PHP,PHP就是一處獨立的進程,全部的PHP子進程都由PHP的一個叫作php-fpm的組件負責管理;
  • FastCGI 工做機制

首選客戶端發起請求,請求通常分爲兩種:一種是靜態請求,能夠直接由Apache響應直接返回客戶端所需資源;另外一種動態請求,其中包含PHP或Perl這種腳本解釋型語言,則由Apache服務器經過fastcgi協議調用php服務器執行並返回給Apache,由Apache向客戶端返回客戶端所需資源,若是這個過程當中涉及到對數據的操做,此時php服務器還會經過mysql協議調用mysql服務器。如圖:html

基於centos 7部署LNMP動靜分離以及部署Discuz論壇

二.部署lnmp動靜分離

  • 案例環境以下:

1臺httpd服務器:192.168.148.129
1臺php服務器:192.168.148.130
1臺mysql服務器:192.168.148.131mysql

[root@localhost ~]# yum -y install libxml2-devel lzip2-devel libcurl-devel  libmcrypt-devel openssl-devel bzip2-devel
  • 安裝libmcrypt
[root@localhost ~]# tar zxf libmcrypt-2.5.7.tar.gz 
[root@localhost ~]# cd libmcrypt-2.5.7/
[root@localhost libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install
  • 編譯安裝 php
[root@localhost ~]# tar zxf php-5.6.27.tar.gz 
[root@localhost ~]# cd php-5.6.27/
[root@localhost php-5.6.27]# /configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd  \
> --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets \
> --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib \
> --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt \
> --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d \
> --with-bz2 --enable-maintainer-zts && make && make install

(安裝過程在15分鐘左右)sql

  • 相關選項的解釋
--prefix=/usr/local/php5.6//安裝位置
--with-mysql=mysqlnd    //支持 mysql 
--with-pdo-mysql=mysqlnd  //支持 pdo 模塊 
-with-mysqli=mysqlnd   //支持 mysqli 模塊 
**注:上面的三選項的做用:數據庫與 php 不在一個服務器上,指定此種方式,安裝數據庫 鏈接驅動 **
--with-openssl   //支持 openssl 模塊
--enable-fpm //支持 fpm 模式 
--enable-sockets //啓用 socket 支持 
--enable-sysvshm//啓用系統共享內存支持 
--enable-mbstring//多字節字串、像咱們的中文就是多字節字串 
--with-freetype-dir//支持 freetype、就要裝 freetype-devel、跟字體相關的、字體解析工具 
--with-jpeg-dir 
--with-png-dir 
注:上面的二選項的做用:處理 jpeg、png 圖片的、php 能夠動態生成 jpeg 圖片 
--with-zlib//是個壓縮庫、在互聯網傳輸時用來壓縮傳輸的 
--with-libxml-dir=/usr//這個 libxml 是用來解析 xml 的、指定/usr 下 
--enable-xml   //支持 xml 的 
--with-mhash//支持 mhash 
--with-mcrypt=/usr/local/libmcrypt //libmcrypt-devel 這個程序包所指定的 
--with-config-file-path=/etc    //指定配置文件的存放路徑的 
--with-config-file-scan-dir=/etc/php.d  //配置文件掃描路徑 
--with-bz2  //支持 BZip2 
爲了支持 apache 的 worker 或 event 這兩個 MPM,編譯時使用了--enable-maintainer-zts 選項 
若是使用 PHP5.3 以上版本,爲了連接 MySQL 數據庫,能夠指定 mysqlnd,這樣在本機就不 須要先安裝 MySQL 或 MySQL 開發包了。mysqlnd 從 php 5.3 開始可用,能夠編譯時綁定到它 (而不用和具體的 MySQL 客戶端庫綁定造成依賴),但從 PHP 5.4 開始它就是默認設置了。 3
  • 提供 php 配置文件

[root@localhost php-5.6.27]# cp php.ini-production /etc/php.ini數據庫

  • 爲 php-fpm 提供腳本
[root@localhost php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@localhost php-5.6.27]# chmod +x /etc/init.d/php-fpm 
[root@localhost php-5.6.27]# chkconfig --add php-fpm
[root@localhost php-5.6.27]# chkconfig php-fpm on
[root@localhost php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
  • 提供 php-fpm 配置文件並編輯
[root@localhost php-5.6.27]# vim /usr/local/php5.6/etc/php-fpm.conf
修改內容以下: 
pid = run/php-fpm.pid 
listen = 192.168.31.141:9000    \\本地ip地址(千萬不能用127.0.0.1)
pm.max_children = 50 
pm.start_servers = 5 
pm.min_spare_servers = 5 
pm.max_spare_servers = 35
  • 啓動 php-fpm 服務
[root@localhost php-5.6.27]# service php-fpm start
Starting php-fpm  done
[root@localhost php-5.6.27]# netstat -anpt | grep php-fpm
tcp        0      0 192.168.148.130:9000    0.0.0.0:*               LISTEN      130988/php-fpm: mas
  • 關閉防火牆或者輸入如下命令:
[root@phpserver ~]# firewall-cmd --permanent --add-port=9000/tcp success [root@phpserver ~]# firewall-cmd --reload Success
  • 在該主機上新建虛擬主機目錄用於存放網頁文件

[root@localhost php-5.6.27]# mkdir -p /var/www/benetapache

配置 apache(切換到 apache 主機上操做) vim

在 Apache2.4 之後已經專門有一個模塊針對 FastCGI 的實現,此模塊爲 mod_proxy_fcgi.so, 它實際上是做爲 mod_proxy.so 模塊的擴充,所以,這兩個模塊都要加載 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
  • 把前面#去掉

[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf centos

基於centos 7部署LNMP動靜分離以及部署Discuz論壇

  • 創建一個目錄做爲虛擬主機的家目錄

[root@localhost ~]# mkdir -p /var/www/benet

  • 編輯主配置文件 httpd.conf,開啓虛擬主機

基於centos 7部署LNMP動靜分離以及部署Discuz論壇

  • 同時定位 AddType;添加讓 apache 能識別 php 格式的頁面
    AddType application/x-httpd-php .php
    基於centos 7部署LNMP動靜分離以及部署Discuz論壇

  • 而且定位至 DirectoryIndex:支持 php 格式的主頁 (在它的中間加index.php)
    基於centos 7部署LNMP動靜分離以及部署Discuz論壇

  • 配置虛擬主機支持使用 fcgi (把原有的刪了添加)
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/extra/httpd-vhosts.conf 
<VirtualHost *:80>
    ServerAdmin admin@admin.com
    DocumentRoot "/var/www/benet"
    ServerName www.benet.com
    ServerAlias www.benet.com
    ErrorLog "logs/benet-error_log"
    CustomLog "logs/benet-access_log" common
    ProxyRequests Off                                         //關閉正向代理
        ProxyPassMatch  ^/(.*\.php(/.*)?)$  fcgi://192.168.148.130:9000/var/www/benet/$1    \\寫php的IP地址
<Directory "/var/www/benet">        
 Options  FollowSymLinks          //禁止目錄遍歷  
 AllowOverride None        //容許請求爲空
 Require all granted                 //容許全部客戶端訪問
</Directory>
</VirtualHost>
[root@localhost ~]# apachectl -t
Syntax OK
[root@localhost ~]# apachectl restart
//建立虛擬目錄以後,重啓httpd服務
ProxyPassMatch  ^/(.*\.php(/.*)?)$  fcgi://192.168.1.3:9000/var/www/benet/$1                  
//把以.php 結尾的文件請求發送到 php-fpm 進程,php-fpm 至少須要知道運 行的目錄和 URI,因此這裏直接在 fcgi://192.168.1.3:9000 後指明瞭這兩個參數,其它的參數的傳遞已經被 mod_proxy_fcgi.so 進行了封裝,不須要手動指定。 特別注意的是,IP地址後面的目錄路徑須要與<VirtualHost> 中的 DocumentRoot 後的路徑一致 。ProxyPassMatch 只有知足特定正則模式的內容纔會匹配並執行此規則,這裏的模式是,^/(.*\.php(/.*)?)$ 從網站(虛擬主機<VirtualHost> 的根目錄開始,匹配任何以 .php 結尾,或者在 .php 以後 緊跟一個 / 再跟別的內容的路徑。 ^ (caret) 和 $ (dollar)標誌要匹配的路徑的開始和結束 ( )括號裏的內容能夠用 $1 來表示,以方便後面引用它。 fcgi:// 192.168.1.3:9000 經過 mod_proxy_fcgi 來轉發的代理,使用 fastCGI 協議,轉到 PHP-FPM 監聽的端口。 /path/to/your/documentroot/ 很是重要!必須與虛擬主機的路徑匹配,且必須是對應 php 文件在操做系統中的絕對路徑。 不然會找不到文件。 
$1 能夠從原始請求擴展成整個請求路徑的變量,這裏指代前面( ) 裏面匹配的那個路徑(uri)
  • 在php服務器上建立測試網頁
[root@localhost php-5.6.27]# vim /var/www/benet/index.php
<?php
phpinfo(); 
?>
  • 用客戶機訪問apache的ip

基於centos 7部署LNMP動靜分離以及部署Discuz論壇

[root@localhost ~]# vim a.sh
[root@localhost ~]# chmod a+x a.sh 
[root@localhost ~]# sh a.sh 
Starting MySQL. SUCCESS! 
mysql: [Warning] Using a password on the command line interface can be insecure.
\\這是警告正常現象
  • 測試 LAMP 環境

  • 在 mysql 主機上建立用於 php 服務器鏈接的 mysql 帳戶
[root@localhost ~]# mysql -u root -p123
mysql> grant all on *.* to aaa@'192.168.148.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
  • 在php服務器填寫測試腳本
[root@localhost php-5.6.27]# vim /var/www/benet/test1.php
<?php
$link=mysql_connect('192.168.148.131','aaa','123456');
if($link) echo "恭喜你,數據庫鏈接成功!!!"; else echo "connect shibai";
mysql_close($link);
?>
  • 驗證

基於centos 7部署LNMP動靜分離以及部署Discuz論壇

看到上面兩個測試頁說明 apache、php、mysql 之間能夠協同工做了。

壓力測試

網站性能壓力測試是服務器網站性能調優過程當中必不可缺乏的一環。只有讓服務器處在高壓 狀況下,才能真正體現出軟件、硬件等各類設置不當所暴露出的問題。

ab 是 apache 自帶的壓力測試工具。ab 很是實用,它不只能夠對 apache 服務器進行網站訪 問壓力測試,也能夠對或其它類型的服務器進行壓力測試。好比 nginx、tomcat、IIS 等。
下面咱們開始介紹有關 ab 命令的使用:

1.ab 的原理
2.ab 的安裝
3.ab 參數說明
4.ab 性能指標
5.ab 實際使用
6.測試 nginx 性能

1)ab 的原理 ab 是 apachebench 命令的縮寫。 ab 的原理:ab 命令會建立多個併發訪問線程,模擬多個訪問者同時對某一 URL 地址進行訪 問。它的測試目標是基於 URL 的,所以,它既能夠用來測試 apache 的負載壓力,也能夠測 試 nginx、lighthttp、tomcat、IIS 等其它 Web 服務器的壓力。 ab 命令對發出負載的計算機要求很低,它既不會佔用很高 CPU,也不會佔用不少內存。但 卻會給目標服務器形成巨大的負載,其原理相似 CC ***。本身測試使用也須要注意,不然 一次上太多的負載。可能形成目標服務器資源耗完,嚴重時甚至致使死機。

2)ab 的安裝

  • 查看 ab 是否安裝成功,能夠切換到上述目錄下,使用 ab –V 命令進行檢測
    [root@localhost ~]# /usr/local/http-2.4.23/bin/ab -V 
    /usr/local/http-2.4.23/bin/ab: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory

解決:
若是 ab –V 命令出錯,能夠 exporexport LD_LIBRARY_PATH="/usr/local/openssl/lib/"

[root@localhost ~]# export  LD_LIBRARY_PATH=/usr/local/openssl/lib/   
\\//將所需模塊所在路徑導出爲環境變量
[root@localhost ~]#  /usr/local/http-2.4.23/bin/ab -V 
\\ 這樣就能夠正常使用
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

3)ab 參數說明

  • ab命令經常使用的參數有兩個:
-n:在測試會話中所執行的請求個數(總請求數);
-c:一次產生的請求個數(即併發用戶數);
[root@localhost ~]# cat /var/www/benet/index.html
asdasdasdasdasdasd
//建立Apache的首頁文件
[root@localhost ~]# ab -c 500 -n 10000 http://192.168.1.129/index.html
//對192.168.1.129的Web服務器進行測試
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.1.129 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests

Server Software:        Apache/2.4.23
Server Hostname:        192.168.1.129
Server Port:            80

Document Path:          /index.html                  //請求的資源名稱
Document Length:        34 bytes                  //響應數據的正文長度

Concurrency Level:      500                   //併發個數
Time taken for tests:   1.727 seconds       //處理這些請求所花費的時間
Complete requests:      10000               //成功請求完成的次數
Failed requests:        0                          //失敗的請求次數
Total transferred:      2780000 bytes      //全部請求的響應數據長度總和
HTML transferred:       340000 bytes         //請求的正文數據總和
Requests per second:    5788.87 [#/sec] (mean)      //吞吐量-每秒請求數(計算公式:請求的次數/用戶等待時間)吞吐量越大越好
Time per request:       86.373 [ms] (mean)        //用戶平均等待時間(計算方式:用戶等待時間/(請求的次數/併發))
Time per request:       0.173 [ms] (mean, across all concurrent requests)       //服務器平均等待時間(計算方式:用戶等待時間/完成請求的次數)
Transfer rate:          1571.59 [Kbytes/sec] received   //用戶請求的數據大小(計算方式:數據總長度/用戶等待時間)

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   24 138.0      4    1034
Processing:     8   50  93.8     16     822
Waiting:        0   47  93.2     13     816
Total:         12   74 168.7     20    1255

Percentage of the requests served within a certain time (ms)
  50%     20
  66%     25
  75%     31
  80%     39
  90%    222
  95%    250
  98%    832
  99%   1050
 100%   1255 (longest request)
 //這部分數據用於描述每一個請求處理時間的分佈狀況
  • ab壓力測試工具重要的性能指標

吞吐量:服務器併發處理能力的量化描述。指的是在某個併發用戶數下單位時間內處理的請求數。某個併發用戶數下單位時間內能處理的最大請求數,稱之爲最大吞吐量。

注意:吞吐量是基於併發用戶數的。這句話的含義:
吞吐量和併發用戶數有關;
不一樣的併發用戶數下,吞吐量是不一樣的;
計算公式:總請求數/處理完成這些請求所花費的時間。

2.併發鏈接數:併發鏈接數指的是某個時刻服務器所接收的請求數目,簡單的講,就是一個會話。
3.併發用戶數:一個用戶能夠同時會產生一個會話或多個會話,也就是鏈接數;
4.用戶平均等待時間:計算公式:處理完成全部請求數所花費的時間/(總請求數/併發用戶數);
5.服務器平均等待時間:計算公式:處理完成多有請求數所花費的時間/總請求數。也就是吞吐量的倒數。同時也就是用戶平均等待時間/併發用戶數。

  • 安裝php加速軟件Xcache

下載Xcache

  • CentOS7.2 下安裝 php 加速軟件 Xcache(在 php 主機上完成下面的操做
[root@localhost /]# tar zxf xcache-3.2.0.tar.gz 
[root@localhost /]# cd xcache-3.2.0/
[root@localhost xcache-3.2.0]# /usr/local/php5.6/bin/phpize
Configuring for:
\\須要使用phpize命令來生成configure配置文件
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
[root@localhost xcache-3.2.0]# ./configure --enable-xcache --enable-xcache-coverager --enable-xcache-optimizer --with-php-config=/usr/local/php5.6/bin/php-config && make && make install
  • 安裝後會出現一條路徑很是重要後面步驟用到

基於centos 7部署LNMP動靜分離以及部署Discuz論壇

  • 編譯配置參數詳解:
--enable-xcache:啓用xcache功能;
--enable-xcache-coverager:用於測試加速器功效和附加性;
--enable-xcache-optimizer:操做代碼優化;
  • 建立 xcache 緩存文件
[root@localhost xcache-3.2.0]# touch /tmp/xcache
[root@localhost xcache-3.2.0]# chmod 777 /tmp/xcache
  • 拷貝 xcache 後臺管理程序到網站根目錄

[root@localhost xcache-3.2.0]# cp -r htdocs/ /var/www/benet/xcache

  • 配置 php 支持 xcache
    在最後一行添加如下內容
[root@localhost xcache-3.2.0]# vim /etc/php.ini 
[xcache-common]
extension = /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/xcache.so
[xcache.admin]
xcache.admin.enable_auth = Off
[xcache]
xcache.shm_scheme ="mmap"
xcache.size=60M
xcache.count =1
xcache.slots =8K
xcache.ttl=0
xcache.gc_interval =0
xcache.var_size=64M
xcache.var_count =1
xcache.var_slots =8K
xcache.var_ttl=0
xcache.var_maxttl=0
xcache.var_gc_interval =300
xcache.test =Off
xcache.readonly_protection = Off
xcache.mmap_path ="/tmp/xcache"
xcache.coredump_directory =""
xcache.cacher =On
  • 相關解釋以下:
[xcache-common] 
extension = /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/xcache.so 
//啓用php的xcache擴展功能
[xcache.admin] 
xcache.admin.enable_auth = Off         //關閉xcache認證
[xcache] 
xcache.shm_scheme ="mmap"            //決定xcache如何從系統共享內存
//nmap是一種內存映射文件的方法
xcache.size=60M              //所用共享緩存的大小,若是設置爲0,將沒法使用
xcache.count =1                  //將cache切分紅多少塊,建議設置爲cpu數 
xcache.slots =8K                //指做爲hash槽個數的參考值
xcache.ttl=0                      //文件生存時間,設置爲0將無限緩存
xcache.gc_interval =0          //觸發垃圾回收的時間間隔,默認爲0秒
xcache.var_size=64M           //針對變量的緩存
xcache.var_count =1 
xcache.var_slots =8K 
xcache.var_ttl=0 
xcache.var_maxttl=0 
xcache.var_gc_interval =300 
xcache.test =Off                   //關閉測試功能
xcache.readonly_protection = Off           //啓動會下降性能,可是略微提升安全性
xcache.mmap_path ="/tmp/xcache"          //用於只讀文件路徑
xcache.coredump_directory =""                
//在遇到故障時,放置核心轉儲功能,必須是php可寫入的目錄,保留爲空表示禁用
xcache.cacher =On            //使用opcode緩存,xcache.size=0時無效
xcache.stat=On                 //使用stat發現檢查腳本的更新
xcache.optimizer =Off                 //禁用優化
[xcache.coverager] 
xcache.coverager =On           //啓用代碼覆蓋信息採集器
xcache.coveragedump_directory =""        
//放置數據採集信息的目錄位置,默認使用目錄/tmp/pcovis
  • 將 xcache 目錄拷貝到 apache 主機的網頁文檔目錄下
[root@localhost xcache-3.2.0]# scp -r /var/www/benet/xcache/ root@192.168.148.129:/var/www/benet/
  • 重啓php
[root@localhost xcache-3.2.0]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
  • 測試

基於centos 7部署LNMP動靜分離以及部署Discuz論壇

部署Discuz論壇

下載Discuz軟件包

  • 在php服務器上操做
[root@localhost /]# unzip Discuz_7.0.0_FULL_SC_UTF8.zip -d discus
[root@localhost /]# mv discus/Discuz_7.0.0_FULL_SC_UTF8/upload/ /var/www/benet/bbs
[root@localhost /]# chown -R nobody:nobody /var/www/benet/bbs/
[root@localhost /]# chmod -R 777 /var/www/benet/bbs/
[root@localhost /]# vim /etc/php.ini 

short_open_tag = Off  改成short_open_tag = On

基於centos 7部署LNMP動靜分離以及部署Discuz論壇

[root@localhost /]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
  • Mysql服務器進行如下操做
[root@localhost ~]# mysql -u root -p123
mysql> create database bbs;  \\建立數據庫
Query OK, 1 row affected (0.00 sec)
  • Apache服務器進行如下操做
    web 服務器也須要有靜態文件

    [root@localhost /]# unzip Discuz_7.0.0_FULL_SC_UTF8.zip -d discus
    [root@localhost /]# mv discus/Discuz_7.0.0_FULL_SC_UTF8/upload/ /var/www/benet/bbs
    [root@localhost /]# cd  /var/www/benet/bbs 
    [root@localhost bbs]# chown -R daemon config.inc.php attachments/ forumdata/ uc_client/data/cache/ templates/
  • 測試

基於centos 7部署LNMP動靜分離以及部署Discuz論壇

基於centos 7部署LNMP動靜分離以及部署Discuz論壇

基於centos 7部署LNMP動靜分離以及部署Discuz論壇

基於centos 7部署LNMP動靜分離以及部署Discuz論壇

出現這個頁面咱們還須要作一步

基於centos 7部署LNMP動靜分離以及部署Discuz論壇

在php上操做

[root@localhost /]# scp -r /var/www/benet/bbs/ root@192.168.148.129:/var/www/benet/

把php下的bbs複製到apache中按下f5刷新一下

基於centos 7部署LNMP動靜分離以及部署Discuz論壇

相關文章
相關標籤/搜索