1. 程式人生 > >lamp編譯安裝

lamp編譯安裝

Linux lamp

lamp編譯安裝

CentOS 6:
PHP-5.3.2之前:默認不支持fpm機制;需要自行打補丁並編譯安裝
httpd-2.2:默認不支持fcgi協議,需要自行編譯此模塊
解決方案:編譯安裝httpd-2.4, php-5.3.3+
CentOS 7:
httpd-2.4:rpm包默認編譯支持fcgi模塊
php-fpm包:專用於將php運行於fpm模式

httpd:編譯安裝,httpd-2.4版本源碼,註意在centos6編譯httpd2.4依賴於apr和apr-util較新版本且也要編譯安裝;
php5:編譯安裝,php-5.4版本源碼,可編譯為fpm或編譯為模塊;
mariadb:通用二進制格式,mariadb-5.5版本源碼;

註意:任何一個程序包被編譯操作依賴到時,需要安裝此程序包的“開發”包組件,其包名一般類似於name-devel-VERSION;

註意:整個安裝過程,php5是依賴於mariadb的,所以要先裝mariadb,後裝php5;如果mariadb不使用通用二進制格式安裝,而使用在centos 7系統自帶時,要安裝mariadb-devel;

安裝順序為:httpd,mariadb,php

centos6.x+httpd2.4+mariadb10.2.12+php5.5.38+xcache
0)事先準備使用的軟件包
apr下載地址:http://apr.apache.org/download.cgi
httpd下載地址:http://httpd.apache.org/download.cgi

mariadb下載地址:https://downloads.mariadb.org/
php下載地址:http://www.php.net/downloads.php
1)準備開發環境
~]#service iptables stop 關閉防火墻
~]# chkconfig iptables off 永久關閉防火墻
~]# setenforce 0 暫時關閉selinux
~]# sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/config 永久關閉selinux

~]# yum groupinstall "Development Tools" "Server Platform Development" -y 安裝需要的開發包組,centos6安裝方式,centos7沒有這樣的分組。

~]# yum install pcre-devel -y httpd安裝需要依賴的包
~]#yum install openssl-devel -y
~]#yum install expat-devel -y 此處裝了這個包就不會下面出錯了

2)安裝相關的包
~]# ls
apr-1.6.3.tar.gz
apr-util-1.6.1.tar.gz
httpd-2.4.29.tar.bz2
mariadb-10.2.12-linux-x86_64.tar.gz 二進制安裝包
mariadb-10.2.12.tar.gz 源碼安裝包
php-5.5.38.tar.gz
phpMyAdmin-4.7.9-all-languages.zip當前版本與PHP 5.5到7.2以及MySQL 5.5和更新版本兼容

1、編譯安裝apr和apr-util
安裝前必看:由於使用最新的apr和apr-util導致後面編譯安裝httpd出錯,最後換成apr1.5.0和apr-util1.5.3解決
~]# tar xf apr-1.6.3.tar.gz 解壓軟件包
~]#cd apr-1.6.3
apr-1.6.3]# ./configure --prefix=/usr/local/apr
apr-1.6.3]# make && make install 編譯安裝

~]# tar xf apr-util-1.6.1.tar.gz
~]# cd apr-util-1.6.1
apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
其中:--with-apr=/usr/local/apr 指明apr在什麽地方,因為apr-util是針對apr編譯的
apr-util-1.6.1]# make && make install
安裝出錯:
xml/apr_xml.c:35:19: error: expat.h: No such file or directory
apr-util-1.6.1]# yum install expat-devel -y 安裝所需要的expat
apr-util-1.6.1]# make clean 清理一下
apr-util-1.6.1]# make && make install 繼續安裝成功

2、編譯安裝httpd2.4

~]# tar xf httpd-2.4.29.tar.bz2 解壓縮httpd
~]# cd httpd-2.4.29
httpd-2.4.29]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --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-modules=most --enable-mpms-shared=all --with-mpm=event
#make && make install

--prefix=/usr/local/apache:安裝目錄
--sysconfdir=/etc/httpd24:配置文件目錄
--enable-so:支持DSO機制,支持模塊化
--enable-ssl:啟動ssl功能
--enable-cgi:啟用cgi的支持
--enable-rewrite:支持url重寫
--with-zlib:支持壓縮
--with-pcre:支持正則表達式
--with-apr=/usr/local/apr:指明apr位置
--with-apr-util=/usr/local/apr-util:指明apr-util位置
--enable-modules=most:指明啟用哪些模塊,most是大多數
--enable-mpms-shared=all:把所有的支持的mpm編譯進來
--with-mpm=event:默認使用event模式運行
補充:

