第24章,實現LAMP架構
Linux學習從入門到打死也不放棄,完全筆記整理(持續更新,求收藏,求點贊~~~~)
http://blog.51cto.com/13683480/2095439
第24章,實現LAMP架構
本章內容:
LAMP介紹
PHP介紹與配置
module方式實現LAMP
php-fpm方式實現LAMP
部署phpmyadmin
部署wordpress
部署discuz!
實現php的 Xcache加速
源碼編譯:安裝LAMP
LAMP介紹:
LAM(M)P 含義:
L:linux
A:apache(httpd)
M: mysql,mariadb
(M): memcached
P: php,perl,python
WEB資源類型:
靜態資源:原始形式與相應內容一致,在客戶端瀏覽器執行
動態資源:原始形式通常為程序文件,需要在服務器端執行之後,將執行結果
返回給客戶端
WEB相關術語:
客戶端技術:html,javascript
服務器端技術:php,jsp,python,asp
CGI:Common Gateway Interface
可以讓一個客戶端,從網頁瀏覽器通過http服務器向執行在網絡服務器上的
程序傳輸數據
CGI描述了客戶端和服務器程序之間的一種標準
請求流程:
Client --(httpd)--> httpd --(cgi) -->
application server(program file)--(mysql) --> mysql
php:
腳本編程語言,嵌入到html中的嵌入式web程序語言
基於zend編譯成opcode(二進制格式的字節碼,重復運行,可省略編譯環境)
PHP簡介:
官網:http://www.php.net/
?
PHP是通用服務器端腳本編程語言,主要用於web開發實現動態web頁面,也是最早實現將腳
本嵌入HTML源碼文檔中的服務器端腳本語言之一。同時,php還提供了一個命令行接口,因此,
其也可以在大多數系統上作為一個獨立的shell來使用
?
Rasmus Lerdorf於1994年開始開發PHP,它是初是一組被Rasmus Lerdorf稱作“Personal
Home Page Tool” 的Perl腳本, 這些腳本可以用於顯示作者的簡歷並記錄用戶對其網站的訪
問。後來,Rasmus Lerdorf使用C語言將這些Perl腳本重寫為CGI程序,還為其增加了運行Web
forms的能力以及與數據庫交互的特性,並將其重命名為“Personal Home Page/Forms
Interpreter”或“PHP/FI”。此時,PHP/FI已經可以用於開發簡單的動態web程序了,這即
PHP1.0。1995年6月,Rasmus Lerdorf把它的PHP發布於
comp.infosystems.www.authoring.cgi Usenet討論組,從此PHP開始走進人們的視野。1997
年,其2.0版本發布。
1997年,兩名以色列程序員Zeev Suraski和Andi Gutmans重寫的PHP的分析器(parser)成為
PHP發展到3.0的基礎,而且從此將PHP重命名為PHP: Hypertext Preprocessor。此後,這兩
名程序員開始重寫整個PHP核心,並於1999年發布了Zend Engine 1.0,這也意味著PHP 4.0的
誕生。2004年7月,Zend Engine 2.0發布,由此也將PHP帶入了PHP 5時代。PHP5包含了許
多重要的新特性,如增強的面向對象編程的支持、支持PDO(PHP Data Objects)擴展機制以及
一系列對PHP性能的改進
Zend Engine是開源的、PHP腳本語言的解釋器,它最早是由以色列理工學院
(Technion)的學生Andi Gutmans和Zeev Suraski所開發,Zend也正是此二人
名字的合稱。後來兩人聯合創立了Zend Technologies公司
Zend Engine 1.0於1999年隨PHP 4發布,由C語言開發且經過高度優化,並能
夠做為PHP的後端模塊使用。Zend Engine為PHP提供了內存和資源管理的功
能以及其它的一些標準服務,其高性能、可靠性和可擴展性在促進PHP成為一
種流行的語言方面發揮了重要作用
Zend Engine的出現將PHP代碼的處理過程分成了兩個階段:首先是分析PHP
代碼並將其轉換為稱作Zend opcode的二進制格式(類似Java的字節碼),並將
其存儲於內存中;第二階段是使用Zend Engine去執行這些轉換後的Opcode
Opcode是一種PHP腳本編譯後的中間語言,類似於Java的ByteCode,或
者.NET的MSL。PHP執行PHP腳本代碼一般會經過如下4個步驟(確切的來說,
應該是PHP的語言引擎Zend)
1、Scanning 詞法分析,將PHP代碼轉換為語言片段(Tokens)
2、Parsing 語義分析,將Tokens轉換成簡單而有意義的表達式
3、Compilation 將表達式編譯成Opocdes
4、Execution 順次執行Opcodes,每次一條,從而實現PHP腳本的功能
?
掃描-->分析-->編譯-->執行
php配置:
php:腳本語言解釋器
配置文件:
/etc/php.ini,/etc/php.d/*.ini
配置文件在php解釋器啟動時被讀取
對配置文件的修改生效方式:
modules:重啟httpd服務
FastCGI:重啟php-fpm服務
/etc/php.ini 配置文件格式:
[foo]:Section Header
directive = value
註釋符:較新的版本中,已經完全使用;進行註釋
# 純粹的註釋信息
; 用於註釋可啟用的directive
常用配置指令:
max_execution_time= 30 最長執行時間30s
memory_limit 128M 生產不夠,可調大
display_errors off 調試使用,不要打開,否則可能暴露重要信息
display_startup_errors off 建議關閉
post_max_size 8M 最大上傳數據大小,生產可能臨時要調大,比下面項要大
upload_max_filesize 2M 最大上傳文件,生產可能要調大
max_file_uploads = 20 同時上傳最多文件數
date.timezone =Asia/Shanghai 指定時區
short_open_tag=on 開啟短標簽,如<? phpinfo();?>
php.ini的核心配置選項文檔:
http://php.net/manual/zh/ini.core.php
php.ini配置選項列表
http://php.net/manual/zh/ini.list.php
php語言格式:
<?php
...php code
?>
php的加速器:
php的加速器:基於PHP的特殊擴展機制如opcode緩存擴展也可以將opcode
緩存於php的共享內存中,從而可以讓同一段代碼的後續重復執行時跳過編譯
階段以提高性能。這些加速器並非真正提高了opcode的運行速度,而僅是通過
分析opcode後並將它們重新排列以達到快速執行的目的
常見的php加速器有:
1、APC (Alternative PHP Cache)
遵循PHP License的開源框架,PHP opcode緩存加速器,目前的版本不適用於
PHP 5.4
項目地址http://pecl.php.net/package/APC
2、eAccelerator
源於Turck MMCache,早期的版本包含了一個PHP encoder和PHP loader,
目前encoder已經不在支持。項目地址 http://eaccelerator.net/
3、XCache
快速而且穩定的PHP opcode緩存,經過嚴格測試且被大量用於生產環境。項
目地址:http://xcache.lighttpd.net/,收錄EPEL源
4、Zend Optimizer和Zend Guard Loader
Zend Optimizer並非一個opcode加速器,它是由Zend Technologies為
PHP5.2及以前的版本提供的一個免費、閉源的PHP擴展,其能夠運行由Zend
Guard生成的加密的PHP代碼或模糊代碼。 而Zend Guard Loader則是專為
PHP5.3提供的類似於Zend Optimizer功能的擴展。項目地址
http://www.zend.com/en/products/guard/runtime-decoders
?
5、NuSphere PhpExpress
NuSphere的一款開源PHP加速器,它支持裝載通過NuSphere PHP Encoder
編碼的PHP程序文件,並能夠實現對常規PHP文件的執行加速。項目地址,
http://www.nusphere.com/products/phpexpress.htm
---------------------------------------------------------------------------
部署LAMP:
httpd:接收用戶的web請求;靜態資源則直接響應;動態資源為php腳本,
對此類資源的請求將交由php來運行
php:運行php程序
MariaDB:數據管理系統
http與php結合的方式
CGI
FastCGI:php-fpm
modules:php (將php編譯成為httpd的模塊,默認方式)
MPM:
prefork : libphp5.so
event, worker: libphp5-zts.so
centos7:
modules:httpd, php, php-mysql, mariadb-server
FastCGI:httpd,php-fpm,php-mysql,mariadb-server
centos6:
modules:httpd,php,php-mysql,mysql-server
默認不支持FastCGI
安裝LAMP:
CentOS 6:
yum install httpd php mysql-server php-mysql
service httpd start
service mysqld start
CentOS 7:
yum install httpd php php-mysql mariadb-server
systemctl start httpd.service
systemctl start mariadb.service
註意:要使用prefork模型
測試php是否正常連接:
vim /var/www/html/index.php
<?php
echo date("Y/m/d H:i:s");
phpinfo();
?>
php使用mysql擴展連接數據庫
只能連接mysql數據庫
註意:php7 已啟用此函數
1 執行 mysql_secure_installation 設置root 密碼
2 登錄mysql 添加授權賬號:
GRANT ALL ON *.* TO 'user1'@'192.168.65.%' IDENTIFIED BY 'centos';
3 編寫測試文件:
vim /var/www/html/mysql.php
<?php
#$conn = mysql_connect( 'servername','user','password');
$conn = mysql_connect( '127.0.0.1','user1','centos');
if($conn)
echo "OK";
else
echo "Failure";
echo mysql_error();
mysql_close();
?>
或者
<?php
$conn = mysql_connect( '192.168.65.132','user1','centos');
if($conn)
echo "OK";
else
echo "Failure";
echo mysql_error();
mysql_close();
?>
4 瀏覽器輸入 192.168.65.132/mysql.php 訪問測試
php使用mysqli擴展連接數據庫
只能連接mysql數據庫
vim /var/www/html/mysql2.php
<?php
$mysqli=new mysqli('192.168.65.155','user1','centos');
if(mysqli_connect_errno()){
echo "Failure";
$mysqli=null;
exit;
}
echo "OK";
$mysqli->close();
?>
php使用pdo擴展連接數據庫
可以連接主流各種數據庫
代碼1
vim /var/www/html/mysql3.php
<?php
$dsn='mysql:host=localhost;dbname=mysql';
$username='root';
$passwd='centos';
$dbh=new PDO($dsn,$username,$passwd);
var_dump($dbh);
?>
代碼2
vim /var/www/html/mysql4.php
<?php
try {
$user='root';
$pass='centos';
$dbh = new PDO('mysql:host=localhost;dbname=mysql', $user, $pass);
foreach($dbh->query('SELECT user,host from user') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
-----------------------------------------------------------------------------------
常見LAMP應用:
PhpMyAdmin:
是一個以PHP為基礎,以Web-Base方式架構在網站主機上的MYSQL的數據庫管理工具
讓管理者可用web接口管理Mysql數據庫
WordPress:
是一種使用PHP語言開發的博客平臺,用戶可以在支持PHP和Mysql數據庫的服務器
上架設屬於自己的網站。也可把Wordpress當作一個內容管理系統(CMS)來使用
PHPWind:
2003年發布了PHPWind的前身版本ofstar,並發展稱為包含BBS,CMS,博客,SNS等
一系列程序的通用型建站軟件,於2008年加入阿裏巴巴集團
Crossday discuz! Board(簡稱discuz!):
是一套通用的社區論壇軟件系統。自2001年6月面世以來,是全球成熟度最高,覆蓋率
最大的論壇軟件系統之一。
2010年8月23日,與騰訊達成收購協議
ECShop:
是一款B2C獨立網店系統,適合企業及個人快速構建個性化網上商店。系統是基於
PHP語言及MYSQL數據庫架構開發的跨平臺開源程序。
2006年6月,ECShop推出第一個版本1.0
部署phpMyadmin:
1 安裝並啟動lamp
yum install httpd php mariadb-server mysql-server
yum install php-mbstring
systemctl start httpd mariadb
2 執行mysql_secure_installation,設置管理員密碼
3 下載phpmyadmin,註意查看支持的php和數據庫版本
下載地址:
4.0版本,PHP 5.2 and MySQL 5. Does
https://files.phpmyadmin.net/phpMyAdmin/4.0.10.20/phpMyAdmin-4.0.10.20-all-languages.zip
4.8版本,PHP 5.2 and MySQL 5. Does not support PHP 5.5 or newer
https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.zip
4 解壓並復制到/var/www/html/目錄下
unzip phpMyAdmin-4.3.5-all-languages.zip
cp -a phpMyAdmin-4.3.5-all-languages /var/www/html/mysql
5 準備配置文件
cd /var/www/html/mysql
cp config.sample.inc.php config.inc.php
6 重啟服務
systemctl restart httpd
7 瀏覽器輸入 server-ip/mysql
使用root賬號登錄
部署wordpress:
1 下載軟件:
官網:https://cn.wordpress.org/
wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.zip
2 解壓並復制
unzip wordpress-4.9.4-zh_CN.zip
cp -a wordpress /var/www/html/blog
chown -R apache:apache /var/www/html/blog
3 準備數據庫和賬號
mysql>CREATE DATABASE wordpress
mysql>GRANT ALL ON wordpress.* TO 'wpuser'@'localhost' IDENTIFIED BY 'centos';
4 準備配置文件:
cp wp-config-sample.php wp-config.php
vim wp-config.php
數據庫登錄信息
5 重啟httpd
6 server-ip/blog 登錄執行初始化
部署discuz:
1 下載軟件:
http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_UTF8.zip
2 解壓縮並復制的網站目錄下
unzip Discuz_X3.2_SC_UTF8.zip
cp upload/* /data/dz/ -a
chown -R apache:apache /data/dz
3 重啟httpd 並測試訪問
centos7 編譯php-xcache 加速訪問:
官網:http://xcache.lighttpd.net/wiki/ReleaseArchive
安裝方法:
rpm安裝,來自epel源
編譯安裝:
1 裝備環境,安裝開發包組development tools
yum install php-devel
2 下載並解壓縮 xcache-3.2.0.tar.bz2
cd xcache-3.2.0
3 phpize 生成編譯環境
4 ./configure --enable-xcache --with-php-config=/usr/bin/php-config
make && make install
5 cp xcache-3.2.0/xcache.ini /etc/php.d/
systemctl reload httpd
------------------------------------------------------------------------------
fastcgi:
centos6:
PHP-5.3.2之前:默認不支持fpm機制,需要自行打補丁並編譯安裝
httpd2.2:默認不支持fcgi協議,需要自行編譯此模塊
解決方案:編譯安裝http-2.4,php-5.3.3+
centos7:
httpd-2.4:rpm包默認編譯支持fcgi模塊
php-fpm包:專用於將php運行與fpm模式
fcgi服務配置文件:/etc/php-fpm.conf,/etc/php-fpm.d/*.conf
連接池:
pm = static|dynamic
static:固定數量的子進程;pm.max_children
dynamic:子進程數量以動態模式管理
pm.max_children 最大進程數
pm.start_servers 開啟啟動進程數
pm.min_spare_servers 最小空閑進程
pm.max_spare_servers 最大空閑進程
pm.max_requests = 500 最大處理請求數
daemonize = no //是否將程序運行在後臺
listen = 127.0.0.1:9000 //FPM 監聽地址
listen.backlog = -1 //等待隊列的長度 -1表示無限制
listen.allowed_clients = 127.0.0.1 //僅允許哪些主機訪問
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
確保運行php-fpm 進程的用戶對session目錄有讀寫權限
mkdir /var/lib/php/session
chown apache.apache /var/lib/php/session
centos7,yum實現fastfcgi
同一臺主機:
1 安裝服務並啟動服務
yum install httpd mariadb-server php-fpm php-mysql
systemctl start httpd php-fpm mariadb
2 配置http
確認httpd服務器上必須啟用proxy_fcgi_module模塊,充當php客戶端
httpd -M |grep fcgi
cat /etc/httpd/conf.modules.d/00-proxy.conf
添加/etc/httpd/conf.d/fcgi.conf 配置文件,內容參照
DirectoryIndex index.php
? ProxyRequests Off
? ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
3 登錄數據庫添加授權賬號
4 測試連接php和mysql連接書否正常
不同主機:
註意:httpd和php-fpm需為同一主機
如分別使用不同主機,即使使用相同目錄路徑,會導致圖片信息無識別
數據庫最好使用單獨主機,只需在應用程序配置地址,賬號信息即可
----------------------------------------------------------------------------
實現:同一服務器使用虛擬主機配置多應用:
php,module方式:
1 yum install httpd mariadb-server php php-mysql
yum install php-string 安裝phpmyadmin需要此包
註釋掉httpd主配置文件中 documentroot 項
添加配置文件
vim /etc/httpd/conf.d/vhosts.conf
<virtualhost *:80>
servername www.blog.com
documentroot "/data/blog/"
errorlog "/var/log/httpd/error_blog_log"
customlog "/var/log/httpd/access_blog_log" conbined
<directory "/data/blog">
options none
allowoverride none
require all granted
</directory>
alias /pma "/data/pma"
<directory "/data/pma">
options none
allowoverride none
require all granted
</directory>
</virtualhost>
<virtualhost *:80>
servername www.dz.com
documentroot "/data/dz"
errorlog "/var/log/httpd/error_dz_log"
customlog "/var/log/httpd/access_dz_log" conbined
<directory "/data/dz">
options none
allowoverride none
require all granted
</directory>
</virtualhost>
2 下載,解壓縮應用程序文件,分別復制到相應目錄下
cp -a wordpress/* /data/blog/
cp -a phpMyAdmin-4.3.5-all-languages/* /data/pma/
cp -a upload/* /data/dz/
其中dz為discuz解壓之後的一個目錄,註意只復制此目錄即可
chown -R apache:apache /data/blog /data/dz
3 修改配置文件:
cp /data/blog/wp-config-sample.php /data/blog/wp-config.php
vim /data/blog/wp-config.php
填寫數據庫登錄信息
cp /data/pma/config.sample.inc.php /data/pma/config.inc.php
vim /data/pma/config.inc.php
填寫blowfish 中的隨機字符
4 數據庫授權賬號
5 重啟服務 並做 頁面測試
fastcgi方式:
安裝程序包時 php換成 php-fpm
特別註意:
mkdir /var/lib/php/session
chown -R apache:apache /var/lib/php/session
否則,phpmyadmin無法使用
配置文件中:如下,
且之後步驟完全和modules方式一致
vim /etc/httpd/conf.d/fcgi.conf
directoryindex index.php
<virtualhost *:80>
servername www.blog.com
documentroot "/data/blog/"
errorlog "/var/log/httpd/error_blog_log"
customlog "/var/log/httpd/access_blog_log" conbined
proxyrequests off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/blog/$1
<directory "/data/blog">
options none
allowoverride none
require all granted
</directory>
</virtualhost>
<virtualhost *:80>
servername www.pma.com
documentroot "/data/pma"
errorlog "/var/log/httpd/error_pma_log"
customlog "/var/log/httpd/access_pma_log" combined
proxyrequests off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/pma/$1
<directory "/data/pma">
options none
allowoverride none
require all granted
</directory>
</virtualhost>
<virtualhost *:80>
servername www.dz.com
documentroot "/data/dz"
errorlog "/var/log/httpd/error_dz_log"
customlog "/var/log/httpd/access_dz_log" conbined
proxyrequests off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/dz/$1
<directory "/data/dz">
options none
allowoverride none
require all granted
</directory>
</virtualhost>
------------------------------------------------------------------------------------
編譯安裝LAMP:
在centos7編譯安裝LAMP:
安裝程序順序
mariadb:通用二進制格式:mariadb-10.2.15
下載地址:
需提前準備好二進制安裝包
httpd: 編譯安裝,httpd-2.4.33
下載地址:
官網:http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.33.tar.bz2
搜狐:http://mirrors.sohu.com/apache/httpd-2.4.33.tar.bz2
需要更新apr,apr-util
下載地址:
APR: http://mirrors.hust.edu.cn/apache//apr/apr-1.6.3.tar.gz
APR-UTIL: http://mirrors.hust.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
php7:編譯安裝,php-7.2.7
下載地址:http://mirrors.sohu.com/php/php-7.2.7.tar.bz2
phpmyadmin:安裝phpmyadmin4.8.2
下載地址:https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.zip
xcache:php7 以內置加速功能,不需要安裝xcache
對比測試:使用yum一件安裝腳本安裝lamp+wordpress
使用ab -c 10 -n 100 http://192.168.65.132/
測試結果Requests per second: 5.08 [#/sec] (mean)
測試多次大概5個左右 phpmuadmin 大約26個左右
yum安裝上php-xcache之後測試結果為:還是5個 26個
編譯安裝流程:
1 準備開發環境
yum groupinstall "development tools" -y
yum install pcre-devel openssl-devel expat-devel -y
2 二進制安裝mariadb-10.2.15
##如果沒有mysql賬號,需先創建
groupadd -r -g 306 mysql
useradd -r -u 306 -g 306 -d /data/mysqldb
tar -xf mariadb-10.2.15-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/
ln -sv mariadb-10.2.15-linux-x86_64 mysql
cd mysql
chown -R mysql:mysql ./*
mkdir /data/mysqldb -p
chown -R mysql:mysql /data/mysqldb
mkdir /etc/mysql
cp support-files/my-huge.cnf /etc/mysql/my.cnf
修改配置文件,如果要寫成腳本,此項需註意,使用sed
vim /etc/mysql/my.cnf
[mysqld]
datadir = /data/mysqldb
innodb_file_per_table = on
skip_name_resolve = on
./scripts/mysql_install_db --datadir=/data/mysqldb --user=mysql
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
3 源碼編譯httpd-2.4
cd
wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.33.tar.bz2
wget http://mirrors.hust.edu.cn/apache//apr/apr-1.6.3.tar.gz
wget http://mirrors.hust.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
tar -xf httpd-2.4.33.tar.bz2
tar -xf apr-1.6.3.tar.gz
tar -xf apr-util-1.6.1.tar.gz
cp -a apr-1.6.3 httpd-2.4.33/srclib/apr
cp -a apr-util-1.6.1 httpd-2.4.33/srclib/apr-util
cd httpd-2.4.33/
./configure --prefix=/app/httpd24 \
--sysconfdir=/etc/httpd24 \
--enable-so --enable-ssl --enable-cgi \
--enable-rewrite --with-zlib --with-pcre \
--with-includedapr --enable-modules=most \
--enable-mpms-shared=all --with-mpm=prefork
make -j 4 && make install
cd /app/httpd24/
echo 'PATH=/app/httpd24/bin/:$PATH' > /etc/profile.d/httpd24.sh
. /etc/profile.d/httpd24.sh
修改配置文件中的user和group
sed -i '/^User/s/.*/User apache/' /etc/httpd24/httpd.conf
sed -i '/^Group/s/.*/Group apache/' /etc/httpd24/httpd.conf
重啟服務
apachectl start
4 源碼編譯安裝PHP:
cd
yum install libxml2-devel bzip2-devel libmcrypt-devel -y
wget http://mirrors.sohu.com/php/php-7.2.7.tar.bz2
模塊方式:
tar -xf php-7.2.7.tar.bz2
cd php-7.2.7/
參考編譯選項:php5.6
./configure --prefix=/app/php \
--with-mysql=/usr/local/mysql \
--with-openssl \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--enable-mbstring --with-png-dir \
--with-jpeg-dir --with-freetype-dir \
--with-zlib --with-libxml-dir=/usr \
--enable-xml --enable-sockets \
--with-apxs2=/appl/httpd24/bin/apxs \
--with-mcrypt --with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--with-bz2
編譯選項:php7.0+
./configure --prefix=/app/php \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-openssl \
--with-pdo-mysql=mysqlnd \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--enable-sockets \
--with-apxs2=/app/httpd24/bin/apxs \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--disable-fileinfo \
--enable-maintainer-zts
註意: php-7.0以上版本使用--enable-mysqlnd --with-mysqli=mysqlnd ,
原--with-mysql不再支持
--enable-maintainer-zts
如果http編譯成event或者worker,必須加上此項
make -j 4 && make install
準備配置文件:
cp php.ini-production /etc/php.ini
編譯apache配置文件httpd.conf,使apache支持php
vim /etc/httpd24/httpd.conf
添加2行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
定位至: DirectoryIndex index.html
修改為: DirectoryIndex index.php index.html
重復服務:
apachectl restart
5 源碼編譯安裝PHP: fpm方式
tar -xf php-7.2.7.tar.bz2
cd php-7.2.7/
./configure --prefix=/app/php \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-openssl \
--with-pdo-mysql=mysqlnd \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--enable-sockets \
--enable-fpm \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--enable-maintainer-zts \
--disable-fileinfo
make -j 4 && make install
安裝後配置:
cp php.ini-production /etc/php.ini
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
cd /app/php/etc
cp php-fpm.conf.default php-fpm.conf
cp php-fpm.d/www.conf.default php-fpm.d/www.conf
vim php-fpm.d/www.conf
user = apache
group = apache
修改php-fpm程序的用戶和組,可選項,不修改也可以
rename ini so /etc/php.d/*
修改/etc/php.d/*.ini ===> /etc/php.d/*.so
php7.2.7需要,否則啟動會有一堆報錯
service php-fpm start
配置httpd.conf
vim /etc/http24/httpd.conf
取消下面兩行的註釋:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
定位至:DirectoryIndex index.html
修改為:DirectoryIndex index.php index.html
添加下面四行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1
重啟服務:
apachectl restart
編譯過程報錯記錄:
1 make[1]: Warning: File `/root/php-7.2.7/ext/date/php_date.c' has
modification time 1.9e+06 s in the future
問題原因:
系統時間設置不正確,導致安裝時間是系統時間未來的時間
解決方案:
修改正確系統時間
2 PHP Startup: Unable to load dynamic library 'curl.so' ....
解決方案:
rename ini so /etc/php.d/*
LAMP 一鍵安裝腳本:
1 yum安裝module方式
2 yum安裝fpm方式
3 編譯安裝方式
第24章,實現LAMP架構