2-21-源碼編譯搭建LNMP環境

源碼編譯部署LNMP架構
 
LNMP=Linux +Nginx + MySQL + PHP
 
 
Nginx("engine x") 是一個高性能的HTTP 和 反向代理 服務器。Nginx 是由 IgorSysoev 爲俄羅斯訪問量第二的 Rambler.ru 站點開發的,第一個公開版本0.1.0發佈於2004年10月4日。其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發佈。
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler(俄文:Рамблер)使用。其特色是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度BWS、新浪、網易、騰訊等。

 

  1. [root@xuegod63 ~]# curl -I www.163.com
  2. HTTP/1.1 301 Moved Permanently
  3. Server: nginx
 
 
Nginx 官網:
RamBler http://www.rambler.ru/            nginx:http://nginx.org/


 

Rambler 是俄羅斯的門戶網站,也是俄羅斯的三大門戶之一,在這裏你能夠了解俄羅斯社會的方方面面。嚴格意義來說,Rambler應該是俄羅斯的行業分類網站,天天大約有800萬人利用該網站查詢相關信息,是俄羅斯當之無愧的第二大本土搜索引擎。
 
Tengine
Tengine 是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了不少高級功能和特性。Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等獲得了很好的檢驗。(能夠這樣理解:淘寶拿到了Nginx源代碼以後,進行了功能的填充,優化等等,而後提交給Nginx官方,可是因爲Nginx官方相應慢或者不響應,加上語言溝通的不暢,因而淘寶公司就本身打包,在遵循GPL的原則上進行二次開發,因而就出瞭如今的Tengine這個版本)。

 

官網網站: http://tengine.taobao.org/


 


Nginx 工做原理
這裏須要結合Apache的工做,對PHP文件處理過程的區別
1:Nginx是經過php-fpm這個服務來處理php文件
       2 :Apache是經過libphp5.so這個模塊來處理php文件

 

Apache


 

Nginx


 

Apache 的libphp5.so隨着apache服務器一塊兒運行,而Nginx和php-fpm是各自獨立運行,因此在運行過程當中,Nginx和php-fpm都須要分別啓動!
修改Nginx配置文件,啓動nginx服務,修改php配置文件,啓動php-fpm服務
 
nginx 相對於apache的優勢: 
輕量級,一樣起web 服務,比apache 佔用更少的內存及資源 ;高併發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高性能;高度模塊化的設計,編寫模塊相對簡單;社區活躍,各類高性能模塊出品迅速。

 


apache 相對於nginx 的優勢: 
rewrite ,比nginx 的rewrite強大;模塊超多,基本想到的均可以找到;少bug ,nginx 的bug 相對較多;超穩定 
存在就是理由,通常來講,須要性能的web 服務,用nginx 。若是不須要性能只求穩定,那就apache 。nginx處理動態請求是雞肋,通常動態請求要apache去作,nginx只適合靜態和反向。

 

 
部署LNMP架構須要安裝依賴包
yum -y installmake gcc gcc-c++ flex bison file libtool libtool-libs autoconf kernel-devellibjpeg libjpeg-devel libpng libpng-devel gd freetype freetype-devel libxml2libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libeventncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidnlibidn-devel openssl openssl-devel gettext gettext-devel ncurses-develgmp-devel unzip libcap lsof

 

 
 
1 、安裝Nginx
下載源碼包:


 

Mainlineversion   主線版本
       Stable version        穩定版本
       Legacy versions     老版本,遺產版本
 
所需依賴包:
  1. [root@xuegod63 ~]# yum -y install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre*
  2. Zlib:Nginx提供gzip模塊,須要zlib的支持
  3.               Openssl:Nginx提供SSL的功能

 

建立Nginx運行用戶
  1. [root@xuegod63 ~]# useradd -M -s /sbin/nologin nginx
  2. 下載PCRE庫https://ftp.pcre.org/pub/pcre/
  3. 上傳源碼包



注:解壓便可,不用安裝,Nginx安裝時指定pcre的解壓路徑便可
  1. [root@xuegod63 ~]# tar zxf nginx-1.10.3.tar.gz -C /usr/local/src;cd /usr/local/src/nginx-1.10.3
  2. [root@xuegod63 nginx-1.10.3]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.38 --user=nginx --group=nginx

 

 