(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。

httpd-2.4.29]# make && make install 安裝

出錯了:
/usr/local/apr/build-1/libtool --silent --mode=link gcc -std=gnu99 -g -O2 -pthread -o htpasswd htpasswd.lo passwd_common.lo /usr/local/apr-util/lib/libaprutil-1.la /usr/local/apr/lib/libapr-1.la -lrt -lcrypt -lpthread -lcrypt
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to XML_ParserCreate‘<br/>/usr/local/apr-util/lib/libaprutil-1.so: undefined reference toXML_GetErrorCode‘
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to XML_SetUserData‘<br/>/usr/local/apr-util/lib/libaprutil-1.so: undefined reference toXML_ErrorString‘
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to XML_SetEntityDeclHandler‘<br/>/usr/local/apr-util/lib/libaprutil-1.so: undefined reference toXML_ParserFree‘
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to XML_SetElementHandler‘<br/>/usr/local/apr-util/lib/libaprutil-1.so: undefined reference toXML_StopParser‘
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to XML_Parse‘<br/>/usr/local/apr-util/lib/libaprutil-1.so: undefined reference toXML_SetCharacterDataHandler‘
collect2: ld returned 1 exit status
make[2]: [htpasswd] Error 1
make[2]: Leaving directory `/root/httpd-2.4.29/support‘
make[1]:
[all-recursive] Error 1
make[1]: Leaving directory `/root/httpd-2.4.29/support‘
make: *** [all-recursive] Error 1
原來是apr apr-util用了最新的1.6版本,但是1.6在centos7上編譯安裝httpd沒有問題,降低版本,用1.5版本解決
註意:在生產環境穩定壓倒一切,盡量使用一些穩定的版本。
至此httpd安裝完成。

為編譯安裝的httpd提供服務腳本,可以將yum安裝的httpd的腳本拷貝一份,進行簡單修改即可使用
自定義啟動腳本(參考httpd-2.2的服務腳本)
~]#cp /etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd24
~]#vim /etc/rc.d/init.d/httpd24
apachectl=/usr/local/apache2/bin/apachectl
httpd=${HTTPD-/usr/local/apache2/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/usr/local/apache2/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
而後為此腳本賦予執行權限:
~]# chmod +x /etc/rc.d/init.d/httpd24

加入服務列表:
~]# chkconfig --add httpd24
~]#chkconfig –list httpd24

接下來就可以啟動服務進行測試了。
~]#service httpd start
將httpd命令加入到環境變量:
~]#vim /etc/profile.d/httpd.sh
export PATH=/usr/local/apache2/bin:$PATH
~]#. /etc/profile.d/httpd.sh 重讀文件生效
~]#httpd -t

3、二進制安裝mariadb
~]# useradd -M -s /sbin/nologin mysql 創建系統用戶mysql
~]# mkdir -pv /mydata/data 創建數據存放目錄
~]# chown -R mysql:mysql /mydata/data/ 修改數據存放目錄的屬主和屬組為mysql

~]# tar xf mariadb-5.5.59-linux-x86_64.tar.gz -C /usr/local 解壓包到指定目錄
~]# cd /usr/local/
local]# ln -sv mariadb-5.5.59-linux-x86_64/ mysql 創建軟鏈接為mysql
local]# chown -R root:mysql mysql/* 修改mysql目錄下的所有文件所屬主和組為root和mysql

local]# cd mysql/
mysql]# scripts/mysql_install_db --datadir=/mydata/data/ --user=mysql 初始化

mysql]# mkdir /etc/mysql
mysql]# cp support-files/my-large.cnf /etc/mysql/my.cnf 復制配置文件模板
mysql]# vim /etc/mysql/my.cnf 修改配置文件
[mysqld]
datadir=/mydata/data
innodb_file_per_table=on
skip_name_resolve=on

mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld 復制啟動腳本
mysql]# chkconfig --add mysqld 添加開機啟動項

mysql]# touch /var/log/mysqld.log 創建日誌文件
mysql]# chown mysql /var/log/mysqld.log

mysql]# service mysqld start 啟動服務

mysql]# vim /etc/profile.d/mysqld.sh修改PATH環境變量,讓系統可以直接使用mysql的相關命令
export PATH=/usr/local/mysql/bin:$PATH
mysql]# . /etc/profile.d/mysqld.sh 生效

mysql]# mysql_secure_installation 安全初始化
回車
Y 是否設置密碼
123456 密碼
123456 重復密碼
Y 是否清除匿名賬戶
Y 是否允許管理員遠程登錄,根據實際情況選擇
Y 是否移除測試數據庫test,可以留著選擇n
Y 是否重載授權表,一般修改用戶密碼都需要重載一下
連接mysql
mysql]# mysql -uroot -p123456 連接數據庫需要用戶名和密碼
4、編譯安裝php5.5
(1)、解決依賴關系:

