[LAMP] Linux LAMP(Server)服務器,LAMP部署、安裝及LAMP原理架構詳解

本章blog主要介紹了[LAMP] Linux LAMP(Server)服務器,LAMP環境搭建、LAMP編譯安裝及LAMP架構詳解,並分別部署php與apache的不同組合方式的LAMP案例。


LAMP Server 


  • LAMP簡介

LAMP網站框架是目前國際上流行的Web服務架構,該框架包括GNU / Linux 操作系統,Apache HTTP服務器,MySQL 類關係型數據庫(RDBMS)以及PHP編程語言。所有組成產品均屬於開源類軟件 ,本身都是各自獨立的程序,但是因爲常被放在一起使用,擁有了越來越高的兼容度,使其更適用於構建動態網站及開發Web應用程序, 現已成爲國際流行的框架架構。

目前很多流行的商業應用都是採取這個架構,和Java/J2EE架構相比,LAMP具有Web資源豐富、輕量、快速開發等特點,與微軟的.NET架構相比,LAMP具有通用、跨平臺、高性能、低價格的優勢,因此LAMP無論是性能、質量還是價格都是企業搭建網站的首選平臺。

  • LAMP組件

GNU / Linux 操作系統: 

Linux是一種類似Unix的計算機操作系統,Linux操作系統有很多個不同的發行版,如Red Hat 、SUSE 、FreeBSD、Debian、CentOS等。

Apache HTTP服務器:

LAMP的HTTP服務器的角色除了由Apache提供外,還包括其他如nginx等的Web服務器 ;其中,Apache負責傳遞PHP及cgi等動態語言,Nginx提供負載均衡、反向解析及容錯功能,彼此配合使用,成爲HTTP服務器的配置首選模式。

MySQL 類關係型數據庫(RDBMS):

MySQL作爲LAMP的關係數據庫管理系統(RDBMS)的原始角色已經由其他RDBMS(如MariaDB)甚至NoSQL數據庫(如MongoDB)逐步取代。MariaDB由MySQL的創始人Michael Widenius主導開發,其屬於MySQL的一個分支,主要由開源社區在維護,採用GPL授權許可,且MariaDB完全兼容MySQL;MongoDB是一個Web規模的開源NoSQL數據庫 。

php編程語言:

PHP作爲LAMP的應用程序編程語言的原始角色,也逐步由其他語言(如Perl和Python)共同執行。PHP是一種服務器端腳本語言,專爲Web開發而設計。PHP代碼由web服務器提供的PHP模塊編譯,支持將PHP命令直接嵌入到HTML源文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;Perl是一系列高級,通用,解釋的動態編程語言;Python是一中面向對象的的通用型高級編程語言,Python支持多種編程範例,包括面向對象,命令式,功能和過程範式。

緩存或加速器:

Apache提供了自己的緩存模塊,也可以使用外加的Squid模塊進行緩存,這兩種方式均可以有效的提高Apache的訪問響應能力。PHP的加速可使用xcache加速器,優化和緩存php動態內容,提升了PHP腳本的緩存性能。Memcached是一個分佈式的內存對象緩存系統,通常用於動態Web應用以減輕數據庫負載。

  • LAMP架構原理

客戶端發送http request 請求 ,服務器(Apache)接受web請求;

Apache判斷客戶端請求的資源是否爲靜態請求。若是靜態請求,則Apache直接將客戶端請求的靜態資源(.html, .htm  .shtml等文件),通過Http response的形式傳送給客戶端;

若爲php動態請求,則通過CGI協議將客戶端的php請求傳輸給PHP程序,然後由php程序調用php解析器執行php請求。

PHP在執行php請求時判斷是否會依賴mysql數據庫。若不依賴mysql數據庫,則由php解析器直接執行php相關腳本,將解析後的腳本再次通過CGI協議返傳送給Apache.服務器,再執行“靜態請求”的流程;

若依賴mysql數據庫,則php程序通過php-mysql 驅動與mysql進行關聯  ,獲取相關數據 ,然後將其返還給php解釋器 ,再次執行“不依賴mysql數據庫”的流程。

  • apache與php組合方式