注:
-- with-http_dav_module                  # 啓用支持(增長PUT,DELETE,MKCOL:建立集合,COPY和MOVE方法)
                                     默認關閉,須要編譯開啓
-- with-http_stub_status_module      # 啓用支持(獲取Nginx上次啓動以來的工做狀態)
-- with-http_addition_module           # 啓用支持(做爲一個輸出過濾器,支持不徹底緩衝,分部分相應請求)
-- with-http_sub_module                  # 啓用支持(容許一些其餘文本替換Nginx相應中的一些文本)
-- with-http_flv_module                    # 啓用支持(提供支持flv視頻文件支持)
-- with-http_mp4_module                 # 啓用支持(提供支持mp4視頻文件支持,提供僞流媒體服務端支持)
--with-pcre=/usr/local/src/pcre-8.37    # 須要注意,這裏指的是源碼,用#./configure --help |grep pcre查看幫助

 

  1. [root@xuegod63 nginx-1.10.3]# make -j 4 && make install
         
  1. [root@xuegod63 nginx-1.10.3]# ll /usr/local/nginx/
  2. drwxr-xr-x. 2 root root 4096 Apr 14 20:39 conf       #Nginx相關配置文件
  3. drwxr-xr-x. 2 root root 4096 Apr 14 20:39 html      #網站根目錄
  4. drwxr-xr-x. 2 root root 4096 Apr 14 20:39 logs       #日誌文件
  5. drwxr-xr-x. 2 root root 4096 Apr 14 20:39 sbin       #Nginx啓動腳本

 

 
配置Nginx支持php文件
  1. [root@xuegod63 nginx-1.10.3]# vim /usr/local/nginx/conf/nginx.conf
  2. 修改用戶爲nginx:
  3. 2 #user  nobody;
  4.   3 user    nginx nginx;
  5. 啓用PHP支持
  6. 第66行始 修改成:
  7. 66         location ~ \.php$ {
  8. 67             root           html;
  9. 68             fastcgi_pass   127.0.0.1:9000;
  10. 69             fastcgi_index  index.php;
  11. 70       fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
  12. 71             include        fastcgi_params;
  13. 72         }

 

老師寫了一箇中文註解nginx.conf文件
 
啓動Nginx服務
  1. [root@xuegod63 nginx-1.8.0]# /usr/local/nginx/sbin/nginx
 
優化Nginx啓動命令執行路徑
  1. [root@xuegod63 ~]# ln -s /server/nginx/sbin/nginx  /usr/local/sbin/

 

生成服務啓動腳本
  1. [root@xuegod63 nginx-1.10.3]# vim /etc/init.d/nginx

 

 
#!/bin/bash
# chkconfig: -99 2
# description:Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case"$1" in
        start)
        $PROG
        ;;
        stop)
        kill -3 $(cat $PIDF)
        ;;
        restart)
        $0 stop &> /dev/null
        if [ $? -ne 0 ] ; then continue ; fi
        $0 start
        ;;
        reload)
        kill -1 $(cat $PIDF)
        ;;
        *)
        echo "Userage: $0 { start | stop |restart | reload }"
        exit 1
esac
exit 0

 

 
配置服務開機自動啓動
  1. [root@xuegod63 ~]# chmod +x /etc/init.d/nginx
  2. [root@xuegod63 ~]# chkconfig --add nginx
  3. [root@xuegod63 ~]# chkconfig nginx on

 

 
先關閉iptables再瀏覽器訪問驗證:


 


擴展:Nginx維護命令
  1. [root@xuegod63 ~]# nginx -t           #檢查配置文件是否有語法錯誤
  2. nginx: the configuration file /server/nginx/conf/nginx.conf syntax is ok
  3. nginx: configuration file /server/nginx/conf/nginx.conf test is successful

 

 
  1. [root@xuegod63 ~]# nginx -V          #查看Nginx版本和配置參數
  2. nginx version: nginx/1.8.0
  3. built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
  4. configure arguments: --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.37 --user=nginx --group=nginx
