WEB平臺架構之:LNMP(CentOS6.5+Nginx+MySQL+Php)

WEB平臺架構之:LNMP(CentOS6.5+Nginx+MySQL+Php)
     爲了寫Nginx的系列教程,在介紹Nginx的各項功能時,能有個測試的環境,因此於此寫一篇LNMP的架構搭建,使那些看文檔的人能夠搭建自己的環境來測試Nginx的功能。但是通常情況下nginx用作純web站點不是很多,更多的是將nginx用在反向代理環境中。但是由於nginx處理靜態文件的優越性能,也常常會使用nginx配合php來實現動靜分離,起到web響應加速的功能.

1.準備工作
OS:CentOS6.5x64
hostname:test2.lxm.com
ip:10.0.10.12
software: /root/soft/
     nginx-1.6.1.tar.gz
     pcre-8.33.tar.gz
     openssl-1.0.1i.tar.gz
     mysql-5.5.27.tar.gz
     php-5.5.16.tar.gz
     libmcrypt-2.5.7.tar.gz
     mhash-0.9.9.tar.gz
 
software install path:/usr/local/

注意:在準備工作中,要準備好一臺centos系統,配置好網絡環境和yum源,準備好要用的軟件包,決定好軟件包放置的位置和要安裝的位置。其次安裝過程全部採用源碼包編譯安裝。

#yum -y install gcc* compact-gcc* autoconf automake make cmake

//安裝編譯安裝需要的編譯軟件,如果系統已經安裝過了,則無需再次安裝
#iptables -F;service iptables stop;chkconfig iptables off 

//關閉防火牆,生產環境中不建議關閉iptables

//臨時關閉selinux
#setenforce 0
如果想永久關閉selinux,則修改配置文件

2.安裝nginx

#cd /root/soft
#tar -zxvf openssl-1.0.1i.tar.gz
#tar -zxvf pcre-8.35.tar.gz
#tar -zxvf nginx-1.6.1.tar.gz
#cd nginx-1.6.1
#mkdir -pv /usr/local/nginx  {client_body_temp,proxy_temp,fastcgi_temp,uwsgi_temp,scgi_temp}
#./configure --prefix=/usr/local/nginx/ --with-pcre=/root/soft/pcre-8.35 --with-http_ssl_module --with-openssl=/root/soft/openssl-1.0.1i --with-http_gzip_static_module --with-http_realip_module --with-http_stub_status_module --http-client-body-temp-path=/usr/local/nginx/client_body_temp/ --http-proxy-temp-path=/usr/local/nginx/proxy_temp/ --http-fastcgi-temp-path=/usr/local/nginx/fastcgi_temp/ --http-uwsgi-temp-path=/usr/local/nginx/uwsgi_temp/ --http-scgi-temp-path=/usr/local/nginx/scgi_temp/
#make && make install
#make clean

到此,如果沒有什麼報錯,則基本安裝成功。不過要注意的是pcre和openssl用的都是源碼包

測試nginx:
#/usr/local/nginx/sbin/nginx //啓動nginx
#ps aux | grep nginx  //查看nginx進程是否啓動成功
#netstat -nultp | grep 80  //查看80端口是否監聽,nginx默認監聽在80端口

瀏覽器測試;
http://10.0.10.12  //如果正常出現nginx的歡迎頁面,則表示nginx安裝成功

拓展:
 給大家介紹一個linux下的文本瀏覽器elinks,以後本地測試時,可以直接在linux系統中進行測試。
#yum -y install elinks
#links --dump
http://10.0.10.12 //直接打印出web站點的內容,如果想以交互式的界面訪問,則直接敲入elinks回車即可。

3.安裝MySQL
#yum -y install zlib-devel openssl-devel ncurses-devel bison//因爲下面編譯mysql用到了這幾個開發文件,所以必須安裝好
#cd /root/soft/
#tar -zxvf mysql-5.5.27.tar.gz
#cd mysql-5.5.27
#mkdir /usr/local/mysql
#useradd -s /sbin/nologin mysql -M
#cmake
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/data/mysqldata (注:這裏在企業環境中,通常會用一個單獨的目錄來存放mysql的數據文件,如果業務小可以不用,默認放在/var/lib/mysql下面)
-DSYSCONFDIR=/etc
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock   
-DENABLED_LOCAL_INFILE=1
-DWITH_READLINE=1
-DWITH_SSL=system
-DWITH_ZLIB=system
-DWITH_LIBWRAP=0
-DMYSQL_TCP_PORT=3306 
-DEXTRA_CHARSETS=all 
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci   
-DWITH_EXTRA_CHARSETS:STRING=all 
-DMYSQL_USER=mysql 
-DWITH_DEBUG=0
#make
#make install
#make clean

#chown -R mysql.mysql /usr/local/mysql
#chown -R mysql.mysql /data/mysqldata
#cd /usr/local/mysql/scripts
#mysql_install_db --datadir=/data/mysqldata --basedir=/usr/local/mysql --user=mysql
#cd ../support-files
#cp my-large.cnf /etc/rc.d/my.cnf
#cp -p mysql.server /etc/rc.d/init.d/mysqld
#chown -R root.mysql /usr/local/mysql
#service mysqld start
#mysqladmin -u root passwod "lxm"   //設置MySQL root用戶的密碼
#mysql -u root -p
輸入root密碼,測試mysql安裝是否成功