Module機制:php直接以httpd的模塊擴展的方式運行,php作爲httpd功能的一部分。啓動httpd進程時 ,亦開啓了php功能。其中prefork模式依賴libphp5.so庫 ,worker、event模式依賴libphp5-zts.so庫 

CGI機制:php工作在獨立的進程,當需要解析php請求時,由httpd喚醒php進程。因多個php請求,會啓動多個php進程,需要耗費資源,整體性能不如module機制

Fast-CGI機制:生成php-fpm服務 ,由服務php-fpm管理php進程。基於套接字與apache聯繫 ,與apache work機制類似 ,有父進程,子進程,空閒進程等 ,大大提高了php處理能力。

  • LAMP服務器(server)實驗搭建

根據apache與php組合的不同方式,下面將演示LAMP編譯安裝實驗:實驗一、 php 以module 模式訪問 ,實驗二 、配置apache 與fpm方式 的php 。

系統:Centos 6.6 

軟件:httpd-2.4.34 + mysql-5.5.61 + php-5.6.36 + 

編譯環境:安裝LAMP相關依賴環境,包括“Server PlatForm Development”, “Development tools”,關閉selinux 和 iptables 功能

實驗目的:編譯安裝LAMP,通過不同的方式,分別實現php 以 modeule 方式訪問和 以Fast-CGI機制下運行  。


LAMP編譯安裝,配置php 以 module 模式訪問


一、配置編譯環境 ,安裝“Server PlatForm Development”, “Development tools”,關閉selinux 和 iptables   

[root@VM ~]# yum groupinstall "Development tools" -y    # 安裝包組開發工具
[root@VM ~]# yum groupinstall "Server Platform Development" -y    # 安裝包組服務開發環境

[root@VM ~]# vi /etc/selinux/config     # 修改配置文件,關閉selinux功能
SELINUX=disabled    # 設定爲disabled
#SELINUXTYPE=targeted  # 註釋該項,行首添加#

[root@VM ~]# chkconfig iptables off    # 禁止開機自啓動iptables功能
[root@VM ~]# chkconfig ip6tables off

[root@VM ~]# service iptables stop    # 停止iptables 功能
[root@VM ~]# service ip6tables stop

     