注:從新編譯時,必定要查看之前的編譯配置,只需在原有配置參數後添加新的參數便可
 
  1. [root@xuegod63 ~]# nginx -s reload              #重載Nginx配置文件
 
2 、安裝MySQL
 
刪除系統自帶mysql
  1. [root@xuegod63 ~]# yum -y remove mysql

 

 
解決依賴
  1. [root@xuegod63 ~]# yum -y install gcc gcc-c++ autoconf automake zlib* libxml* ncurses-devel libtool-ltdl-devel* make cmake

 

安裝yum 提示報錯:出現GPG key retrieval failed 的解決:
把yum源文件驗證key關閉,即改成gpgcheck=0
添加用戶和組
  1. [root@xuegod63 ~]# groupadd mysql
  2. [root@xuegod63 ~]# useradd -M -s /sbin/nologin -r -g mysql mysql

 

 
建立安裝目錄和數據存放目錄(生產環境建議增長一塊硬盤掛載做mysql目錄)
  1. [root@xuegod63 ~]# mkdir -p /usr/local/mysql/data
複製代碼

 

 
上傳源碼包到服務器LNMP目錄下或者直接wget進行下載源碼包
(rz命令上傳或FTP上傳)
解壓源碼包後進入目錄
[root@xuegod63LNMP]# tar zxf mysql-5.6.26.tar.gz -C /usr/local/src/ ; cd/usr/local/src/mysql-5.6.26
 
編譯
[root@xuegod63 ~]#cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_MEMORY_STORAGE_ENGINE=1\
-DWITH_READLINE=1\
-DENABLED_LOCAL_INFILE=1\
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL-USER=mysql

 

 
CMAKE_INSTALL_PREFIX :指定MySQL程序的安裝目錄,默認/usr/local/mysql
DEFAULT_CHARSET :指定服務器默認字符集,默認latin1
DEFAULT_COLLATION :指定服務器默認的校對規則,默認latin1_general_ci
ENABLED_LOCAL_INFILE :指定是否容許本地執行LOAD DATA INFILE,默認OFF
WITH_COMMENT :指定編譯備註信息
WITH_xxx_STORAGE_ENGINE :指定靜態編譯到mysql的存儲引擎,MyISAM,MERGE,MEMBER以及CSV四種引擎默認即被編譯至服務器,不須要特別指定。
WITHOUT_xxx_STORAGE_ENGINE :指定不編譯的存儲引擎
SYSCONFDIR :初始化參數文件目錄
MYSQL_DATADIR :數據文件目錄
MYSQL_TCP_PORT :服務端口號,默認3306
MYSQL_UNIX_ADDR :socket文件路徑,默認/tmp/mysql.sock
MYSQL-USER :運行 mysql的用戶
開始編譯和安裝
[root@xuegod63mysql-5.6.26]# make -j 4 && make install

 

 
近幾個月,運維事件頻發,從「爐石數據被刪」到「MongoDB遭黑客勒索」,從「Gitlab數據庫被誤刪」到某家公司漏洞被組合攻擊。這些事件,無一不在吶喊——作好運維工做的重要性。雲2.0時代,運維已經向全局化、流程化和精細化模式轉變,當下如何作好運維?
 