到此,如果一切都沒有錯誤,則表示mysql安裝成功


4.安裝PHP
 php的安裝和使用,確實是值得一說的技術,但是這裏只做簡單的安裝使用。關於詳細的安裝使用將在LAMP中詳細的聊一聊。。。
安裝必須的軟件包:
#yum -y install ncurses-devel  net-snmp-devel  bzip2 bzip2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel libxml2 libxml2-devel libxslt libxslt-devel zlib zlib-devel expat expat-devel openssl openssl-devel gd php-gd libjpeg libjpeg-devel libtool libtool-ltdl libtool-ltdl-devel 

安裝libmcrypt和mhash  //這兩個東西都是爲php提供加密算法相關的庫文件的
#cd /root/soft
#tar -zxvf libmcrypt-2.5.7.tar.gz
#cd libmcrypt-2.5.7
#mkdir /usr/local/libmcrypt
#./configure --prefix=/usr/local/libmcrypt
#make && make install
#make clean

#cd /root/soft
#tar -zxvf mhash-0.9.9.tar.gz
#cd mhash-0.9.9
#mkdir /usr/local/mhash
#./configure --prefix=/usr/local/mhash
#make && make install
#make clean

安裝php:
#cd /root/soft/
#tar -zxvf  php-5.5.16.tar.gz
#cd php-5.5.16
#mkdir /usr/local/php55
#./configure --prefix=/usr/local/php55/  --with-libxml-dir=/usr/include/libxml2/ --with-config-file-path=/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-gd --enable-gd-native-ttf --with-zlib --with-mcrypt=/usr/local/libmcrypt/ --with-mhash=/usr/local/mhash/ --with-pdo-mysql=mysqlnd --enable-fpm --enable-shmop --enable-soap --enable-sockets --enable-wddx --enable-zip --with-xmlrpc --enable-mbstring --with-zlib-dir=/usr/lib --with-bz2 --with-curl --enable-exif --enable-ftp --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib --with-freetype-dir=/usr/lib --with-pcre-dir --enable-bcmath --with-config-file-scan-dir=/etc/php.d/ --with-openssl
如果沒有錯誤,將會顯示下面的內容:
Generating files
configure: creating ./config.status
creating main/internal_functions.c
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+

Thank you for using PHP.

config.status: creating php5.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/fpm/php-fpm.conf
config.status: creating sapi/fpm/init.d.php-fpm
config.status: creating sapi/fpm/php-fpm.service
config.status: creating sapi/fpm/php-fpm.8
config.status: creating sapi/fpm/status.html
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands


#make && make install
如果沒有錯誤將顯示下面的內容:
Installing shared extensions:     /usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/
Installing PHP CLI binary:        /usr/local/php55/bin/
Installing PHP CLI man page:      /usr/local/php55/php/man/man1/
Installing PHP FPM binary:        /usr/local/php55/sbin/
Installing PHP FPM config:        /usr/local/php55/etc/
Installing PHP FPM man page:      /usr/local/php55/php/man/man8/
Installing PHP FPM status page:      /usr/local/php55/php/fpm/
Installing PHP CGI binary:        /usr/local/php55/bin/
Installing PHP CGI man page:      /usr/local/php55/php/man/man1/
Installing build environment:     /usr/local/php55/lib/php/build/
Installing header files:          /usr/local/php55/include/php/
Installing helper programs:       /usr/local/php55/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/php55/php/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /usr/local/php55/lib/php/
[PEAR] Archive_Tar    - installed: 1.3.12
[PEAR] Console_Getopt - installed: 1.3.1
[PEAR] Structures_Graph- installed: 1.0.4
[PEAR] XML_Util       - installed: 1.2.3
[PEAR] PEAR           - installed: 1.9.5
Wrote PEAR system config file at: /usr/local/php55/etc/pear.conf
You may want to add: /usr/local/php55/lib/php to your php.ini include_path
/root/soft/php-5.5.16/build/shtool install -c ext/phar/phar.phar /usr/local/php55/bin
ln -s -f /usr/local/php55/bin/phar.phar /usr/local/php55/bin/phar
Installing PDO headers:          /usr/local/php55/include/php/ext/pdo/

#make clean


#cp php.ini-production /etc/php.ini
#cd /usr/local/php55/bin
#./php -m | less  // 查看php編譯內置的模塊,如果沒有你需要的則需要額外添加,具體怎麼配置請見LAMP
注意:測試php模塊時常見的一個錯誤是提示你不能加載某些模塊,例如:PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/curl.so' - /usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/curl.so: cannot open shared object file: No such file or directory in Unknown on line 0  。出現這樣的錯誤,不要緊張。這是因爲你是編譯安裝的php模塊,而這裏提示你不能加載的模塊通常都是你rpm包安裝時需要加載的模塊。這些模塊的配置文件通常都在/etc/php.d/目錄下,你只需要刪除這些文件即可,再次測試就不會有錯。而你發現未能加載的模塊,在php的內置模塊中已經可以使用了,這就是php的源碼編譯。

