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模式php

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

注意:任何一個程序包被編譯操做依賴到時,須要安裝此程序包的「開發」包組件,其包名通常相似於name-devel-VERSION;

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

安裝順序爲:httpd,mariadb,phplinux

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 永久關閉selinuxweb

~]# 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和更新版本兼容sql

一、編譯安裝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 繼續安裝成功apache

二、編譯安裝httpd2.4vim

~]# 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

三、二進制安裝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 鏈接數據庫須要用戶名和密碼
四、編譯安裝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
一、搜索AddType,添加以下二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

二、定位至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
五、編譯安裝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

六、編譯安裝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

相關文章
相關標籤/搜索