平臺搭建環境:
CentOS5.2 32/x86_64 GNU/Linux (32/64操做系統均經過,推薦使用64位操做系統)php
目標:構建高性的LEMP環境提供WEB服務html
1、系統安裝
1. 系統分區建議
/boot 100M (大約100左右)
SWAP 物理內存的2倍(若是你的物理內存大於4G,分配4G便可)
/ 分區15~20G
/usr/local 20G (用於安裝軟件)
/data 剩餘全部空間.mysql
【注】具體分區請根據相關業務劃分,具體安裝本文不做介紹安裝過程當中選擇最少的包,採用文本模式安裝請不要安裝圖形。linux
2.系統初始化
系統初始化腳本(根據具體需求關閉不須要的服務)
# shinit_network.sh //下載本文提供的scripts.tar.gz包,便可找到此腳本.nginx
2、編譯安裝基本環境
1. 安裝準備
1.1系統軟件包安裝規範
系統約定
軟件源代碼包存放位置 /usr/local/src
源碼包編譯安裝位置(prefix) /usr/local/software_name
腳本以及維護程序存放位置 /usr/local/sbin
MySQL 數據庫位置 /data/mysql/data(可按狀況設置)
網站根目錄 /data/www/wwwroot(可按狀況設置)
虛擬主機日誌根目錄 /data/logs(可按狀況設置)
Nginx運行帳戶 www:www
install_software_name.sh //存放編譯參數腳本習慣將全部編譯腳本存放在install_software_name.sh便於升級和更新軟件.c++
建立網站帳號及相關存放目錄
#add_user.shsql
1. /usr/sbin/groupadd www
2. /usr/sbin/useradd -g www www
3. mkdir -p /data/www/wwwroot
4. chmod +w /data/www/wwwroot
5. chown www:www /data/www/wwwroot -R數據庫
複製代碼vim
1.2系統環境部署及調整
檢查系統是否正常
#tail -n100 /var/log/messages(檢查有無系統級錯誤信息)
#dmesg (檢查硬件設備是否有錯誤信息)
#ifconfig(檢查網卡設置是否正確)
#ping www.linuxtone.org (檢查網絡是否正常)後端
1.3使用 yum 程序安裝所需開發包(如下爲標準的 RPM 包名稱)
添加國內鏡像源加速軟件安裝下載速度請參照:http://bbs.linuxtone.org/thread-158-1-1.html
1. yum -y install ntp vim-enhanced gcc gcc-c++gcc-g77 flex bison autoconf automake bzip2-devel 」
2. ncurses-devel openssl-devel libtool*zlib-devel libxml2-devel libjpeg-devel libpng-devel libtiff-devel 」
3. fontconfig-devel freetype-devel libXpm-develgettext-devel curl curl-devel pam-devel 」
4. e2fsprogs-devel krb5-devel libidnlibidn-devel
複製代碼
1.4定時校訂服務器時鐘,定時與中國國家授時中心授時服務器同步
#crontab -e
加入一行:
1. 15 3 * * * /usr/sbin/ntpdate 210.72.145.44> /dev/null 2>&1
複製代碼
1.5下載編譯相關的源碼包.
#vi list 在list文件裏填入之後下載地址列表.
官方下載軟件包名:
1. #nginx
2. ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.8.tar.gz
3. http://sysoev.ru/nginx/nginx-0.7.30.tar.gz
4. #PHP-GD-LIB
5. http://www.libgd.org/releases/gd-2.0.35.tar.bz2
6. http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
7. http://jaist.dl.sourceforge.net/sourceforge/mcrypt/libmcrypt-2.5.8.tar.bz2
8. http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz?modtime=1228...
9. http://jaist.dl.sourceforge.net/sourceforge/mcrypt/mcrypt-2.6.7.tar.gz
10. #MySQL
11. http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.30.tar.gz/from/ht...
12. #php
13. http://cn.php.net/get/php-5.2.8.tar.bz2/from/cn2.php.net/mirror
14. http://php-fpm.anight.org/downloads/head/php-5.2.8-fpm-0.5.10.diff.gz
15. #PHP-EXT
16. http://pecl.php.net/get/memcache-2.2.4.tgz
17. http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
18. http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
19.
複製代碼
#wget -i list
2. 編譯安裝軟件包
源碼編譯安裝所需包(Source)
1.1 編譯安裝Nginx
1. tar zxvf pcre-7.8.tar.gz
2. cd pcre-7.8
3. ./configure && make && makeinstall
複製代碼
1. tar zxvf nginx-0.7.30.tar.gz
2. cd nginx-0.7.30
3. ./configure –user=www –group=www–prefix=/usr/local/nginx/ –with-http_stub_status_module
4. –with-openssl=/usr/lib
5. make && make install
複製代碼
1.2編譯安裝GD及相關的LIB.
1. tar jxvf gd-2.0.35.tar.bz2
2. cd gd-2.0.35
3. ./configure –prefix=/usr/local/gd2&& make && make install
4. tar zxvf libiconv-1.12.tar.gz
複製代碼
1. cd libiconv-1.12
2. ./configure –prefix=/usr && make&& make install
3. tar jxvf libmcrypt-2.5.8.tar.bz2
複製代碼
1. cd libmcrypt-2.5.8
2. ./configure –prefix=/usr && make&& make install
3.
複製代碼
1. tar zxvf mhash-0.9.9.tar.gz
2. cd mhash-0.9.9
3. ./configure –prefix=/usr && make&& make install
複製代碼
# vi /etc/ld.so.conf
添加/usr/lib
1. include ld.so.conf.d/*.conf
2. /usr/lib
複製代碼
# ldconfig
【注】ldconfig 命令的用途,主要是在默認搜尋目錄(/lib和/usr/lib)以及動態庫配置文件/etc/ld.so.conf內所列的目錄, 而當用戶安裝了一個新的動態連接庫時,就須要手工運行這個命令。
1. tar zxvf mcrypt-2.6.7.tar.gz
2. [code]
3. cd mcrypt-2.6.7
4. ./configure --prefix=/usr && make&& make install
複製代碼
1.3 編譯安裝MySQL
#sh install_mysql.sh
//具體腳本以下:
1. CHOST="x86_64-pc-linux-gnu"
2. CFLAGS="-march=nocona -O3 -pipe"
3. CXXFLAGS="${CFLAGS}"
4. ./configure "
5. "--prefix=/usr/local/mysql" "
6. "--localstatedir=/data/mysql/data" "
7. "--with-comment=Source" "
8. "--with-server-suffix=-Linuxtone.Org" "
9. "--with-mysqld-user=mysql" "
10. "--without-debug" "
11. "--with-big-tables" "
12. "--with-charset=gbk" "
13. "--with-collation=gbk_chinese_ci" "
14. "--with-extra-charsets=all" "
15. "--with-pthread" "
16. "--enable-static" "
17. "--enable-thread-safe-client" "
18. "--with-client-ldflags=-all-static" "
19. "--with-mysqld-ldflags=-all-static" "
20. "--enable-assembler" "
21. "--with-plugins=all" "
22. "--without-ndb-debug"
23. make
24. make install
25. useradd mysql -d /data/mysql -s/sbin/nologin
26. /usr/local/mysql/bin/mysql_install_db--user=mysql
27. cd /usr/local/mysql
28. chown -R root:mysql .
29. mkdir -p /data/mysql/data
30. chown -R mysql /data/mysql/data
31. cp share/mysql/my-huge.cnf /etc/my.cnf
32. cp share/mysql/mysql.server/etc/rc.d/init.d/mysqld
33. chmod 755 /etc/rc.d/init.d/mysqld
34. chkconfig --add mysqld
35. /etc/rc.d/init.d/mysqld start
36.
37. cd /usr/local/mysql/bin
38. for i in *; do ln -s /usr/local/mysql/bin/$i/usr/bin/$i; done
複製代碼
【注】編譯mysql前請正確配置好主機名,不然不能正常啓動.
例如:
[xxxxx@xxxxx.com-5.1.30]# cat /etc/hosts
1. # Do not remove the following line, or various programs
2. # that require network functionality will fail.
3. 127.0.0.1 localhost.localdomainlocalhost
4. 192.168.1.104 lemp.linuxtone.org
複製代碼
【注】將本文提供下載的scripts.tar.gz包中的my.cnf替換你的/etc/my.cnf,並根據你的硬件參數作相關調整,並能夠利用包中的tuning-primer.sh 作初步性能調優。
1.4 編譯安裝PHP-FastCGI
1. tar jxvf php-5.2.8.tar.bz2
2. gzip -cd php-5.2.8-fpm-0.5.10.diff.gz| patch -d php-5.2.8 -p1
3. cd php-5.2.8
複製代碼
#sh install_php.sh
//具體腳本以下
1. CHOST="i686-pc-linux-gnu"
2. CFLAGS="-march=prescott-O3 -pipe -fomit-frame-pointer"
3. CXXFLAGS="${CFLAGS}"
4. ./configure "
5. "--prefix=/usr/local/php-fcgi" "
6. "--enable-fastcgi" "
7. "--enable-fpm" "
8. "--enable-discard-path" "
9. "--enable-force-cgi-redirect""
10. "--with-config-file-path=/usr/local/php-fcgi/etc" "
11. "--enable-zend-multibyte" "
12. "--with-mysql=/usr/local/mysql" "
13. "--with-libxml-dir" "
14. "--with-xmlrpc" "
15. "--with-gd=/usr/local/gd2" "
16. "--with-jpeg-dir" "
17. "--with-png-dir" "
18. "--with-bz2" "
19. "--with-freetype-dir" "
20. "--with-iconv-dir" "
21. "--with-zlib-dir" "
22. "--with-curl" "
23. "--with-curlwrappers" "
24. "--with-openssl" "
25. "--with-mcrypt" "
26. "--with-mhash" "
27. "--enable-pcntl" "
28. "--enable-sockets" "
29. "--enable-sysvsem" "
30. "--enable-inline-optimization" "
31. "--enable-soap" "
32. "--enable-gd-native-ttf" "
33. "--enable-ftp" "
34. "--enable-mbstring" "
35. "--enable-exif" "
36. "--disable-debug" "
37. "--disable-ipv6"
38. #sed -i 's#-lz -lm -lxml2-lz -lm -lxml2 -lz -lm -lcrypt#& -liconv#' Makefile
39. makeZEND_EXTRA_LIBS='-liconv'
40. make install
41. cp php.ini-dist/usr/local/php-fcgi/etc/php.ini
複製代碼
1.5 編譯安裝PHP擴展
1. tar zxvf memcache-2.2.4.tgz
2. cd memcache-2.2.4
3. /usr/local/php-fcgi/bin/phpize
4. ./configure--with-php-config=/usr/local/php-fcgi/bin/php-config
5. make && make install
6.
複製代碼
1. tar jxvf eaccelerator-0.9.5.3.tar.bz2
2. cd eaccelerator-0.9.5.3
3. /usr/local/php-fcgi/bin/phpize
4. ./configure --enable-eaccelerator=shared--with-php-config=/usr/local/php-fcgi/bin/php-config
5. make && make install
6.
複製代碼
1. tar zxvf PDO_MYSQL-1.0.2.tgz
2. cd PDO_MYSQL-1.0.2
3. /usr/local/php-fcgi/bin/phpize
4. ./configure --with-php-config=/usr/local/php-fcgi/bin/php-config--with-pdo-mysql=/usr/local/mysql
5. make && make install
複製代碼
1.6 配置php.ini
#sh init_php.sh
//執行PHP配置腳本
【注】下載包中提供了此腳本.主要是添加自動添加PHP擴展及PHP安全相關設置,用戶能夠編輯此文件根據具體狀況作調整。
#vi /usr/local/php-fcgi/etc/php.ini //在最後加上
1. [eAccelerator]
2. extension="eaccelerator.so"
3. eaccelerator.shm_size="32"
4. eaccelerator.cache_dir="/cache_tmpfs/eaccelerator"
5. eaccelerator.enable="1"
6. eaccelerator.optimizer="1"
7. eaccelerator.check_mtime="1"
8. eaccelerator.debug="0"
9. eaccelerator.filter=""
10. eaccelerator.shm_max="0"
11. eaccelerator.shm_ttl="0"
12. eaccelerator.shm_prune_period="0"
13. eaccelerator.shm_only="0"
14. eaccelerator.compress="1"
15. eaccelerator.compress_level="9"
複製代碼
1.7 安裝ZendOptimizer-3.3.3
1. tar zxvf ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz
2. cd ZendOptimizer-3.3.3-linux-glibc23-x86_64
3. ./install
複製代碼
解壓後進入目錄./install,安提示選擇相關的目錄及配置文件存放目錄便可.
1.8 配置php-fpm.conf
rm -rf /usr/local/php-fcgi/etc/php-fpm.conf
將本文提供的php-fpm.conf文件上傳此目錄.
/usr/local/php-fcgi/sbin/php-fpm start //啓動服務查看是否報錯,不報錯繼續。
1.9 配置nginx/conf
1. #cd /usr/local/nginx
2. #mv conf conf_old
3. #mkdir -p conf/{vhost,conf_example}
複製代碼
#將本文提供的conf目錄替換成當前conf目錄.在下載的scripts.tar.gz包裏.
目錄結構介紹:
/usr/local/nginx/conf //存放主配置文件
/usr/local/nginx/conf/vhost //存放虛擬主機配置文件.
/usr/local/nginx/conf/conf_example //存放一些經典的配置示例{虛擬主機,防盜鏈,訪問控制,重定向,負載均衡等}
[xxxxx@xxxxx.com]# /usr/local/nginx/sbin/nginx –t //驗證是否有配置語法錯誤.
1. 2009/01/06 09:36:12 [info] 23353#0: the configuration file/usr/local/nginx//conf/nginx.conf syntax is ok
2. 2009/01/06 09:36:12 [info] 23353#0: the configuration file/usr/local/nginx//conf/nginx.conf was tested successfully
複製代碼
#chmod a+x /etc/init.d/nginx //將文本提供的nginx腳本上傳至/etc/init.d/目錄下
【注】此腳本已經含有php-fpm的管理.直接利用此腳本便可管理全部服務.
1. # /etc/init.d/nginx stop //中止nginx服務
2. # /etc/init.d/nginx start //啓動nginx服務
複製代碼
2.0 驗證服務環境
配置完成虛擬主機之後,編輯php.ini把disable_functions裏的phpinfo去掉,仍後重啓服務,利用Phpinfo函數查看環環配置。
編寫phpinfo.php
1. <?php
2. phpinfo();
3. ?>
複製代碼
http://ip/phpinfo.php
便可查看當前配置環境. 查看完成後出於安全考慮請再將此函數禁掉.
3、服務器簡單優化
1.簡單優化磁盤I/O
# vi /etc/fstab //加入notaime
1. LABEL=/data /data ext3 defaults,noatime 0 2
複製代碼
#mount -oremount /data //從新掛載/data分區.
2.簡單優化Linux內核參數(更多的請根據服務器情況作相關調整)
#vi/etc/sysctl.conf
1. net.ipv4.tcp_fin_timeout = 30
2. net.ipv4.tcp_keepalive_time = 300
3. net.ipv4.tcp_syncookies = 1
4. net.ipv4.tcp_tw_reuse = 1
5. net.ipv4.tcp_tw_recycle = 1
6. net.ipv4.ip_local_port_range = 555-55550
複製代碼
1. #sysctl –p
複製代碼
3.其它優化根據具體狀況還有硬件狀況作調整.
更多的優化請參考: http://www.linuxtone.org/forum-31-1.html 或聯繫咱們.
4、相關參考及介紹.
1.Nginx Tips(Nginx應用技巧含優化) http://bbs.linuxtone.org/thread-1241-1-1.html
2.LEMP構建高性能WEB服務器(第二版)http://bbs.linuxtone.org/thread-123-1-1.html
3.若是你想構建可用集羣方案請參考 http://www.linuxtone.org/thread-1402-1-1.html
4.若是你想學習服務器監控請參考 http://www.linuxtone.org/forum-20-1.html
5、相關軟件包及腳本下載
http://www.linuxtone.org/lemp/scripts.tar.gz 文中全部腳本及配置範例。
http://www.linuxtone.org/lemp/lemp.tar.gz 全部軟件包若是發現不能下載請去官方下載。
6、常見錯誤(疑問)解答 [守住每一天] 補充:
一、eaccelerator 與xcache 差在那?
當緩存的PHP二進制文件太多,以致於超過shm_size後,eAccelerator在性能方面要高於Xcache
2、按文檔安裝完成告終果出502Bad Gateway ?
請查看http://www.linuxtone.org 相關版塊
3、nginxstatus 解釋
active connections -- 對後端發起的活動鏈接數
server accepts handled requests -- nginx 總共處理了555-55553 個鏈接, 成功建立555-55553 次握手
(證實中間沒有失敗的), 總共處理了555-5555 個請求
reading -- nginx 讀取到客戶端的Header信息數
writing -- nginx 返回給客戶端的Header信息數
waiting -- 開啓 keep-alive 的狀況下,這個值等於 active - (reading +writing),意思就是Nginx已經處理完成,
正在等候下一次請求指令的駐留鏈接。在訪問效率高,請求很快被處理完畢的狀況下,Waiting數比較可能是正常的。
若是reading + writing數較多,則說明併發訪問量很是大,正在處理過程當中。
四、EA 或xcache和zend 能一塊兒使用?
能夠
五、按腳本執行sed -i -e 's/^LANG=.*/LANG="en"/' /etc/sysconfig/i18n 後。
可能會遇到以下錯誤:
perl: warning: Please checkthat your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG ="en_US.UTF-8:en_US:en_US.ISO-8859-1" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). 解決辦法: LC_ALL=C;exportLC_ALL ; LC_CTYPE=C ; export LC_CTYPE;