#cd /usr/local/php55/etc/   //提示:爲什麼總是用絕對路徑,就是怕有些人不知道我切來切去,切哪裏去了。笨蛋的技術,必須讓你知道所以然。。。。
#cp -p php-fpm.conf.default php-fpm.conf
[root@test2 etc]# /usr/local/php55/sbin/php-fpm  //啓動fpm進程
[root@test2 etc]# ps aux | grep fpm
root     17161  0.0  0.9 207092  4972 ?        Ss   10:38   0:00 php-fpm: master process (/usr/local/php55/etc/php-fpm.conf)
nobody   17162  0.0  0.8 207092  4388 ?        S    10:38   0:00 php-fpm: pool www
nobody   17163  0.0  0.8 207092  4388 ?        S    10:38   0:00 php-fpm: pool www
root     17165  0.0  0.1 103244   848 pts/0    S+   10:38   0:00 grep fpm
[root@test2 etc]# netstat -nultp | grep fpm
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      17161/php-fpm

由上面的信息可知,php-fpm已經成功啓動,並監管php程序的解釋

相關內容介紹:
1.freetype:是一些常用的字體庫
2.zlib:是互聯網上通用格式的壓縮庫
3.--enable-sockets:讓php可以支持套接字通信
4.mcrypt:支持加密功能的額外加密庫
5.如果使用PHP5.3以上版本,爲了連接MySQL數據庫,可以指定mysqlnd,這樣在本機就不用先安裝MySQL或MySQL開發包了。mysqlnd從php5.3開始可用,可以編譯時綁定到它(而不用和具體的MySQL客戶端綁定形成依賴,但從php5.4開始它就是默認的了。
#./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd
6.--enalbe-fpm 該選項是將php編譯成單獨的由php-fpm管理的服務器。nginx沒有像apache那樣把php集成到內部的功能,因此編譯php時必須加上該選項,否則nginx與php將不可通過fastcgi進行整合。也正是由於這個功能,可以將php做成集羣。


5.整合nginx和php
 nginx和php的整合可以通過proxy_pass和fastcgi兩種方式來整合,但是通常是通過fastcgi的方式來進行整合,至於fastcgi的好處,請自行查閱。。。
修改配置文件:/usr/local/nginx/conf/nginx.conf
確保有如下整合php的配置:
 location ~ \.php$ {
            root        /usr/local/nginx/html;  //這是指定網站的根目錄,在網站根目錄以外的php文件是不會被解釋的,會提示file not found。
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
       #     fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;       // 這是nginx文檔裏面默認的配置,但是在新版的nginx當中已經無效,會提示招不到根目錄
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

#service nginx configtest //檢查配置文件是否有語法錯誤  
#service nginx restart  // 我已經配置nginx的啓動文件,如果你也需要,請到nginx的安裝部署裏面拷貝一個。
#cd /usr/local/nginx/html
創建一個index.php的測試文件,內容如下:
<?php
phpinfo();
?>

測試php頁面是否能夠正常解析並訪問:
瀏覽器:
http://10.0.10.12/index.php
如果一切正常,會返回php的測試頁面,該頁面也是查看php相關參數和功能的頁面,必須要會


6.測試LNMP架構
 安裝好了nginx,mysql,php,最後就要測通這三個程序在linux平臺上是否能夠跑通,這裏利用一個簡單的php測試文件即可。
#cd /usr/local/nginx/html
#vim index.php
修改該配置文件內容如下:
<?php
$links = mysql_connect('localhost','root','lxm');
if ($links)
 echo "yes";
else
 echo "no";
?>

流程:當客戶端請求該php文件時,nginx會將該php文件提交給後端的php-fpm進行解析,然後php調用mysql_connect對後端數據庫進行連接測試,如果成功則返回yes,失敗則返回no

測試:
http://10.0.10.12/index.php

wKioL1P8FDGzjvEYAACvuWPrdLc992.jpg


此時返回的結果是:no
這是why?查看日誌:
wKiom1P8ExrijVQEAAG9gJWTtsY648.jpg

看上面的報錯,好像是說mysql_connect這個函數沒有找到。奇怪爲什麼?經過多番測試,發現原來是mysql的sock文件的位置問題。在上面編譯時,使用了--enable-sockets,php默認是查找/var/lib/mysql下的mysqld.sock文件,這也是mysql默認存放sock的位置,但是此文檔在安裝mysql時,將sock放到了tmp目錄下,因此需要修改php.ini文件指定sock文件的位置。
#vim /etc/php.ini
找到下面的選項並指定soket位置
mysql.default_socket = /tmp/mysqld.sock

重啓php-fpm:
#pkill php-fpm
#/usr/local/php55/sbin/php-fpm

此時再次測試,返回yes,表示測試成功,也表示整個LNMP架構已經測通。

wKiom1P8ExrDcgAaAACdCu8gJck406.jpg

 

到此,LNMP平臺就搭建完成,更多技術文檔請看下回分解。。。。。

結束!!!
  笨蛋的技術------不怕你不會!!!!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章