請配置好yum源(系統安裝源及epel源)後執行如下命令:
配置阿裏雲yum源:
~]# mv /etc/yum.repos.d/CentOS-Base.repo{,.bak} 備份原來的
~]#vim /etc/yum.repos.d/base.repo
[base]
name=aliyun
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
gpgcheck=0
[epel]
name=aliyunm
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
gpgcheck=0

~]# yum -y groupinstall "Desktop Platform Development"
~]# yum -y install bzip2-devel libmcrypt-devel libxml2-devel perl

(2)、編譯安裝php-5.5.38
~]# tar xf php-5.5.38.tar.gz 解壓縮包
~]#cd php-5.5.38

php-5.5.38]# ./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-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/apache2/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts

--enable-maintainer-zts:前面Apache選擇的模式是event,需要編輯此模塊
其中參數意義:
--prefix=/usr/local/php 安裝路徑,不能與已有的php沖突
--with-mysql=/usr/local/mysql 指明mysql路徑,如果是rpm安裝的指明在usr下即可,編譯安裝的mysql必須指明完整路徑
--with-openssl 支持openssl
--with-mysqli=/usr/local/mysql/bin/mysql_config 支持mysql另外的訪問接口,在/usr/local/mysql/bin安裝目錄下的mysql_config文件
--enable-mbstring 支持中文字符,單獨的模塊(多字節字符模塊)
--with-png-dir 支持png圖片
--with-jpeg-dir 支持jpeg圖片
--with-freetype-dir 支持字體
--with-zlib 支持壓縮庫
--with-libxml-dir=/usr 支持分析xml,必須指明在/usr目錄下
--enable-xml 支持xml
--enable-sockets 支持socket方式通信
--with-apxs2=/usr/local/apache2/bin/apxs 把它編譯成appache模塊,必須指明模塊路徑(重要選項,只有靠此項才能把php編譯成apache模塊),apach模塊要想把一個程序包編譯成apache的模塊必須指明apache的模塊文件路徑
--with-mcrypt 支持加密庫
--with-config-file-path=/etc 指明配置文件路徑
--with-config-file-scan-dir=/etc/php.d 指明掃描哪個目錄下的所有以.ini結尾的文件都作為php的配置文件;
--with-bz2 支持bz2壓縮

如果要支持prefork之外的mpm的其它模型worker或event,要使用--enable-maintainer-zts,表示支持線程模式的php;
~]# make &&make install

為php提供配置文件:
#cp php.ini-production /etc/php.ini
(3)、 編輯apache配置文件httpd.conf,以apache支持php

#vim /etc/httpd/httpd.conf
1、搜索AddType,添加如下二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

2、定位至DirectoryIndex index.html
修改為:
DirectoryIndex index.php index.html

而後重新啟動httpd,或讓其重新載入配置文件即可測試php是否已經可以正常使用。
~]# service httpd24 restart 重啟使配置文件生效。

~]# cd /usr/local/apache2/htdocs 進入編譯安裝的主界面
htdocs]# mv index.html index.php
htdocs]# vim index.php
測試頁面index.php示例如下:
<?php
$conn=mysql_connect(‘127.0.0.1‘,‘root‘,‘123456‘);
if ($conn)
echo "ok";
else
echo "not ok";
mysql_close();
phpinfo();
?>

壓力測試:
~]# ab -n 1000 -c 100 192.168.1.166/index.php
5、編譯安裝xCache
~]# tar xf xcache-3.2.0.tar.gz 解壓縮包,xcache版本不同支持的php版本不同
~]# cd xcache-3.2.0
xcache-3.2.0]# /usr/local/php/bin/phpize
要編譯php的擴展,第一步,要在php擴展的目錄裏運行phpize命令,作用是把當前目錄生成一些config腳本,及php環境

xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
其中:
--enable-xcache 表示啟用xcache
-with-php-config=/usr/bin/php-config 指明php配置程序文件,如果是rpm安裝,可省略加等號後面的內容,自動能找到,如果是編譯安裝的php就要指明php程序的配置接口文件;

xcache-3.2.0]# make && make install 安裝
Build complete.
Don‘t forget to run ‘make test‘.

Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20121212/

xcache-3.2.0]# /usr/local/php/lib/php/extensions/no-debug-zts-20121212/xcache.so模塊地址

