#實現LAMP架構php
1. LAMP介紹
什麼是LAM(M)P 一套開源組合,用來構建應用程序服務器css
L:linux
A:apache (httpd) 承載客戶端鏈接,處理靜態資源,經過客戶端適配器轉發動態資源至後端服務器
M: mysql, mariadb 數據庫選擇,與編程語言沒有關係,與程序員解決方案有關係
(M):memcached
P:php, perl, python 程序運行所須要的環境
數據分類html
非機構化數據 數據結構不規則或不完整,沒有預約義的數據模型,不方便用數據庫二維邏輯表來表現的數據
結構化數據 可使用關係型數據庫表示和存儲,表現爲二維形式的數據。通常特色是:數據以行爲單位,一行數據表示一個實體的信息,每一行數據的屬性是相同的
半結構化數據 半結構化數據是結構化數據的一種形式,它並不符合關係型數據庫或其餘數據表的形式關聯起來的數據模型結構,但包含相關標記,用來分隔語義元素以及對記錄和字段進行分層
WEB資源類型前端
靜態資源 原始形式與響應內容一致,在客戶端瀏覽器執行
動態資源 原始形式一般爲程序文件,須要在服務器端執行以後,將執行結果返回給客戶端,客戶端與服務器端看到的源碼不一樣
httpd怎麼處理動態資源python
httpd只是一個純粹的靜態http協議,所能完成的工做爲分析用戶請求報文,理解用戶請求資源,根據本地的路徑映射基於本地磁盤加載內容,將內容自己封裝爲一個響應報文,併發還給客戶端
咱們不少時候指望web程序經過MIME識別出用戶請求類型後,將執行結果返回給用戶,而不是請求的內容,這就須要經過適配機制(例如CGI),將用戶的動態資源請求,轉發到後端服務器(例如php),將客戶端請求執行後以數據流的形式,經過web服務器響應給用戶
CGI:Common Gateway Interface(通用網關接口) 可讓一個客戶端,從網頁瀏覽器經過http服務器向執行在網絡服務器上的程序傳輸數據;CGI描述了客戶端和服務器程序之間傳輸的一種標準mysql
請求流程: Client – (httpd) --> httpd – (cgi) --> application server (program file) – (mysql) --> mysql
客戶端發送一個請求訪問動態頁面,經過http協議訪問網站
httpd服務器不能處理動態資源,經過cgi協議,發送給cgi應用程序
cgi應用程序執行後,經過mysql調用數據,再經過httpd將結果返回給客戶端
FastCGI 早期CGI與web服務是在同一臺主機上的,web服務器承載大量的用戶請求服務於靜態資源,同時還須要調用另外一個組件來執行動態資源,生成結果,給單臺服務器帶來巨大壓力 FastCGI,經過套接字來完成先後端的分離,前端服務器經過反向代理的方式與後端服務器通訊,當動態文件數據量較大時,一般不會放在本地的文件中,爲了加速較大量數據的解鎖,須要設置專業的數據存儲系統,
不須要文件自身作處理,只須要經過API調對方的服務接口
剝離數據與文件的關係,單獨存儲
php PHP是通用服務器端腳本編程語言,其主要用於web開發以實現動態web頁面,它也是最先實現將腳本嵌入HTML源碼文檔中的服務器端腳本語言之一。同時,php還提供了一個命令行接口,所以,其也能夠在大多數系統上做爲一個獨立的shell來使用,意味着php能夠在其交互式窗口直接運行linux
官方網站 官網:http://www.php.net/
Zend Engine 開源的、PHP腳本語言的解釋器,將PHP代碼的處理過程分紅了兩個階段
分析PHP代碼並將其轉換爲稱做Zend opcode的二進制格式opcode(相似Java的字節碼),並將其存儲於內存中
使用Zend Engine去執行這些轉換後的Opcode
php的加速器 基於PHP的特殊擴展機制如opcode緩存擴展也能夠將opcode緩存於php的共享內存中,從而可讓同一段代碼的後續重複執行時跳過編譯階段以提升性能。這些加速器並不是真正提升了opcode的運行速度,而僅是經過分析opcode後並將它們從新排列以達到快速執行的目的
APC (Alternative PHP Cache) 遵循PHP License的開源框架,PHP opcode緩存加速器,目前的版本不適用於PHP 5.4 項目地址:http://pecl.php.net/package/APC
eAccelerator 源於Turck MMCache,早期的版本包含了一個PHP encoder和PHP loader,目前encoder已經不在支持。 項目地址: http://eaccelerator.net/
XCache 快速並且穩定的PHP opcode緩存,通過嚴格測試且被大量用於生產環境,收錄EPEL源 項目地址:http://xcache.lighttpd.net/
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
NuSphere PhpExpress NuSphere的一款開源PHP加速器,它支持裝載經過NuSphere PHP Encoder編碼的PHP程序文件,並可以實現對常規PHP文件的執行加速。 項目地址:http://www.nusphere.com/products/phpexpress.htm
2. 在httpd中使用php的方法
3. 實現LAMP架構
以模塊(Modules)方式實現 CentOS 7:涉及安裝程序 Modules:httpd, php, php-mysql, mariadb-server CentOS 6:涉及安裝程序 Modules:httpd, php, php-mysql, mysql-server
安裝,若是已經安裝了httpd,直接安裝php,會經過依賴關係會默認安裝php-cli和php-common
[ root@hai7-7 ~] $yum install php
安裝成功後,會在/etc/httpd/conf.d/下生成新的配置文件,php.conf
[ root@hai7-7 ~] $vim php.conf
< FilesMatch \.php$>
SetHandler application/x-httpd-php <= = 全部以.php結尾的文件,都交給httpd-php處理
< /FilesMatch>
DirectoryIndex index.php <= = 設置默認主頁
php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session" <= = 保存session目錄
在httpd模塊目錄下,/etc/httpd/conf.modules.d/會增長一個php模塊配置文件,10-php.conf
[ root@hai7-7 conf.modules.d] $vim 10-php.conf
< IfModule prefork.c> <= = 只要在prefork.c模型下才會裝載名爲php5_module的模塊
LoadModule php5_module modules/libphp5.so
< /IfModule> 也就是說httpd以線程模式運行的話,須要裝入的模塊爲php-zts,在extras倉庫
檢查php5模塊是否已裝載,若是未加載,須要檢查配置文件和安裝的程序包是否相匹配
root@hai7-7 conf.modules.d] $httpd -M
測試,在httpd頁面路徑下建一個.php文件,而後訪問主頁,若是能夠看到php設置環境界面,說明php模塊能夠正常運行
[ root@hai7-7 html] $vim index.php
< ?php
phpinfo( ) ;
?>
安裝mysql,同時讓php支持鏈接mysql,須要組件爲 php-mysq
[ root@hai7-6 ~] $yum -y install mariadb-server php-mysql
在web服務器主機,編輯一個測試代碼
< ?php
$conn = mysql_connect( '127.0.0.1' ,'root' ,'' ) ; < 本機測試用,生產環境不能夠用root,配置文件容易丟
if ( $conn )
echo "OK" ;
else
echo "Failure" ;
?>
重啓服務後,訪問web頁面,若是出現「Failure」錯誤,說明php擴展沒有問題,只是鏈接數據庫失敗,多是數據庫沒有啓動,或者帳號密碼錯誤,或者數據服務器端口錯誤等。若是出現ok界面,說明能夠正常鏈接至數據庫,IMP平臺也就搭建成功,php程序放在網頁目錄下就能夠對外提供服務了
以FastCGI實現(php-fpm) php包與php-fpm包是互斥的,只能安裝一種,若是測試機上有php須要先卸載 FastCGI涉及程序:httpd, php-fpm, php-mysql, mariadb-server
安裝程序包,httpd、php-mysql、mariadb-server
[ root@hai7-7 ~] $yum install httpd php-mysql php-fpm mariadb-server -y
修改mysql數據庫配置文件,不容許反向解析ip
[ root@hai7-7 ~] $vim /etc/my.cnf.d/server.cnf
[ mysqld]
skip_name_resolve= ON
httpd要適配到FastCGI服務端,依賴於模塊proxy_fcgi_module,2.4默認啓動狀態,2.2須要在epel源安裝
[ root@hai7-7 ~] $httpd -M | grep cgi
proxy_fcgi_module ( shared)
編輯fastCGI服務器端配置文件/etc/php-fpm.conf
用來配置php守護進程工做特性(如何管理本身的進程),/etc/php.ini依然生效,用來配置加載那些模塊,修改了模塊設置,就須要要重啓php-fpm服務
[ root@hai7-7 ~] $vim /etc/php-fpm.conf
include= /etc/php-fpm.d/*.conf <= = 模塊化配置加載此目錄下全部的配置文件
[ global]
pid = /run/php-fpm/php-fpm.pid <= = 守護進程的pid
error_log = /var/log/php-fpm/error.log <= = 錯誤日誌
log_level = notice <= = 日子記錄級別
daemonize = no <= = 表示是否以守護進程的方式運行,定義爲no,由於要託管到 systemd上
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; Pool Definitions ;
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; See /etc/php-fpm.d/*.conf <= = Connection Pool鏈接池的定義都在php-fpm.d/下模塊化的配置文件中
定義鏈接池的配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[ root@hai7-7 ~] $vim /etc/php-fpm.d/www.conf
[ www] <= = 鏈接池的名字,此名能夠自定義
listen = 127.0.0.1:9000 <= = 監聽在哪一個地址哪一個端口上,本機全部ipv4地址可用修改成0.0.0.0
listen.backlog = -1 <= = 隊列長度,-1表示在服務器承載範圍內不設限,隊列時放在內存中的,防止didos攻擊,推薦設限
user = apache <= = 表示子進程以哪一個身份運行
group = apache
pm = dynamic <= = 定義管理鏈接池的模式,有兩個值static和dynamic
static: <= = 靜態模式,直接啓用全部子進程
dynamic: <= = 動態管理模式
following directives:
pm.max_children:'最大鏈接數,動態靜態都有用,默認值50,經過壓測肯定'
pm.start_servers:'服務啓動時啓動的進程數,此參數動態模式有用,默認值5'
pm.min_spare_servers:'空閒進程數,此參數動態模式有用,默認值5'
pm.max_spare_servers:'最大空閒進程數,此參數動態模式有用,默認值35'
pm.max_requests = 500 <= = 進程最大服務數,達到此值就會kill生成新的,設爲0表示不設限
pm.status_path = /status <= = pm狀態頁面
ping.path = /ping <= = 判斷服務工做狀態的URL
ping.response = pong <= = 判斷/ping後返回的結果,能夠自定義
php_value[ session.save_handler] = files <= = 定義會話管理模式
php_value[ session.save_path] = /var/lib/php/session <= = 會話保存路徑,確保此文件存在,且apache有讀寫權限
建立session(會話)管理目錄,而且修改成apache具備讀寫權限
[ root@hai7-7 ~] $mkdir /var/lib/php/session
[ root@hai7-7 ~] $chown apache.apache /var/lib/php/session/
在虛擬主機上配置http,須要手動指明默認主頁文件使用index.php1. '編輯http配置文件,添加FCGI的配置'
[ root@hai7-7 data] $vim /etc/httpd/conf.d/text.conf
DirectoryIndex index.php <= = 指明默認主頁文件爲index.php
< VirtualHost *:80>
ServerName www.v9.com
DocumentRoot /data/virtual/v9.com
ProxyRequests Off <= = 關閉正向代理
ProxyPassMatch ^/( .*\.php) $ fcgi://192.168.50.115:9000/apps/vhosts/b.net/$1 <= = 反向代理,以php結尾的URL,轉發給fcgi由/apps/vhosts/b.net/$1 提供,後面的$1 是指前面的/( .*\.php)
< Directory 「/data/virtual/v9.com」 > <= = 受權限制目錄 Options None AllowOverride None Require all granted < /Directory> < /VirtualHost>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
在指定的頁面路徑下建一個網頁測試文件,重啓服務
[ root@hai7-7 v9.com] $ vim /data/virtual/v9.com/index.php
< ?php
phpinfo( ) ;
?>
4. 常見LAMP應用
phpmyadmin 一個以PHP爲基礎,以Web-Base方式架構在網站主機上的MySQL的數據庫管理工具,讓管理者可用Web接口管理MySQL數據庫
獲取站點 下載:https://www.phpmyadmin.net/downloads/
佈置phpmyadmin
將工具包解壓後,移動至httpd服務的DocumentRoot下,作一個指向軟鏈接,方便切換版本
1. '解壓文件'
[ root@hai7-7 ~] $tar xf phpMyAdmin-4.0.10.20-all-languages.tar.gz
2. '移動至頁面目錄下'
[ root@hai7-7 ~] $mv phpMyAdmin-4.0.10.20-all-languages /data/virtual/
3. '作軟鏈接'
[ root@hai7-7 ~] $ln -sv phpMyAdmin-4.0.10.20-all-languages v9.com
進入phpMyAdmin-4.0.10.20-all-languages目錄,將配置文件模板,修改成配置文件,去掉sample
[ root@hai7-7 ~] $cp config.sample.inc.php config.inc.php
修改配置文件config.inc.php
[ root@hai7-7 ~] $vim /data/virtual/phpMyAdmin-4.0.10.20-all-languages/config.inc.php
$cfg [ 'blowfish_secret' ] = '123456' ; <= = 輸入一個隨機字符串
$cfg [ 'Servers' ] [ $i ] [ 'host' ] = 'localhost' ; <= = 修改鏈接地址,與數據庫中受權的用戶地址要相同
安裝php相關組件,重啓服務後,即在httpd頁面登入工具,帳號密碼爲數據庫受權的帳戶
yum install php-mbstring <= = 多字符支持
yum install php-mcrypt <= = 加密相關
systemctl restart php-fpm <= = 重啓php-fpm
WordPress WordPress是一款開源的我的網站搭建程序,用戶能夠在支持PHP和MySQL數據庫的服務器上架設屬於本身的網站
獲取地址 https://cn.wordpress.org/
部署WordPress
將得到的壓縮包,解壓到網頁目錄中,進入目錄找到配置文件模板,將其重命名爲wp-config.php
[ root@hai7-7 ~] $cd /var/www/html/wordpress-4.9
[ root@hai7-7 wordpress-4.9] $cp wp-config-sample.php wp-config.php
修改配置文件權限,保證Apache有讀寫權限
[ root@hai7-7 ~] $chmod 666 wp-config.php
在數據庫中建立一個網站專用數據庫,專用帳戶
[ root@hai7-7 ~] $mysql
MariaDB [ ( none) ] > CREATE DATABASE wpdb;
MariaDB [ ( none) ] > GRANT ALL ON phptest.* TO 'wpuser' @'172.20.0.%' IDENTIFIED BY 'centos' ;
編輯配置文件,修改以下項,以鏈接數據庫
[ root@hai7-7 ~] $vim /var/www/html/wordpress-4.9/wp-config.php
define( 'DB_NAME' , 'phptest' ) ; <= = 指定數據庫名
define( 'DB_USER' , 'root' ) ; <= = 指定用戶名
define( 'DB_PASSWORD' , '' ) ; <= = 指定密碼
define( 'DB_HOST' , '192.168.50.115' ) ; <= = 指定主機
或者將配置文件刪除,訪問網站,會出現配置頁面,填寫相關信息後,會生成配置文件,將內容複製到wordpress目錄下生成一個配置文件wp-config.php
5. 將httpd/fpm分別以獨立主機運行
6 搭建虛擬主機,在同一臺服務器上運行2個網站
實驗目標 實現LAMP架構,在web服務器上維護兩個網站
使用的網頁資源
wordpress-4.9.4-zh_CN.tar.gz
Discuz_X3.2_SC_UTF8.zip
搭建過程
數據庫服務器
先搭建數據庫服務器,這裏以服務器C(107)爲例
[ root@hai7-6 ~] $yum install mariadb-server
計劃運行兩個網頁,因此在數據庫中創建相應數據庫和帳戶
1. '爲wordpress網頁創建數據庫和帳戶'
[ root@hai7-6 ~] $mysql -e "CREATE DATABASE wpdb;GRANT ALL ON wpdb.* TO wpuser@'192.168.50.%' IDENTIFIED BY 'centos'"
2. '爲Discuz網頁創建數據庫和帳戶'
[ root@hai7-6 ~] $mysql -e "CREATE DATABASE Dzdb;GRANT ALL ON Dzdb.* TO dzuser@'192.168.50.%' IDENTIFIED BY 'centos'"
php-fpm服務器
服務器B(110),安裝php-fpm,鏈接數據庫組件php-mysql
[ root@hai7-6 ~] $yum install php-fpm php-mysql
分別創建2個網站對應的網頁目錄,Discuz稍後重命名
[ root@hai7-6 ~] $mkdir /data/wordpress
在官網獲取頁面文件包wordpress-4.9.4-zh_CN.tar.gz和Discuz_X3.2_SC_UTF8.zip,分別解壓至對應網頁目錄
[ root@hai7-6 ~] $tar xvf wordpress-4.9.4-zh_CN.tar.gz
[ root@hai7-6 ~] $unzip Discuz_X3.2_SC_UTF8.zip
'Discuz解壓後的目錄爲upload,重命名爲discuz'
[ root@hai7-6 ~] $mv upload/ discuz
修改wordpress配置文件
1
2
3
4
5
6
7
8
9
10
11
12
1. '進入wordpress目錄下,將配置文件模板修改成配置文件'
[ root@hai7-8 ~] $mv wp-config-sample.php wp-config.php
2. '修改配置文件'
[ root@hai7-8 ~] $vim /data/wordpress/wp-config.php
/** WordPress數據庫的名稱 */
define( 'DB_NAME' , 'wpdb' ) ;
/** MySQL數據庫用戶名 */
define( 'DB_USER' , 'wpuser' ) ;
/** MySQL數據庫密碼 */
define( 'DB_PASSWORD' , 'centos' ) ;
/** MySQL主機 */
define( 'DB_HOST' , '192.168.50.107' ) ;
讓Apache對discuz目錄具備寫權限
[ root@hai7-8 /data] $setfacl -R -m u:apache:rwx discuz/
httpd服務器
安裝httpd服務
[ root@hai7-8 ~] $yum -y install httpd
修改httpd配置文件,定義兩個虛擬主機,並受權目錄[ root@hai7-8 ~] $vim /etc/httpd/conf.d/test.conf
DirectoryIndex index.php <= = 指定默認網頁文件爲index.php
< VirtualHost *:80> <= = 設立虛擬主機
ServerName www.wordpress.net <= = 服務名
DocumentRoot /data/wordpress/ <= = web服務頁面路徑
ProxyRequests Off <= = 不啓用正向代理
ProxyPassMatch ^/( .*\.php) $ fcgi://127.0.0.1:9000/data/wordpress/$1 <= = 啓用反向代理
< Directory "/data/wordpress/" > <= = 受權虛擬主機服務目錄
Require all granted
< /Directory>
< /VirtualHost>
< VirtualHost :80> <= = 第二個虛擬機 ServerName www.discuz.net DocumentRoot /data/discuz/ ProxyRequests Off ProxyPassMatch ^/( . .php) $ fcgi://127.0.0.1:9000/data/discuz/$1 < Directory 「/data/discuz/」 > Require all granted < /Directory> < /VirtualHost>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
客戶端 在客戶端D上修改hosts文件,模擬DNS解析,登陸網頁檢測
[ root@hai6 ~] $vim /etc/hosts
192.168.50.110 www.wordpress.net www.discuz.net
7 CentOS7編譯安裝LAMP,基於fastcgi方式
編譯環境
httpd可移植運行庫 apr-1.6.3.tar.gz apr-util-1.6.1.tar.gz
Apache源碼 httpd-2.4.34.tar.bz2
mariadb二進制文件 mariadb-10.2.15-linux-x86_64.tar.gz
php解釋器 php-7.1.18.tar.bz2
頁面文件 wordpress-4.9.4-zh_CN.tar.gz
編譯順序 mariadb–>httpd–>php mariadb和httpd前後能夠隨意,php依賴於mariadb,須要最後安裝
編譯流程
準備開發包組
[ root@hai7-8 ~] $yum groupinstall "Development Tools"
編譯httpd
安裝依賴包
[ root@hai7-7 ~] $yum install pcre-devel openssl-devel expat-devel -y
官方下載httpd源碼,以及依賴的apr包(apr-1.6.3.tar.gz、apr-util-1.6.1.tar.gz 、httpd-2.4.34.tar.bz2),導入linux中,而後解壓縮
[ root@hai7115 srcd] $tar xf apr-1.6.3.tar.gz
[ root@hai7115 srcd] $tar xf apr-util-1.6.1.tar.gz
[ root@hai7115 srcd] $tar xf httpd-2.4.34.tar.bz2
將apr和apr-util整個目錄拷貝到httpd-2.4.34/srclib/目錄下,而且更名(必須)爲apr和apr-util
[ root@hai7115 srcd] $cp -r apr-1.6.3 httpd-2.4.34/srclib/apr
[ root@hai7115 srcd] $cp -r apr-util-1.6.1 httpd-2.4.34/srclib/apr-util
編譯,./configure做用,檢查系統環境和配置生成makefile文件,檢查全部所須要的編譯操做的依賴環境是否能夠知足,若是能夠知足,將檢查結果和命令行定義的選項特性結合makefile.in生成爲makefile文件 –enable-so \ enable表示啓用某個內建特性; –disable表示禁用程序自帶的特性; –with表示須要調用另一個軟件程序一塊兒安裝; –without表示不結合;
1
2
3
4
5
6
7
8
9
10
11
12
13
'進入httpd解壓後的目錄,運行configure'
./configure\
--prefix= /app/httpd24\
--enable-so\ <= = 是否支持動態模塊
--enable-ssl\ <= = 是否支持加密
--enable-cgi\
--enable-rewrite\
--with-zlib\
--with-pcre\ <= = 正則表達式
--with-included-apr\ <= = 表示已經將apr相關須要編譯的內容放在httpd相關的路徑下,能夠一塊兒編譯
--enable-modules= most\ <= = 是否支持大部分模塊
--enable-mpms-shared= all\
--with-mpm= prefork <= = 是否支持mpm的prefork工做模型
構造和安裝,make爲項目管理工具,組織項目間的依賴關係,讓最終的構建者可以快速構建項目代碼,調用GCC等編譯器,編譯成特定程序包。 安裝步驟爲大量的cp操做,將編譯好的二進制程序放到對應目錄下,make install會調用相應腳本執行cp動做。 建立apache帳號,不建立系統默認啓動的帳號爲daemon
1. '構造和安裝 '
[ root@hai7115 httpd-2.4.34] $make -j 8 && make install
2. '建立用戶'
[ root@hai7-7 ~] $useradd -r -s /sbin/nologin apache
3. '修改配置文件中的用戶項,將httpd帳號修改成apache'
[ root@hai7-7 ~] $vim /app/httpd24/conf/httpd.conf
User apache
Group apache
編譯安裝目錄
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[ root@hai7-8 /app/httpd24] $ll
bin
build
cgi-bin <= = 動態資源存放目錄,cgi腳本
conf
error <= = 錯誤頁(例如訪問頁面不存在返回404等)
htdocs <= = 網頁測試頁面
icons
include <= = 調用當前開發庫作二次開發,須要知道API接口有哪些接口可被調用,對於c語言而言,都在include裏用頭文件標識
lib <= = 當前程序提供的庫文件,分爲共享庫和開發庫,共享庫,被本程序的多個程序或程序包共享使用,開發庫時作二次開發的的調用接口
logs <= = 日誌文件
man <= = 幫助手冊
manual <= = 超連接手冊,須要web服務進行訪問,在主配置文件中啓用
modules <= = 以編譯的模塊
將二進制程序放入PATH變量中,啓動測試,測試所見頁面文件來自/app/httpd24/htdocs目錄下
1. '加入PATH列表'
[ root@hai7-7 ~] $echo PATH= /app/httpd24/bin:$PATH > /etc/profile.d/lamp.sh
2. '重啓生效'
[ root@hai7-7 ~] $. /etc/profile.d/lamp.sh
讓自編譯httpd開機啓動,將其放入系統啓動腳本rc.local,加上執行權限。或者寫啓動腳本,寫啓動腳本能夠用service控制啓動
1. '將啓動程序放在啓動腳本中'
[ root@hai7-7 rc.d] $vim /etc/rc.d/rc.local
/app/httpd24/bin/apachectl
2. '加上執行權限'
[ root@hai7-7 rc.d] $chmod +x /etc/rc.d/rc.local
二進制編譯數據庫
解壓數據庫二進制包到指定目錄下,目錄必須/usr/local
[ root@hai7-7 ~] $tar xvf mariadb-10.2.15-linux-x86_64.tar.gz -C /usr/local
解壓後程序名爲mariadb,須要修改成mysql,建一個軟鏈接,創建一個系統mysql帳號,修改全部者和所屬組
1. '進入解壓目錄'
[ root@hai7-7 ~] $cd /usr/local/
2. '創建軟鏈接,重命名程序'
[ root@hai7-7 local/] $ln -s mariadb-10.2.15-linux-x86_64/ mysql
3. '創建系統帳戶'
[ root@hai7-7 local/] $useradd -r -s /sbin/nologin mysql
4. '修改權限'
[ root@hai7-7 local] $chown -R mysql.mysql mysql/
準備數據目錄
1. '創建數據庫目錄'
[ root@hai7-7 ~] $mkdir /app/mysql
2. '將目錄所屬組所屬者修改成mysql'
[ root@hai7-7 ~] $chown mysql.mysql /app/mysql
3. '運行解壓包帶的腳本,生成系統數據庫,必須在解壓目錄(/usr/local/mysql)運行,指定路徑爲新建的數據庫目錄,指定帳號'
[ root@hai7-7 mysql] $scripts /mysql_install_db --datadir= /app/mysql --user= mysql
準備配置文件
1. '在etc下建一個獨立配置文件目錄'
[ root@hai7-7 ~] $mkdir /etc/mysql
2. '拷貝二進制包中模板來修改'
[ root@hai7-7 ~] $cp /usr/local/mysql/support-files/my-huge.cnf /etc/mysql/my.cnf
3. '修改配置文件,指定數據庫目錄'
[ root@hai7-7 ~] $vim /etc/mysql/my.cnf
[ mysqld]
datadir= /app/mysql
準備服務腳本,壓縮包有模板文件,而後加入服務腳本啓動列表中
[ root@hai7-7 ~] $cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[ root@hai7-7 ~] $chkconfig --add mysqld
將mysql下的bin放入PATH變量中,加入httpd自定義變量文件中
[ root@hai7-7 bin] $vim /etc/profile.d/lamp.sh
PATH= /app/httpd24/bin:/usr/local/mysql/bin:$PATH
'生效一下'
[ root@hai7-7 bin] $. /etc/profile.d/lamp.sh
跑一下安全腳本mysql_secure_installation後,爲wordpress創建一個使用的帳號
'創建wordpress網頁用的帳號和數據庫'
[ root@hai7-7 bin] $mysql -e "CREATE DATABASE wpdb2;GRANT ALL ON wpdb2.* TO wpuser@'localhost' IDENTIFIED BY 'centos'"
編譯php
安裝依賴包 libxml2-devel
:php有些功能啓用時,須要使用代碼處理xml格式的文檔,必須兼容使用xml的開發庫 bzip2-devel
:php自己使用壓縮解壓功能,所依賴的庫 libmcrypt-devel
:加密解密功能(epel)
[ root@hai7-7 bin] $yum -y install libxml2-devel bzip2-devel libmcrypt-devel
解壓php源碼文件,進入目錄,運行configure 基於模塊方式編譯,加以下項,不可與fpm模式共用,使用apxs2編譯成httpd模塊 –with-apxs2=/app/httpd24/bin/apxs 基於fpm模式編譯 –enable-fpm 注意:php-7.0以上版本使用–enable-mysqlnd --with-mysqli=mysqlnd ,原–with-mysql再也不支持
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1. '解壓源碼包'
[ root@hai7-7 data] $tar xvf php-7.1.18.tar.bz2
2. '進入目錄'
[ root@hai7-7 data] $cd php-7.1.18/
3. '運行configure'
[ root@hai7-7 php-7.1.18] $./configure --prefix= /app/php \
--enable-mysqlnd \
--with-mysqli= mysqlnd \ <= = 鏈接數據庫的3種方法之一
--with-openssl \
--with-pdo-mysql= mysqlnd \ <= = 鏈接數據庫的方法之一,基於對象方式來訪問數據的接口
--enable-mbstring \ <= = 支持多字節
--with-freetype-dir \ <= = 與字體處理相關聯的庫
--with-jpeg-dir \ <= = 與圖形處理相關的
--with-png-dir \ <= = png圖形處理相關
--with-zlib \ <= = 壓縮解壓縮相
--with-libxml-dir= /usr \ <= = 處理xml格式文檔
--enable-xml \ <= = 啓用xml功能
--enable-sockets \ <= = 支持基於sockets本地進行通信
--enable-fpm \ <= = 基於fpm工做
--with-config-file-path= /etc \ <= = 指明config路徑
--with-config-file-scan-dir= /etc/php.d \ <= = 模塊化配置文件路徑
--enable-maintainer-zts \ <= = mpm若是是prefork不須要此項,此項爲啓用線程化的php模塊
--disable-fileinfo 禁止訪問file信息
4. '構造和安裝'
[ root@hai7-7 php-7.1.18] $make -j 8 && make install
將php的bin目錄加入PATH變量
[ root@hai7-7 bin] $cat /etc/profile.d/lamp.sh
PATH= /app/httpd24/bin:/usr/local/mysql/bin:/app/php/bin:$PATH
爲php提供配置文件,在編譯目錄下複製一份到etc目錄下,命名爲php.ini,默認設置,除時區外,一般不須要修改 php.ini-development(開發環境)和php.ini-production(生成環境),兩者配置參數不一樣,根據環境選擇
[ root@hai7-7 ~] $cp /data/php-7.1.18/php.ini-production /etc/php.ini
在Apache配置文件中加入一些設置,讓其識別php程序,創建一個獨立子配置文件1. '先在主配置文件中加入include,讓其能夠包含子配置文件'
[ root@hai7-7 ~] $vim /app/httpd24/conf/httpd.conf
Include conf/extra/php.conf
2. '創建子配置文件,加入FCGI配置項'
[ root@hai7-7 ~] $cd /app/httpd24/conf/extra/
[ root@hai7-7 extra] $vim php.conf
AddType application/x-httpd-php .php <= = 讓httpd能夠識別php文件
AddType application/x-httpd-php-source .phps
ProxyRequests Off <= = 不啓動正向代理 ProxyPassMatch ^/( .*.php) $ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1 <= = 啓動反向代理```
啓用httpd的兩個模塊,定位到LoadModule,去掉註釋便可,指定默認頁面文件爲php
[ root@hai7-7 ~] $vim /app/httpd24/conf/httpd.conf
DirectoryIndex index.php index.html <= = 指定默認頁面文件爲php文件,沒有在讀取html
LoadModule proxy_module modules/mod_proxy.so <= = 須要啓動的模塊
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so <= = 須要啓動的模塊
準備啓動腳本
1. '將解壓目錄下init.d.php-fpm文件做爲模板,拷貝到init.d中'
[ root@hai7-7 ~] $cp /data/php-7.1.18/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
2. '爲其加上執行權限'
[ root@hai7-7 ~] $chmod +x /etc/init.d/php-fpm
3. '加入到啓動服務列表'
[ root@hai7-7 ~] $chkconfig --add php-fpm
準備php配置文件,和www的子配置文件
1
2
3
4
5
6
7
8
9
10
11
12
1. '編譯後已經生成,只是文件後綴不符合要求,進入/app/php/etc目錄,修改後綴,啓動服務'
[ root@hai7-7 ~] $cd /app/php/etc
[ root@hai7-7 etc] $cp php-fpm.conf.default php-fpm.conf <= = 主配置文件
2.' 進入 /app/php/etcphp-fpm.d'
[ root@hai7-7 etc] $cd php-fpm.d/
[ root@hai7-7 php-fpm.d] $cp www.conf.default www.conf <= = 子配置文件
3. '在子配置文件中修改運行帳號,還能夠定義監聽端口等'
[ root@hai7-7 php-fpm.d] $vim www.conf
user = apache <= = 將運行帳號修改成apache
group = apache
4. '啓動服務'
[ root@hai7-7 php-fpm.d] $service php-fpm start
workpress
解壓workpress文件,拷貝到網頁文件目錄下(/app/httpd24/htdocs/)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1. '解壓文件'
[ root@hai7-7 data] $tar xvf wordpress-4.9.4-zh_CN.tar.gz
2. '拷貝到頁面目錄下'
[ root@hai7-7 data] $cp -r wordpress/* /app/httpd24/htdocs/
3. '準備wordpress的配置文件'
[ root@hai7-7 htdocs] $cp wp-config-sample.php wp-config.php
4. '修改配置,鏈接數據庫'
[ root@hai7-7 htdocs] $vim wp-config.php
/** WordPress數據庫的名稱 */
define( 'DB_NAME' , 'wpdb2' ) ;
/** MySQL數據庫用戶名 */
define( 'DB_USER' , 'wpuser' ) ;
/** MySQL數據庫密碼 */
define( 'DB_PASSWORD' , 'centos' ) ;
/** MySQL主機 */
define( 'DB_HOST' , 'localhost' ) ;
8 CentOS6編譯安裝PHP-FPM模式的LAMP
編譯環境
mairadb:通用二進制格式,mariadb-5.5.56
httpd:編譯安裝,httpd-2.4.27
php5:編譯安裝,php-5.6.30
Wordpress: 安裝wordpress-4.8-zh_CN.tar.gz
Xcache:編譯安裝xcache-3.2.0
實現順序 mariadb–>httpd–>php
編譯過程
安裝相關包 bzip2-devel libxml2-devel libmcrypt-devel(epel源)
編譯安裝php
進入解壓目錄 cd php-5.6.30/
編譯安裝
運行configure腳本 ./configure --prefix=/app/php5 --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-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-mcrypt --with-config-file-path=/etc/php5 --with-config-file-scan-dir=/etc/php5.d --with-bz2
構造和安裝 make -j 4 && make install
實現php的配置文件和服務腳本
mkdir /etc/php5 /etc/php5.d/
cd php-5.6.30/
cp php.ini-production /etc/php5/php.ini
cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
chmod +x /etc/rc.d/init.d/php-fpm
chkconfig --add php-fpm
chkconfig --list php-fpm
編輯php配置文件
cd /app/php5/etc
cp php-fpm.conf.default php-fpm.conf
vim /app/php5/etc/php-fpm.conf pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 2 pm.max_spare_servers = 5 和pm.start_servers一致 pid = /app/php5/var/run/php-fpm.pid
service php-fpm restart
修改httpd24的配置文件
vim /app/apache24/conf/httpd.conf 說明:啓用httpd的相關模塊 在Apache httpd 2.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 添加以下二行 AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps 定位至DirectoryIndex index.html 修改成: DirectoryIndex index.php index.html 加下面兩行 ProxyRequests Off 關閉正向代理 ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1 service httpd24 restart
測試 vim /app/httpd24/htdocs/index.php
< ?php
$link = mysql_connect( '127.0.0.1' ,'root' ,'magedu' ) ;
if ( $link )
echo "Success..." ;
else
echo "Failure..." ;
mysql_close( ) ;
phpinfo( ) ;
?>
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7f770a53f2.css" rel="stylesheet">
</div>