標籤:linux centos6.5 lnmp web架構
WEB平台架構之:LNMP(CentOS6.5+Nginx+MySQL+Php)
為了寫Nginx的系列教程,在介紹Nginx的各項功能時,能有個測試的環境,因此於此寫一篇LNMP的架構搭建,使那些看文檔的人能夠搭建自己的環境來測試Nginx的功能。但是通常情況下nginx用作純web網站不是很多,更多的是將nginx用在反向 Proxy環境中。但是由於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
[[email protected] etc]# /usr/local/php55/sbin/php-fpm //啟動fpm進程
[[email protected] 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
[[email protected] 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
650) this.width=650;" style="float:none;" title="2.jpg" src="http://s3.51cto.com/wyfs02/M00/47/88/wKioL1P8FDGzjvEYAACvuWPrdLc992.jpg" alt="wKioL1P8FDGzjvEYAACvuWPrdLc992.jpg" />
此時返回的結果是:no
這是why?查看日誌:
650) this.width=650;" style="float:none;" title="3.jpg" src="http://s3.51cto.com/wyfs02/M02/47/86/wKiom1P8ExrijVQEAAG9gJWTtsY648.jpg" alt="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架構已經測通。
650) this.width=650;" style="float:none;" title="1.jpg" src="http://s3.51cto.com/wyfs02/M01/47/86/wKiom1P8ExrDcgAaAACdCu8gJck406.jpg" alt="wKiom1P8ExrDcgAaAACdCu8gJck406.jpg" />
到此,LNMP平台就搭建完成,更多技術文檔請看下回分解。。。。。
結束!!!
笨蛋的技術------不怕你不會!!!!
本文出自 “笨蛋的技術” 部落格,請務必保留此出處http://mingyang.blog.51cto.com/2807508/1545100
WEB平台架構之:LNMP(CentOS6.5+Nginx+MySQL+Php)