xcache-3.2.0]# mkdir /etc/php.d 創建目錄
]# cp xcache.ini /etc/php.d/ 復制源碼包目錄下的xcache配置文件
xcache-3.2.0]# vim /etc/php.d/xcache.ini 修改配置文件
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20121212/xcache.so

xcache-3.2.0]# service httpd24 restart 重啟生效

瀏覽器輸入:192.168.1.166 查看xcache是否被加載進來。
壓力測試:
~]# ab -n 1000 -c 100 192.168.1.166/index.php

6、編譯安裝php-fpm
~]# rm -rf php-5.5.38 刪除原來編譯的軟件包
~]# tar xf php-5.5.38.tar.gz 重新解壓縮軟件包
~]# cd php-5.5.38
~]#./configure --prefix=/usr/local/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

php-5.5.38]# make && make install

httpd24]# service httpd24 stop 停止httpd服務
httpd24]# mv httpd.conf{,.mod_php} 使原來的配置文件失效
httpd24]#mv httpd.conf.bak httpd.conf 使備份的配置文件生效,以fpm配置
php-5.5.38]# mkdir /etc/php5{,.d} 創建所需目錄
php-5.5.38]# cp php.ini-production /etc/php5/php.ini 復制配置文件

為php-fpm提供SysV init腳本,並將其添加至服務列表:
php-5.5.38]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
php-5.5.38]# chmod +x /etc/rc.d/init.d/php-fpm
php-5.5.38]# chkconfig --add php-fpm
php-5.5.38]# chkconfig php-fpm on

~]# cp /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf 為php-fpm提供配置文件
~ ]# vim /usr/local/php5/etc/php-fpm.conf 編輯php-fpm配置文件
listen = 0.0.0.0:9000 支持web服務遠程連接,監聽所有網卡的9000端口
pm.max_children = 50 最多有多少個進程
pm.start_servers = 5 剛啟動時有幾個進程
pm.min_spare_servers = 2 最少空閑幾個
pm.max_spare_servers = 8 最多空閑幾個
pid = /usr/local/php5/var/run/php-fpm.pid
php-fpm模式類似於httpd的prefork模式,有父進程和多個子進程的方式工作
~]# service php-fpm start 啟動php-fpm服務

~ ]# vim /etc/httpd24/httpd.conf 編輯httpd配置文件
說明:啟用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
添加:
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/usr/local/apache2/htdocs/$1 以.php結尾的交給php-fpm處理,如果不是本機需要修改IP地址即可。

保存退出
~]# httpd -t 語法測試沒問題
Syntax OK
~]# httpd -M 查看加載的模塊
proxy_module (shared)
proxy_fcgi_module (shared)
~]# service httpd24 restart 重啟服務使配置文件生效

瀏覽器輸入:http://192.168.1.166/
看到php-fpm啟動正常
壓力測試:
~]# ab -n 1000 -c 100 192.168.1.166/index.php
Requests per second: 296.03 [#/sec] (mean)
性能提升。

添加xcache
~]# rm -rf xcache-3.2.0 刪除原來的編譯包
~]# tar xf xcache-3.2.0.tar.gz 解壓縮包,xcache版本不同支持的php版本不同
~]# cd xcache-3.2.0
xcache-3.2.0]# /usr/local/php5/bin/phpize
要編譯php的擴展,第一步,要在php擴展的目錄裏運行phpize命令,作用是把當前目錄生成一些config腳本,及php環境

xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php5/bin/php-config
其中:
--enable-xcache 表示啟用xcache
-with-php-config=/usr/bin/php-config 指明php配置程序文件,如果是rpm安裝,可省略加等號後面的內容,自動能找到,如果是編譯安裝的php就要指明php程序的配置接口文件;

xcache-3.2.0]# make && make install 安裝
Build complete.
Don‘t forget to run ‘make test‘.

Installing shared extensions:
/usr/local/php5/lib/php/extensions/no-debug-non-zts-20121212/

xcache-3.2.0]# /usr/local/php5/lib/php/extensions/no-debug-non-zts-20121212/xcache.so模塊地址

xcache-3.2.0]# mkdir /etc/php5.d 創建目錄
]# cp xcache.ini /etc/php5.d/ 復制源碼包目錄下的xcache配置文件
xcache-3.2.0]# vim /etc/php5.d/xcache.ini 修改配置文件
extension = /usr/local/php5/lib/php/extensions/no-debug-non-zts-20121212/xcache.so

xcache-3.2.0]# service php-fpm restart 重啟生效

瀏覽器輸入:192.168.1.166 查看xcache是否被加載進來。
壓力測試:
~]# ab -n 1000 -c 100 192.168.1.166/index.php

lamp編譯安裝