二、編譯安裝Apache

  • 編譯安裝apr(apr-1.6.3

下載地址:http://download.nextag.com/apache//apr/apr-1.6.3.tar.gz    

[root@VM ~]# tar xf apr-1.6.3.tar.gz      
[root@VM ~]# cd apr-1.6.3    
[root@VM apr-1.6.3]# ./configure --prefix=/usr/local/apr
[root@VM apr-1.6.3]# make && make install
  • 編譯安裝apr-util(apr-util-1.6.1

下載地址:  http://download.nextag.com/apache//apr/apr-util-1.6.1.tar.gz 

[root@VM ~]# tar xf apr-util-1.6.1.tar.gz 
[root@VM ~]# cd apr-util-1.6.1  
[root@VM apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
[root@VM apr-util-1.6.1]# make && make install
  • 編譯安裝httpd(httpd-2.4.34)

下載地址:http://mirror.reverse.net/pub/apache//httpd/httpd-2.4.34.tar.gz 

[root@VM  ~]#  yum install gcc gcc-c++ pcre pcre-devel  # 安裝依賴環境
[root@VM ~]# cd httpd-2.4.34  # 編譯安裝httpd
[root@VM httpd-2.4.34]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable--ssl --enable-cgi --enable-rewrite --with-zlib\
--with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modeles=most --enable-mpms-shared=all --with-mpm=event   
[root@VM httpd-2.4.34]# make && make install

[root@VM bin]# vi /etc/profile.d/http.sh    # 配置環境變量
export PATH=/usr/local/apache/bin:$PATH
[root@VM bin]# . /etc/profile.d/http.sh   # 使能環境變量

[root@VM apache]# ln -sv /usr/local/apache/include/ /usr/include/httpd  # 配置httpd include頭文件
`/usr/include/httpd' -> `/usr/local/apache/include/'

[root@VM apache]# vi /etc/man.config  # 配置httpd man幫助文件
MANPATH /usr/local/apache/man
參數註釋:
# ./configure --help :查看相關命令幫助,查看相關支持的選項參數及功能
    --prefix=PREFIX :指定默認安裝目錄
    --sbindir=DIR:指定可執行文件安裝目錄
    --enable-so   :   啓用DSO動態加載模塊支持,需要什麼功能模塊可動態加載
    --enable--ssl  :SSL/TLS support (mod_ssl)
    --enable-cgi   :支持CGI腳本功能
    --enable-rewrite : 啓用網頁地址重寫功能,實現僞靜態
    --with-zlib=DIR:安裝zlib庫
    --with-pcre=DIR :使用擴展的pcre lib庫
    --with-apr=DIR :指向apr安裝路徑
    --with-apr-util=DIR :指向apr-util 安裝路徑
    --enable-modules=most :指定安裝DSO動態庫用來通信
    --with-mpm=prefork|worker|event :指定服務器默認支持的一種MPM模塊
    --enable-mpms-shared=all  :當前平臺選擇MPM加載動態模塊並以DSO動態庫方式進行創建
    
configure的各項參數及功能介紹,可參照官方文檔 https://httpd.apache.org/docs/2.4/en/programs/configure.html

  • 啓動Apache服務並驗證,修改apache的配置文件並設置PidFile路徑(默認在/usr/local/apache/logs/httpd.pid)

[root@VM ~]# vi /etc/httpd/httpd.conf 
Pidfile "/var/run/httpd/httpd.pid"    # 添加該項,爲Pidfile指明httpd.pid路徑

[root@VM ~]# apachectl start    # 啓動apache服務
[root@VM ~]# ss -tunl | grep 80
tcp    LISTEN     0      128                   :::80                   :::*     

[root@VM ~]# curl      # 驗證apache服務
<html><body><h1>It works!</h1></body></html>

   

三、編譯安裝Mysql

  • 建議在硬raid中創建lvm,使用獨立的lvm磁盤作爲mysql 數據存儲目錄 ,便於備份mysql數據

[root@VM ~]# fdisk  /dev/sda    # 磁盤創建分區/dev/sda4 ,並調整磁盤格式爲8e(LVM)

Command (m for help): n    # 創建分區
Command action
   e   extended
   p   primary partition (1-4)

Command (m for help): p    # 指定主分區
Selected partition 4
First cylinder (10976-16709, default 10976): 
Using default value 10976
Last cylinder, +cylinders or +size{K,M,G} (10976-16709, default 16709): 
Using default value 16709

Command (m for help): t    # 調整分區類型
Partition number (1-4): 4
Hex code (type L to list codes): 8e
Changed system type of partition 4 to 8e (Linux LVM)

Command (m for help): p    # 顯示磁盤分區,驗證/dev/sda4爲Linux LVM分區類型

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         256     2048000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             256       10454    81920000   8e  Linux LVM
/dev/sda3           10454       10976     4194304   82  Linux swap / Solaris
/dev/sda4           10976       16709    46051714+  8e  Linux LVM

Command (m for help): w    # 保存分區退出
The partition table has been altered!

[root@VM ~]# partx -a /dev/sda    # 內核重讀磁盤分區
[root@VM ~]# kpartx -af /dev/sda

[root@VM ~]# cat /proc/partitions     # 驗證內核是否加載 /dev/sda4分區
major minor  #blocks  name

   8        0  134217728 sda
   8        1    2048000 sda1
   8        2   81920000 sda2
   8        3    4194304 sda3
   8        4   46051714 sda4

[root@VM ~]# mke2fs -t ext4 /dev/sda4    # 格式化分區/dev/sda4

[root@VM ~]# pvcreate /dev/sda4    # 創建pv
  Physical volume "/dev/sda4" successfully created

[root@VM ~]# pvs    # 顯示pv
PV         VG   Fmt  Attr PSize  PFree 
/dev/sda2  vg0  lvm2 a--u 78.12g  2.92g
/dev/sda4       lvm2 ---- 43.92g 43.92g

[root@VM ~]# vgextend vg0  /dev/sda4    # 擴展vg0
  Volume group "vg0" successfully extended    
[root@VM ~]# vgs    # 顯示vg 
  VG   #PV #LV #SN Attr   VSize   VFree 
  vg0    2   4   0 wz--n- 122.03g 46.84g
  
[root@VM ~]# lvcreate -n data -L 20G vg0    # 創建lvm分區data 
  Logical volume "data" created.  

[root@VM ~]# lvs
LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
data vg0  -wi-a----- 20.00g      

[root@VM ~]# mke2fs -t ext4 /dev/mapper/vg0-data    # 對分區創建文件系統

[root@VM ~]# vi /etc/fstab 	# 配置開機自動掛載/dev/mapper/vg0-data 分區
/dev/mapper/vg0-data    /data                   ext4    defaults        0 0	

[root@VM ~]# mount -a    # 掛載所有分區
[root@VM ~]# mount    # 驗證分區掛載
/dev/mapper/vg0-data on /data type ext4 (rw)
  • 編譯安裝mysql

下載地址:https://mirrors.163.com/mysql/Downloads/MySQL-5.5/mysql-5.5.61.tar.gz 

[root@VM ~]# tar xf mysql-5.5.61.tar.gz     # 解壓mysql源碼包

[root@VM ~]# useradd -s /sbin/nologin -r mysql    # 添加系統用戶mysql
[root@VM ~]# id mysql
uid=498(mysql) gid=498(mysql) groups=498(mysql)

[root@VM ~]# cd /data/    # 創建mysql數據的目錄/data/sqldata ,調整目錄權限
[root@VM data]# mkdir sqldata
[root@VM data]# chown root:mysql sqldata/
 
[root@VM ~]# yum install ncurses-devel bison bison-devel   # 配置Epel yum源,安裝mysql依賴環境

[root@VM ~]# cd mysql-5.5.61    # 編譯安裝mysql

[root@VM mysql-5.5.61]# cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql  \
-DMYSQL_DATADIR=/data/sqldata   \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DWITH_PARTITION_STORAGE_ENGINE=1  \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_DEBUG=0 
[root@VM mysql-5.5.61]# make && make install

[root@VM mysql]# vi /etc/profile.d/mysql.sh    # 配置mysql環境變量
export PATH=/usr/local/mysql/bin:$PATH

[root@VM mysql]# . /etc/profile.d/mysql.sh    # 使能環境變量

[root@VM mysql]# ln -sv /usr/local/mysql/include/ /usr/include/mysql    # 配置mysql include頭文件
`/usr/include/mysql' -> `/usr/local/mysql/include/'

[root@VM mysql]# vi /etc/man.config     # 配置mysql命令幫助文件
MANPATH /usr/local/mysql/man

[root@VM mysql]# vi /etc/ld.so.conf.d/mysql.conf    # 配置mysql lib庫,添加如下項
/usr/local/mysql/lib
[root@VM lib]# ldconfig -v | grep mysql    # 驗證lib庫
/usr/local/mysql/lib:
	libmysqlclient.so.18 -> libmysqlclient_r.so.18.0.0
/usr/lib64/mysql:
	libmysqlclient_r.so.16 -> libmysqlclient_r.so.16.0.0
	libmysqlclient.so.16 -> libmysqlclient.so.16.0.0
#參數註釋
# cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql    #  MySQL安裝的根目錄
-DMYSQL_DATADIR=/data/sqldata            # MySQL數據庫文件存放目錄
-DSYSCONFDIR=/etc                        # MySQL配置文件所在目錄    
-DWITH_MYISAM_STORAGE_ENGINE=1            # MySQL的數據庫引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1          # MySQL的數據庫引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1          # MySQL的數據庫引擎
-DWITH_MEMORY_STORAGE_ENGINE=1            # MySQL的數據庫引擎
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock       # MySQL的sock目錄
-DMYSQL_TCP_PORT=3306     # MySQL的監聽端口
-DWITH_PARTITION_STORAGE_ENGINE=1  
-DEXTRA_CHARSETS=all      # 使MySQL支持所有的擴展字符
-DDEFAULT_CHARSET=utf8    # 設置MySQL的默認字符集爲utf8
-DDEFAULT_COLLATION=utf8_general_ci    #設置MySQL的默認字符校對
-DWITH_DEBUG=0         # 禁用調試模式

編譯的參數可以參考   。
  • mysql初始化,啓動服務

[root@VM mysql]# chown -R root:mysql /usr/local/mysql    # 設置/usr/local/mysql 目錄權限

[root@VM mysql]# ./scripts/mysql_install_db --datadir=/data/sqldata/ --user=mysql    # 初始化mysql腳本
Installing MySQL system tables...
180819 14:21:16 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
180819 14:21:16 [Note] ./bin/mysqld (mysqld 5.5.61) starting as process 65052 ...
OK
Filling help tables...
180819 14:21:17 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
180819 14:21:17 [Note] ./bin/mysqld (mysqld 5.5.61) starting as process 65059 ...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

[root@VM mysql]# ln -sv  /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld    # 啓動文件
`/etc/init.d/mysqld' -> `/usr/local/mysql/support-files/mysql.server'

[root@VM run]# vi /etc/my.cnf     # 調整mysql 啓動配置文件
[mysqld]
datadir=/data/sqldata    # 指定data目錄
socket=/var/run/mysql/mysql.sock    # 指定sock目錄
user=mysql    # 指定啓動用戶mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid    # 指定pid目錄

[root@VM run]# mkdir /var/run/mysql    # 創建/var/run/mysql 目錄,提供pid和sock存放目錄
[root@VM run]# chown -R mysql.mysql /var/run/mysql    # 調整目錄屬性

[root@VM run]# chkconfig --add mysqld    # 加入mysqld啓動服務
[root@VM run]# chkconfig mysqld on

[root@VM run]# service mysqld start    # 啓動mysqld服務
Starting MySQL SUCCESS! 
[root@VM run]# ss -tunl | grep 3306
tcp    LISTEN     0      50                     *:3306                  *:*
  • 對mysql數據庫進行管理,刪除匿名用戶,創建密碼 ,刪除test數據庫 等操作

[root@VM mysql]# mysql    #登錄mysql 數據庫
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.61 Source distribution

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.61    |
+-----------+
1 row in set (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> drop database test;
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| user                      |
+---------------------------+

mysql> select user,host,password from user;
+------+-----------+----------+
| user | host      | password |
+------+-----------+----------+
| root | localhost |          |
| root | vm        |          |
| root | 127.0.0.1 |          |
| root | ::1       |          |
|      | localhost |          |
|      | vm        |          |
+------+-----------+----------+
6 rows in set (0.00 sec)

mysql> drop user root@'::1';    # 清理匿名用戶
Query OK, 0 rows affected (0.00 sec)

mysql> drop user ''@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> drop user ''@'vm';
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE user SET password=PASSWORD('Hello123abc.com') WHERE user='root';    # 定義root用戶密碼
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
  • 對mysql 創建用戶及密碼、主機配置文件,可以不使用密碼進行登錄

[root@VM mysql]# vi /root/.my.cnf    # 添加如下代碼,實現無需密碼進行登錄
[mysql]
user = root
host = localhost
password = Hello123abc.com

注:在啓動MySQL服務時,會按照一定次序搜索my.cnf。
尋找順序:/etc/my.cnf -->$MYSQL_Base/my.cnf --> --defaults-extra-file=/path/to/some_my.cnf -->.my.cnf


四、編譯安裝PHP

  • 編譯安裝php-5.6.36

下載地址:http://at2.php.net/distributions/php-5.6.36.tar.gz 

[root@VM ~]# yum -y install libxml2-devel openssl-devel openssl bzip2-devel libmcrypt libmcrypt-devel mcrypt   
# 配置Epel yum源,安裝依賴環境
[root@VM  ~]# cd php-5.6.36

[root@VM php-5.6.36]#  ./configure --prefix=/usr/local/php \
--with-mysql=/usr/local/mysql  --with-openssl  \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--enable-mbstring --with-freetype-dir   \
--with-jpeg-dir  --with-png-dir   \
--with-zlib  --with-bz2   \
--with-mcrypt  --with-libxml-dir=/usr \
--enable-sockets  --with-apxs2=/usr/local/apache/bin/apxs \
--with-config-file-path=/etc  --with-config-file-scan-dir=/etc/php.d \
--enable-maintainer-zts  

[root@VM php-5.6.36]# make && make install

[root@VM php-5.6.36]# cp php.ini-production /etc/php.ini    # 把php提供配置文件

[root@VM ~]# vi /etc/profile.d/php.sh     #添加環境變量
export PATH=/usr/local/php/bin:$PATH 
  
[root@VM ~]# ln -sv /usr/local/php/include/ /usr/include/php    # 添加php 頭文件
`/usr/include/php' -> `/usr/local/php/include/'
參數註釋;
--prefix=/usr/local/php  # 指定php安裝的路徑
--with-mysql=/usr/local/mysql # 指定mysql的安裝目錄
--with-mysqli=/usr/local/mysql/bin/mysql_config # 可以讓mysql與php結合的接口
--with-openssl   #支持ssl功能
--enable-mbstring    # 指定可以支持中文語言
--with-freetype-dir    # 加載freetype的頭文件,可以支持不同字體
--with-jpeg-dir --with-png-dir # 支持jpep格式圖片 ,支持pnp格式圖片
--with-zlib    # 支持壓縮庫
--with-libxml-dir=/usr   # 指定xml的庫路徑
--enable-sockets    # 支持套接字的通信功能
--with-mcrypt      # 支持額外的加密功能的庫
--with-config-file-path=/etc    # 指定php配置文件的路徑(/etc/php.ini)
--with-config-file-scan-dir=/etc/php.d  # 支持php文件的附件配置文件(/etc/php.d/*.ini)
--with-bz2  #支持bz2的壓縮庫
--enable-maintainer-zts   # 此選項是否安裝取決於你的Apache工作的mpm模式,
  • 配置apache 以支持php

[root@VM ~]# vi /etc/httpd/httpd.conf    #配置httpd 集成php 
    <1> 確認php模塊啓動
    LoadModule php5_module        modules/libphp5.so
    
    <2>添加如下二行
   AddType application/x-httpd-php  .php
   AddType application/x-httpd-php-source  .phps

    <3> 定位至DirectoryIndex index.html 
   修改爲:
    DirectoryIndex  index.php  index.html

[root@VM ~]# apachectl stop    # 重啓httpd服務
[root@VM ~]# apachectl start
  • 驗證php功能與apache ,php與mysql 連接

[root@VM ~]# vi /usr/local/apache/htdocs/index.php    # 測試apache 與 php 連接狀態腳本
<?php
        phpinfo();
?>

[root@VM ~]# vi /usr/local/apache/htdocs/mysql.php    # 測試php 與 mysql 連接狀態腳本
<?php
        $link = mysql_connect('localhost','root','Hello123abc.com');
if ($link)
        echo "sucessful.";
else
        echo "failure.";
 
mysql_close();
?>

    image.png

    image.png


五、安裝php加速器xcache

  • 安裝xcache

下載地址:http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz 

[root@VM ~]# tar xf xcache-3.2.0.tar.gz     
[root@VM ~]# cd xcache-3.2.0

[root@VM xcache-3.2.0]# phpize # 報錯,通過yum install autoconfig 解決。
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

[root@VM xcache-3.2.0]# phpize     # 編譯php模塊
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226

[root@VM xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config  # 編譯安裝
[root@VM xcache-3.2.0]# make && make install    # 安裝,記錄生成的文件路徑
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-zts-20131226/

[root@VM ~]# cp xcache.ini /etc/php.d/
[root@VM ~]# vi /etc/php.d/xcache.ini
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache.so    #修改該配置,變爲絕對路徑

[root@VM ~]# apachectl stop    # 重啓httpd服務
[root@VM ~]# apachectl start
  • 驗證xcache 安裝

image.png


六、安裝phpMyAdmin-4.8.2 ,管理mysql

  • 安裝phpMyAdmin-4.8.2   ,支持php5.5- php 7.2  ,mysql-5.5 以上

下載地址:https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.tar.xz 

[root@VM ~]# tar xf phpMyAdmin-4.8.2-all-languages.tar.xz

[root@VM ~]# mv phpMyAdmin-4.8.2-all-languages /usr/local/apache/htdocs/pmyadmin

    image.png

  • 錯誤故障解決

    image.png

1)配置文件現在需要一個短密碼:
解決辦法:設定 config.default.php 文件的108行 $cfg[‘blowfish_secret’] 參數,參數字符串長度必須在32位以上。
[root@VM pmyadmin]# vi libraries/config.default.php   # 在phpMyAdmin目錄下libraries文件下的config.default.php
$cfg['blowfish_secret'] = '[email protected]@blog.51cto.com/itwish';

2)$cfg['TempDir'] (./tmp/) 讀取失敗且不能建立緩存, phpMyAdmin運行速度將受影響.
解決辦法:手動在phpmyadmin的根目錄建立tmp文件,並賦予777權限
[root@VM pmyadmin]# mkdir -m 777 tmp


七、壓力測試

  • ab工具測試

[root@VM pmyadmin]# ulimit -n 3000
[root@VM pmyadmin]# ab -c 200 -n 2000 http://192.168.4.160/pmyadmin/index.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.4.160 (be patient)


Server Software:        Apache/2.4.34
Server Hostname:        192.168.4.160
Server Port:            80

Document Path:          /pmyadmin/index.php
Document Length:        14114 bytes

Concurrency Level:      200
Time taken for tests:   50.732 seconds
Complete requests:      68
Failed requests:        50
   (Connect: 0, Receive: 0, Length: 50, Exceptions: 0)
Total transferred:      1237144 bytes
HTML transferred:       1115484 bytes
Requests per second:    1.34 [#/sec] (mean)
Time per request:       149211.594 [ms] (mean)
Time per request:       746.058 [ms] (mean, across all concurrent requests)
Transfer rate:          23.81 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   42  10.0     45      48
Processing:   303 3041 2912.9   2091   15081
Waiting:       92 2496 2183.3   1949   13240
Total:        303 3083 2914.7   2120   15127

Percentage of the requests served within a certain time (ms)
  50%   2120
  66%   2458
  75%   3025
  80%   3069
  90%   5107
  95%   9875
  98%  13559
  99%  15127
 100%  15127 (longest request)
 
 
結果證實 ,安裝xcache 壓力測試 ,時間間隔明顯減少


LAMP編譯安裝,實現php-fpm模式 


一、配置編譯環境 ,安裝“Server PlatForm Development”, “Development tools”,關閉selinux 和 iptables    ,與上文配置相同

二、編譯安裝Apache ,與上文配置相同

三、編譯安裝Mysql,與上文配置相同

四、編譯安裝PHP 支持Fast-CGI 

  • 編譯安裝php-5.6.36

下載地址:http://at2.php.net/distributions/php-5.6.36.tar.gz 

[root@VM ~]# yum -y install libxml2-devel openssl-devel openssl bzip2-devel libmcrypt libmcrypt-devel mcrypt   
# 配置Epel yum源,安裝依賴環境
[root@VM ~]# cd php-5.6.36

[root@VM php-5.6.36]#  ./configure --prefix=/usr/local/php \
--with-mysql=/usr/local/mysql  --with-openssl  \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--enable-mbstring --with-freetype-dir   \
--with-jpeg-dir  --with-png-dir   \
--with-zlib  --with-bz2 \
--with-mcrypt  --with-libxml-dir=/usr \
--enable-sockets  --enable-fpm \
--with-config-file-path=/etc  --with-config-file-scan-dir=/etc/php.d 

[root@VM php-5.6.36]# make && make install


[root@VM ~]# vi /etc/profile.d/php.sh     #添加環境變量
export PATH=/usr/local/php/bin:$PATH 
  
[root@VM ~]# ln -sv /usr/local/php/include/ /usr/include/php    # 添加php 頭文件
`/usr/include/php' -> `/usr/local/php/include/'
# 說明,與Module方式相比,編譯安裝Fast-CGI模式時
去掉了--enable-maintainer-zts,不再將php作爲httpd的模塊。
此外將--with-apxs2=/usr/local/apache/bin/apxs改爲--enable-fpm
  • 配置並啓動 php-fpm 服務

[root@VM ~]# cd php-5.6.36
[root@VM php-5.6.36]# cp php.ini-production /etc/php.ini    # 爲php提供配置文件

[root@VM php-5.6.36]# cp sapi/fpm/init.d.php-fpm  /etc/init.d/php-fpm      # 配置php-fpm啓動腳本

[root@VM php-5.6.36]# chmod +x /etc/init.d/php-fpm    # 分配腳本執行權限
[root@VM php-5.6.36]# chkconfig --add php-fpm
[root@VM php-5.6.36]# chkconfig php-fpm on

[root@VM php-5.6.36]# cp /usr/local/php/etc/php-fpm.conf.default   /usr/local/php/etc/php-fpm.conf   #準備腳本的配置文件

[root@VM php-5.6.36]# vi /usr/local/php/etc/php-fpm.conf    # 配置php-fpm 相關參數
pid = /var/run/php-fpm.pid    # 默認路徑爲/usr/local/php/var/run/php-fpm.pid ,指定pid文件
pm.max_children = 5    # 服務啓動時的子進程數
pm.start_servers = 2    # 開啓啓動的進程數
pm.min_spare_servers = 1    # 最少空閒子進程數
pm.max_spare_servers = 3    # 最大空閒子進程數
pm.max_requests = 500    # 最大客戶端請求數

[root@VM php-5.6.36]# service php-fpm start
[root@VM ~]# ss -tunl | grep 9000
tcp    LISTEN     0      128            127.0.0.1:9000                  *:*
  • 配置apache 以支持fast-CGI 

[root@VM ~]# vi /etc/httpd/httpd.conf    #配置httpd 集成php 
    <1> 確認php模塊啓動
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
    
    <2> 配置apache可識別php文件
     AddType application/x-httpd-php  .php
     AddType application/x-httpd-php-source  .phps

    <3> 定位至DirectoryIndex index.html 
     修改爲:
    DirectoryIndex  index.php  index.html
    
    <4> 配置httpd支持fast-CGI,在主機下定義,而非目錄
    DocumentRoot "/var/www/html"
            ProxyRequests off
            ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
        
    <5> 配置fast-CGI支持虛擬主機,在主機下定義,而非目錄
    <VirtualHost *:80>
        ProxyRequests off
        ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
    </VirtualHost>   
         
[root@VM ~]# apachectl stop    # 重啓httpd服務
[root@VM ~]# apachectl start
  • 驗證php功能與apache ,php與mysql 連接

[root@VM ~]# vi /usr/local/apache/htdocs/index.php    # 測試apache 與 php 連接狀態腳本
<?php
        $link = mysql_connect('localhost','root','Hello123abc.com');
if ($link)
        echo "sucessful.";
else
        echo "failure.";
 
mysql_close();
phpinfo();
?>

    image.png

五、安裝php加速器xcache,與上文配置相同

六、安裝phpMyAdmin-4.8.2 ,管理mysql ,與上文配置相同

七、壓力測試 ,與上文配置相同

至此,完成LAMP編譯安裝實驗,分別實現 php 以module 模式訪問 和 配置apache 與fpm方式 的php 。

轉載請註明出處http://blog.51cto.com/itwish/2161699      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章