配置 mysql
[root@xuegod63~]# chown -R mysql:mysql /usr/local/mysql/   更改屬主
[root@xuegod63~]# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf       // 覆蓋原配置文件,並更改my.cnf數據目錄位置
[root@xuegod63~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld    // 啓動腳本
[root@xuegod63~]# vim /etc/init.d/ mysqld       // 更改啓動腳本中指定mysql位置
basedir=
datadir=
# 修改成
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data

 

 
生成服務啓動腳本
[root@xuegod63 ~]# chmod  777 /etc/init.d/mysqld
[root@xuegod63~]# chkconfig --add mysqld
[root@xuegod63~]# chkconfig mysqld on
[root@xuegod63~]# chkconfig --list mysqld
mysqld     0:off   1:off    2:on    3:on   4:on    5:on    6:off

 

 
 
初始化數據庫(重要務必執行)
[ root@xuegod63 ~]# /usr/local/mysql/scripts/mysql_install_db--user=mysql

 

 
啓動服務
[root@xuegod63~]# service mysqld start

 

 
設置環境變量
[root@xuegod63~]#ln -s /usr/local/mysql/bin/*  /usr/sbin/   讓系統直接調用

 

 
3 、安裝PHP
在Nginx中,咱們使用的是php-fpm來對php頁面解析,PHP-FPM實際上是PHP源代碼的一個補丁,指在將FastCGI進程管理整合進PHP包中。必須將它patch到你的PHP源代碼中,再編譯安裝PHP後纔可使用
        從PHP5.3.3開始,P/usrHP中直接整合了PHP-FPM,因此從PHP5.3.3版本之後,不須要下載PHP-FPM補丁包了,下面是PHP-FPM官方發出來的通知:

 

 
安裝依賴關係

 

 
解決依賴方法一:yum安裝解決
  1. yum-y install php-mcrypt  libmcrypt  libmcrypt-devel php-pear libxml2 libxml2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel gd-devel

 

 
 
方法二:暫不用
libiconv 庫爲須要作轉換的應用提供了一個iconv()的函數,以實現一個字符編碼到另外一個字符編碼的轉換。若是不裝錯誤提示:configure: error: Please reinstall the iconv library.
[root@xuegod63 LNMP]# tar zxf libiconv-1.14.tar.gz -C/usr/local/src/;cd /usr/local/src/libiconv-1.14
[root@xuegod63 libiconv-1.14]# ./configure--prefix=/usr/local/libiconv
[root@xuegod63libiconv-1.14]# make -j 4 && make install

 

 
libmcrypt是加密算法擴展庫。 錯誤提示:configure: error:Cannot find imap library (libc-client.a). Please check your c-clientinstallation.
[root@xuegod63 LNMP]# tar jxf libmcrypt-2.5.8.tar.bz2 -C /usr/local/src/;cd/usr/local/src/libmcrypt-2.5.8
[root@xuegod63libmcrypt-2.5.8]# ./configure && make -j 4 && make install
 
Mhash 是基於離散數學原理的不可逆向的php加密方式擴展庫,其在默認狀況下不開啓。 mhash的能夠用於建立校驗數值,消息摘要,消息認證碼,以及無需原文的關鍵信息保存 錯誤提示:configure: error: 「You need at least libmhash 0.8.15 to compile thisprogram.  http://mhash.sf.net/
 
[root@xuegod63 LNMP]# tar zxf mhash-0.9.9.9.tar.gz  -C /usr/local/src/;cd/usr/local/src/mhash-0.9.9.9
[root@xuegod63mhash-0.9.9.9]# ./configure && make -j 4 && make install

 

 
 
指定庫文件路徑
[root@xuegod63~]# vim /etc/ld.so.conf
includeld.so.conf.d/*.conf
/usr/local/lib
/usr/local/mysql/lib/libmysqlclient.so.18
[root@xuegod63~]# ldconfig

 

 
mcrypt  是 php 裏面重要的加密支持擴展庫,Mcrypt擴展庫能夠實現加密解密功能,就是既能將明文加密,也能夠密文還原。
 
[root@xuegod63 LNMP]# tar zxf mcrypt-2.6.8.tar.gz -C/usr/local/src/;cd /usr/local/src/mcrypt-2.6.8
[root@xuegod63mcrypt-2.6.8]# ./configure && make -j 4 && make install

 

 
[root@xuegod63mcrypt-2.6.8]# yum -y install php-pear
pear 按照必定的分類來管理pear應用代碼庫,你的pear代碼能夠組織到其中適當的目錄中,其餘人能夠方便的檢索並分享到你的成果;pear不只僅是一個代碼倉庫,它同時也是一個標準,使用這個標準來書寫你的php代碼,將會加強你的程序的可讀性,複用性,減小出錯的概率;Pear經過兩個類爲你搭建了一個框架,實現了諸如析構函數,錯誤捕獲功能,你經過繼承就可使用這些功能

 

 
解壓PHP包並配置:
[root@xuegod63~]# tar zxf php-7.0.5.tar.gz-C /usr/local/src/;cd/usr/local/src/php-7.0.5
[root@xuegod63 php-7.0.5]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/ --enable-fpm  --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --disable-fileinfo --enable-maintainer-zts

 

 
參數選項可參考http://php.net/manual/zh/configure.about.php官方中文手冊
 
-- with-config-file-path                   # 設置 php.ini 的搜索路徑。默認爲 PREFIX/lib
-- with-mysql                           #mysql 安裝目錄,對mysql的支持 7.0版本沒有此參數
-- with-mysqli                           #mysqli 擴展技術不只能夠調用MySQL的存儲過程、處理MySQL事務,並且還可使訪問數據庫工做變得更加穩定。是一個數據庫驅動
-- with-iconv-dir                        # 種字符集間的轉換
-- with-freetype-dir                     # 打開對freetype字體庫的支持
-- with-jpeg-dir                         # 打開對jpeg圖片的支持
-- with-png-dir                           # 打開對png圖片的支持
-- with-zlib                            # 打開zlib庫的支持,實現GZIP壓縮輸出      
-- with-libxml-dir=/usr                    # 打開libxml2庫的支持,libxml是一個用來解析XML文檔的函數庫
-- enable-xml                           # 支持xml文檔
-- disable-rpath                           # 關閉額外的運行庫文件
-- enable-bcmath                        # 打開圖片大小調整,用到zabbix監控的時候用到了這個模塊
-- enable-shmop                         #shmop 共享內存操做函數,能夠與c/c++通信
-- enable-sysvsem                             # 加上上面shmop,這樣就使得你的PHP系統能夠處理相關的IPC函數(活動在內核級別)。
-- enable-inline-optimization          # 優化線程
-- with-curl                             # 打開curl瀏覽工具的支持
-- with-curlwrappers                     # 運用curl工具打開url流 ,新版PHP5.6已棄用
-- enable-mbregex                       # 支持多字節正則表達式
-- enable-fpm                          #CGI 方式安裝的啓動程序,PHP-FPM服務
-- enable-mbstring                       # 多字節,字符串的支持
-- with-gd                               # 打開gd庫的支持,是php處理圖形的擴展庫,GD庫提供了一系列用來處理圖片的API,使用GD庫能夠處理圖片,或者生成圖片。
-- enable-gd-native-ttf                     # 支持TrueType字符串函數庫
-- with-openssl                           # 打開ssl支持
-- with-mhash                          # 支持mhash算法擴展
-- enable-pcntl                           #freeTDS 須要用到的,pcntl擴展能夠支持php的多線程操做
-- enable-sockets                         # 打開 sockets 支持
-- with-xmlrpc                          # 打開xml-rpc的c語言
-- enable-zip                            # 打開對zip的支持
-- enable-soap                           # 擴展庫經過soap協議實現了客服端與服務器端的數據交互操做
-- with-mcrypt                         #mcrypt 算法擴展

 

 
編譯並安裝
[ root@xuegod63php-7.0.5]# make -j 4 && make install

 

 
修改fpm配置php-fpm.conf.default文件名稱
[root@xuegod63 php-7.0.5]# cp /usr/local/php/etc/php-fpm.d/www.conf.default/usr/local/php/etc/php-fpm.conf

 

修改運行用戶和組
[root@xuegod63 php-7.0.5]#vim !$
user = nginx
group = nginx

 

複製php.ini配置文件
[root@xuegod63 php-7.0.5]# cp/usr/local/src/php-7.0.5/php.ini-production /usr/local/php/php.ini

 

複製php-fpm啓動腳本到init.d
[root@xuegod63 php-7.0.5]# cp/usr/local/src/php-7.0.5/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

 

賦予執行權限
[ root@xuegod63php-7.0.5]# chmod +x /etc/init.d/php-fpm

 

添加爲啓動項
[ root@xuegod63php-7.0.5]# chkconfig --add php-fpm

 

設置開機啓動
[ root@xuegod63php-7.0.5]# chkconfig php-fpm on

 

啓動服務
[root@xuegod63php-7.0.5]# service php-fpm start
Startingphp-fpm  done

 

查看端口監聽狀態
[ root@xuegod63php-7.0.5]# netstat -antpu | grep php-fpm

 

 
驗證:
[root@xuegod63~]#  vim/usr/local/nginx/html/a.php
<?php
        phpinfo();
?>


 

相關文章
相關標籤/搜索