突然,一不留神打開(kāi)了php.net網(wǎng)站,點(diǎn)了一下download,靠,都已經(jīng)php5.6 stable了,而我yum安裝的php還是5.4版本的,太守舊了!嘿嘿,我是微軟云的小白鼠,當年就多注冊了個(gè)賬號,還躺著(zhù)個(gè)云服務(wù)器在睡覺(jué)呢,于是乎,私心想著(zhù)搭建一個(gè)lnmp的備份服務(wù)器…源碼編譯安裝,各種依賴(lài)包糾結,所以呢,mariadb(mysql)是yum安裝的,php5.6和nginx1.7.9是源碼安裝的…裝著(zhù)裝著(zhù),在跑./configure腳本的時(shí)候,又忘記啟用enable curl等等常用擴展鳥(niǎo),裝完后,又去源碼目錄編譯擴展,動(dòng)態(tài)添加擴展…
lnmp
一、安裝mariadb(mysql)服務(wù) yum install mariadb mariadb-server mariadb-devel
自從mysql被oracle公司收購后,mysql就有閉源收費的風(fēng)險,所以,就有了社區版改裝的mysql分支mariadb來(lái)規避這個(gè)風(fēng)險。centos7開(kāi)始,yum源的mysql全部都替換成mariadb的了。所以,mariadb是mysql的一個(gè)分支。不過(guò)貌似聽(tīng)說(shuō),google有一部分數據庫也都已經(jīng)遷移到mariadb了,真是要鄙視一下oracle公司,oracle數據庫都這么賺了,還打著(zhù)mysql的主意…
二、源碼編譯安裝php5.6
1.下載php5.6 wget http://cn2.php.net/distributions/php-5.6.5.tar.gz 糾結的是,剛安裝好的centos 7連wget都木有,所以yum -y install wget然后再下載,,,
2.解壓 tar -xvzf php-5.6.5.tar.gz 進(jìn)入 cd php-5.6.5
3.運行./configure腳本,啟用需要的擴展模塊,并指定php的安裝目錄 ./configure –enable-fpm –enable-mbstring –with-mysql=mysqlnd –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd
這一步很是關(guān)鍵的,我忘記指定–prefix,它默認也是給我安裝在/usr/local/php,不過(guò)還是指定一下比較妥當。還有,在這里的時(shí)候只記得安裝mbstring和fpm擴展,忘記curl和intl(有一個(gè)東東是用yii2框架做的,需要介個(gè)東東)了,不過(guò)忘了也木有關(guān)系,到時(shí)候在編譯擴展,動(dòng)態(tài)安裝進(jìn)去。不過(guò)為了能順利一口氣等下輸出phpinfo頁(yè)面,能讓nginx支持php,一定要把–enable-fpm加上去,fpm是php的一個(gè)腳本管理器,貌似說(shuō)php5.3版本以前,fpm只是一個(gè)補丁patch,要去patch這個(gè)目錄找他,php5.3后呢,據說(shuō)是轉正了,php里面已經(jīng)集成了,不是第三方包了。只要跟上–enable-fpm安裝完后就可以跑鳥(niǎo)…php鏈接mysql呢,這個(gè)東東也是必須要噠,–with-mysql是指定mysql的頭文件,可以whereis mysql然后指定mysql的安裝目錄,不過(guò)php5.5后,直接用php提供的mysql驅動(dòng)mysqlnd就口以了,據說(shuō)這個(gè)驅動(dòng)比mysql寫(xiě)的那個(gè)性能要好。。。巴拉巴拉。。。沒(méi)有超大流量的站點(diǎn),我是沒(méi)能體會(huì )到……………….
php5.6 ./configure
配置完后,如果沒(méi)有錯誤的話(huà),就話(huà)看到成功的信息了。如果提示缺什么擴展就裝上x(chóng)xx-devel開(kāi)發(fā)包,再運行./configure
./configure結果
然后就是編譯make了,我的服務(wù)器是3.5G內存的,雙核cpu來(lái)著(zhù),花了貌似十多分鐘編譯吧
編譯完成后,就是make install安裝滴啦…
make install結果
make install
運行php -v就口以看到php的版本信息啦,php 5.6最新版就安裝上啦。
ok,到這里差不多的啦,但是還有php的配置文件php.ini呢,復制一份安裝目錄下的php.ini-development這個(gè)配置文件模板到php的目錄。yum安裝的php,php會(huì )去/etc/php.ini下找自己的配置文件。源碼安裝的配置文件放哪里的呢。。。寫(xiě)一個(gè)phpinfo()的頁(yè)面,然后打開(kāi)這個(gè)頁(yè)面,google chrome下ctrl + f查找一下php.ini就會(huì )看到php是去哪里找的php.ini,然后就cp這個(gè)php.ini-development到這個(gè)目錄下,并改名成php.ini就口以了。當然,貌似php.ini一般是在/etc/php.ini或者/usr/local/lib/php.ini中,不對的話(huà),查找一下是最靠譜的解決辦法。
為了要讓nginx支持php,需要fastcgi處理有關(guān)php的頁(yè)面,而php就需要php-fpm這個(gè)組件來(lái)支持,這個(gè)跟appache支持php是兩個(gè)不同的原理。上面安裝的時(shí)候已經(jīng)./configure –enable-fpm啦,所以fpm已經(jīng)開(kāi)啟了。當然,我們還需要配置一下php-fpm,在安裝php的時(shí)候,已經(jīng)為我們生成了一個(gè)配置模板了,在/usr/local/etc/php-fpm.conf.default了,只要復制這個(gè)模板并改名為php-fpm.conf就口以了,進(jìn)去把daemonize改成yes,以后臺服務(wù)的運行方式啟動(dòng)。然后捏,whereis php-fpm,這個(gè)是個(gè)可執行文件,直接執行php-fpm就可以運行了,然后netstat -an| grep php-fpm,看到,果然9000號端口在監聽(tīng)啦
php-fpm listening
三、源碼編譯安裝nginx1.7.9
1.下載nginx最新版 wget http://nginx.org/download/nginx-1.7.9.tar.gz
2.解壓&&進(jìn)入 tar -xvzf nginx-1.7.9.tar.gz
cd nginx-1.7.9
3.運行./configure腳本,指定安裝目錄 ./configure –sbin-path=/usr/local/nginx –conf-path=/usr/local/nginx/nginx.conf –pid-path=/usr/local/nginx/nginx.pid –with–http_ssl_module
nginx ./configure
nginx ./configure結果
然后就設置完了,,,如果報錯的話(huà),一般就是找不到依賴(lài),缺什么就yum -y install xxx-devel,安裝完后就口以了。第一次的時(shí)候,提示我缺少pcre,介個(gè)東東是正則,rewrite這樣的模塊是需要他來(lái)支持的,當然可以在configure加個(gè)選項–without不安裝系統推薦安裝的模塊就可以跳過(guò)這個(gè)錯誤繼續安裝了。但是,nginx官方默認安裝的模塊還是都給裝上,少了這個(gè)正則,等下nginx就沒(méi)法匹配.php結尾的文件,再交給php-fpm來(lái)處理了。
然后,就是編譯make了。。。糾結的是,nginx在make后,自動(dòng)就給裝上啦,不需要make install啦
nginx
nginx成功安裝啦
現在,就是要讓nginx匹配,匹配到.php結尾的文件,就通過(guò)fastcgi傳給php-fpm來(lái)解析,解析完后再給nginx傳給瀏覽器顯示,剛才./configure時(shí)已經(jīng)指定了nginx配置文件地址
修改配置:vim /usr/local/nginx/nginx.conf
大概在64行左右,模板已經(jīng)有支持php-fpm的配置了,去掉#注釋?zhuān)缓笾貑⒁幌耼ginx就可以了。
再回到/usr/local/nginx/html目錄,編寫(xiě)一個(gè)phpinfo()的頁(yè)面,然后在瀏覽器中訪(fǎng)問(wèn)這個(gè)頁(yè)面,就能看到php和nginx的信息了:
http://wfee.feehi.com/phpinfo.phpphpinfo
往下翻,看到php還有很多常用的擴展都沒(méi)有裝上的呢,比如curl intl openssl等等其他擴展。這是因為在php ./configure的時(shí)候,沒(méi)有enable的原因。這些庫有需要的時(shí)候,可以再去源碼目錄的extentison中編譯安裝,動(dòng)態(tài)添加進(jìn)去。
還有一個(gè)問(wèn)題就是,裝完后
php-mysql
mysql_connet等系列函數用不了,這種warning信息,證明mysql驅動(dòng)是裝上了的。因為他畢竟不是報的undefined function mysql_connet…,這種情況是因為php找不到mysql.sock的連接。啟動(dòng)mariadb(mysql)進(jìn)入,輸入status,記住unix socket的路徑
mysql.sock
然后把他配置到php.ini里面:
vim /usr/local/lib/php.ini找到mysql.default_socket,加上剛才的sock文件位置
mysql.default_socket
然后看看phpinfo頁(yè)面,mysql擴展中mysql.default_socket就有值了。最一開(kāi)始是沒(méi)有的,配置了之后才有的,當然如果是yum安裝的話(huà),不用去配置,php也是找的到這個(gè)mysql.sock的。當然mysqli和pdo-mysql都要這樣配一下
phpinfo mysql
然后,就能正常輸出了
mysql連接成功
因為不是yum安裝的,nginx還沒(méi)有成為系統服務(wù),在/etc/rd.d/init.d下新建一個(gè)nginxd的腳本,方便開(kāi)機自啟以及使用service nginxd start/stop/restart來(lái)管理nginx
service nginxd start
ok,終于完成了lnmp環(huán)境的搭建!nginx也支持php了。nginx和php都是源碼方式安裝的,mariadb是用yum源安裝的。好好體會(huì )一下nginx的魅力以及最新版php帶來(lái)的新功能,準備用這個(gè)服務(wù)器做個(gè)備份的,有想過(guò)主從服務(wù)器,分布式部署,負載均衡,可惜這兩臺云服務(wù)器不在一個(gè)內網(wǎng)。。。慢慢思考吧。加油。希望我的博客能幫助和我一樣遇到問(wèn)題的盆友們,啦啦啦啦啦啦啦
轉載請注明:
飛嗨 ?
CentOS 7源碼編譯安裝最新版php5.6和nginx1.7.9及mysql(搭建lnmp環(huán)境)or分享 (0)