AceLNMP 2.3

作者: | 2009-11-15
Logo

********** 檔案簡介 **********

AceLNMP是一個基於CentOS系統的自動安裝Shell Script,主要都是以各軟體官方釋出最新的穩定版本為主,目前主要軟體的版本為NGiNX 1.0.15、MySQL 5.0.96、PHP 5.3.14。

什麼是LNMP? 就是Linux + NGiNX + MySQL + PHP的一個網站開發環境,本檔案僅適合於紅帽或Fedora(好像是廢話)或CentOS系列的Linux,其他Linux系統請參考acelnmp.sh的內容分別安裝軟體。 :D

其他Debian、Gentoo、Slackware、Ubuntu之類的當然也很牛,不過我比較習慣玩帽子,而VPS的主機商大多提供的都會有CentOS,有興趣學習CentOS的先看看維基的介紹:$ 對於Linux新手,鳥哥的Linux私房菜是個入門的好選擇。 (Y)

*********更新歷史*********

2009/10/28 – 開始研究自動安裝腳本
2009/11/01 – 成功安裝在Yourwebhoster.eu的OpenVZ規格 VPS
2009/11/11 – 成功安裝在RapidVPS.com的XEN規格VPS
2009/11/12 – 成功安裝在1xen.co.uk的XEN規格VPS
2009/11/14 – 成功安裝在HostingInside.com的OpenVZ規格VPS
2009/11/15 – 公佈AceLNMP 1.0
2009/11/16 – 成功安裝在servainet.com的XEN規格VPS
2009/11/17 – 新增安裝ZendOptimizer的安裝方法
2009/11/25 – NGiNX更新到0.7.64
2009/12/03 – phpMyAdmin更新到3.2.4
2009/12/15 – MySQL更新到5.1.41
2010/09/21 – 更新AceLNMP 1.5(更新一大堆 :kao )
2010/10/15 – MySQL更新到5.1.51(修正5.1.50版的DDOS疑慮)
2010/11/09 – 更新粉多~ MySQL更新到5.1.52、NGiNX更新到0.8.53、PHP更新到5.3.3、phpMyAdmin更新到3.3.8
2010/11/10 – 修正幾個ln錯誤的連結
2011/10/20 – 久久想到的大更新,MySQL返老還童用回5.0.92,別揍我! (H)
2011/11/09 – 修正2個安裝問題,更新phpMyadmin 3.4.7。
2012/04/05 – 更新一大堆。
2012/07/03 – 更新NGiNX 1.0.15、MySQL 5.0.96、PHP 5.3.14。

本檔案參考了以下網站,非常感謝他們提供的資訊 :P

簡體中文

Nginx 的中文維基
LNMP-Linux下Nginx+PHP+MySQL+phpMyAdmin+eAcelerator一鍵安裝包 – Licess’s Blog
最新Linux下的Nginx+MySQL+PHP+Memcache+Vsftpd一鍵安裝包 | 貓言貓語
瘋人醉語 ? Blog Archive ? LNMP-LNMPz-最新Linux下的Nginx+MySQL+PHP+phpMyAdmin+eAcelerator+Zend Optimizer一鍵安裝包
LNMP Debian/Ubuntu下Nginx+MySQL+PHP+phpMyAdmin+Zend一鍵安裝包beta發佈 – VPS偵探
Nginx 0.8.x + PHP 5.2.10(FastCGI)搭建勝過Apache十倍的Web服務器(第5版)[原創] – 回憶未來[張宴] – 服務器系統架構與底層研發
Nginx 中文網
Nginx使用幫助

英文

NGiNX WiKi
nginx Web Server Tutorials
Install NGINX (better than Apache or Lighttpd) – VPS Bible Pt 11 – GUVNR
Setup WordPress on NGINX (FURLs & Cache) – VPS Bible Pt 13 – GUVNR
Nginx – VPSLink Wiki
Virtual Private Server Life: NGINX, PHP-CGI, SPAWN-FCI, FTP, VHOSTS, MYSQL | centos-fedora-redhat
howto: nginx with php and Passenger (mod_rails) at once | Matejunkie
Very low memory VPS Linux for Rails | Ruby, Rails, OSX and Linux fun
Perfect Setup: Ubuntu Hardy+Nginx+MySQL5+PHP5+Wordress | MENSK Technologies Corporation
Using Nginx as a Reverse Proxy to Get the Most Out of Your VPS. | Ubuntu Geek

使用上有任何問題可留下錯誤訊息或附上記錄檔,我有空可以幫忙檢查,目前只碰過如果記憶體太少的時候,編譯MySQL時會發生錯誤,這個需要請主機商幫忙暫時加大記憶體。 :|

下面圖片是我其中一台VPS安裝完AceLNMP(PHP-FPM只開了一線)再+SNMP+神秘的transmission也只吃114MB記憶體而已。

********** 安裝及設定說明 **********

安裝步驟1. 首先下載AceLNMP安裝包

cd /usr/src
wget http://acelnmp.googlecode.com/files/acelnmp-2.3.tar.gz
tar xzf acelnmp-*.tar.gz
cd acelnmp-*

—————————我是分隔線—————————

安裝步驟2. 新增套件管理軟體來源

i386

wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
wget http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
rpm -ivh epel-release-5-4.noarch.rpm rpmforge-release-0.5.2-2.el5.rf.i386.rpm
rm -f epel-release-5-4.noarch.rpm rpm rpmforge-release-0.5.2-2.el5.rf.i386.rpm

x86_64

wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
wget http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
rpm -ivh epel-release-5-4.noarch.rpm rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
rm -f epel-release-5-4.noarch.rpm rpm rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

—————————我是分隔線—————————

安裝步驟3. 下載LNMP環境所需的檔案

chmod +x download.sh
./download.sh

下載完畢之後先檢查一下檔案是不是都在,特別要注意的是如果SSH連線到主機時跑很慢或是不太順暢的,請先進入SCREEN後再開始安裝AceLNMP :kao

—————————我是分隔線—————————

安裝步驟4. 開始安裝AceLNMP(請記得開啟你的SSH連線軟體紀錄的功能,如果有問題也可以方便抓) (H)

chmod +x acelnmp.sh
./acelnmp.sh

acelnmp.sh剛開始只要輸入你的域名,再來就是全自動化的編譯+安裝,大約需要20~30分鐘才會跑完,視VPS的硬體規格而定。 :pu

—————————我是分隔線—————————

安裝步驟5. 跑完acelnmp.sh之後先進入MySQL增加phpMyAdmin關聯功能

service mysql start
mysql -u root -proot
create database phpmyadmin;
USE phpmyadmin;
FLUSH PRIVILEGES;
quit;
/usr/local/mysql/bin/mysql -u root -proot phpmyadmin < /web/www/phpmyadmin/examples/create_tables.sql

再修改MySQL ROOT帳號的密碼,預設為root / root

mysqladmin -u root -p原密碼 password 新密碼

—————————我是分隔線—————————

安裝步驟6. 最後執行NGiNX來打開探針或是phpMyAdmin看看有沒有問題吧~ :D

/etc/init.d/nginx start
/etc/init.d/php-fpm start

一切都OK之後,完工~ 恭喜你的LNMP環境完成了,結束囉! :P 完工~

cd /usr/src/
rm -rf acelnmp-*

日後需要更新NGiNX的時候只要先下這個指令再編譯安裝NGiNX好就可以啟動新版的NGiNX而且網站不會中斷 (Y)

kill -HUP cat /var/run/nginx.pid

—————————我是分隔線—————————

NGiNX 安裝資料夾 : /usr/local/nginx
MySQL 安裝資料夾 : /usr/local/mysql
PHP 安裝資料夾 : /usr/local/php
網站資料夾 : /web/www
ImageMagick程序路徑 : /usr/local/bin/
ImageMagick轉換程序路徑 : /usr/local/bin/convert

MySQL 設定檔 : /etc/my.cnf
NGiNX 設定檔 : /usr/local/nginx/conf/nginx.conf
PHP 設定檔 : /usr/local/php/etc/php.ini
FastCGI 設定檔 : /usr/local/php/etc/php-fpm.conf

NGiNX 記錄檔 : /var/log/nginx-error.log
FastCGI記錄檔 : /var/log/php-fpm.log
MySQL記錄檔 : /var/log/mysql.log

phpMyAdmin : http://你的域名/phpmyadmin/
iProber PHP 探針 : http://你的域名/iProber.php
PHPINFO : http://你的域名/phpinfo.php
PHP Benchmark : http://你的域名/php-benchmark.php

—————————我是分隔線—————————

備註1:調整NGiNX的負載能力

nginx.conf裡面我有註釋一些解釋在上面,另外附上WordPress、Discuz、ZEND Framework的Rewrite規則,其他可以參考NginxHttpRewriteModule、nginx rewrite的參數大全來寫自己的Rewrite規則。

vi /usr/local/nginx/conf/nginx.conf

NGiNX以的負載能力最主要的設定就是工作線程,因為NGiNX本身只有簡單的HTTP伺服器基本功能,大多數的功能都依賴別的套件來發揮它強大的高負載功力

worker_processes 4;

測試NGiNX設定檔是否正確

/usr/local/nginx/sbin/nginx -t

啟用新的NGiNX設定值

kill -HUP cat /var/run/nginx.pid

備註2:調整FastCGI的負載能力

由於新版的PHP已經內建了FastCGI,所以設定檔也跟著變成php.ini的格式了,編輯php-fpm.conf,調整方式依舊是依照系統負荷量(尤其要注意記憶體消耗量,1個工作線程大約消耗10~20MB記憶體)調高max_children參數來增加FastCGI的工作線程數量,並延長中斷時間。

vi +/pm.max_children /usr/local/php/etc/php-fpm.conf

FastCGI的啟動方式依舊是檔案或端口做處理,這邊已經改成用端口方式比較方便,以後要是需要做負載平衡或是後端轉發給apache或lighthttpd也不用東改西改。

listen = 127.0.0.1:9000

然後增加9000端口到iptables規則

iptables -A INPUT -p tcp --dport 9000 -j ACCEPT

要注意的是新版PHP針對FastCGI設定線程可選兩種模式處理,static靜態模式,dynamic是動態模式處理,這邊的設定是依128MB的VPS為準,因為pm.max_children僅在靜態模式底下有效,所以使用靜態模式讓FastCGI的工作線程數量只使用2個,比較能控制記憶體消耗量。

pm = static
pm.max_children = 1

而記憶體在512MB左右的可以試用dynamic的動態模式,動態模式剛開始啟動是pm.start_servers指定的數量,如果請求較多則會自動增加FastCGI的工作線程,但不會超過pm.max_spare_servers指定的數量,空閒時也不會降低到pm.min_spare_servers指定的數量。另外pm.start_servers指定的數量可以參考原設定檔裡面所提的: min_spare_servers + (max_spare_servers - min_spare_servers) / 2。

pm = dynamic
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

如果記憶體1GB以上的話也可以換成PHP原廠的設定或是再增加pm.max_spare_servers的數量。

pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35

延長中斷時間這對降低FastCGI負荷量很有效果,而且比較不會造成FastCGI的工作線程死翹翹。

request_terminate_timeout = 60s

啟用新的FastCGI設定值

/etc/init.d/php-fpm restart

—————————我是分隔線—————————

備註3:調整my.cnf設定

cp /etc/my.cnf /etc/my.cnf.bak
vi /etc/my.cnf

my.cnf的設定是最討厭的部份 = = 懶人法當然是直接把官方預設的檔案直接複製過去~

my-small.cnf // 記憶體少於 128MB。
my-medium.cnf // 記憶體 256MB~512MB。
my-large.cnf // 記憶體 512MB。
my-huge.cnf // 記憶體 1GB~2GB。
my-innodb-heavy-4G.ini // 記憶體 4GB 以上。

但是實際上要跑出最好的效能是需要一直做調整才抓的出來的,而我參考了LowEndBox的
Reducing MySQL Memory Usage for Low End Boxes 這篇文章來設定記憶體小於256MB的VPS,另外MySQL配置文件例子翻譯這是一位中國網友翻譯的也可以看看,根據某不具名的DBA大帥是說依據這個規範就對了

MySQL消耗的記憶體量 = key_buffer +
max_connections 乘 (join_buffer_size + read_buffer_size + sort_buffer_size + thread_stack + tmp_table_size)

/etc/init.d/mysql restart

—————————我是分隔線—————————

備註4:調整php.ini設定

vi /usr/local/php/etc/php.ini

memory_limit 128M // 程式最多允許使用記憶體量
post_max_size 8M // POST的大小
upload_max_filesize 2M // 允許上傳檔案的大小
max_execution_time 30 秒 // 程式最長運行時間
max_input_time 60 秒 // 每個Script處理輸入資料可用時間上限

A. memory_limit 大於或等於 post_max_size
B. post_max_size 大於或等於 upload_max_filesize

符合此規範才能順利上傳檔案唷 8-)

一般中小型網站的範例

post_max_size = 50M
upload_max_filesize = 50M
max_execution_time = 600
max_input_time = 600

一個可上傳影音檔案或大型的網站的範例

post_max_size = 128M
upload_max_filesize = 128M
max_execution_time = 1800
max_input_time = 1800

如果需求超過128MB以上時,除了在加大參數之外同時也要編輯nginx.conf中的調整client_max_body_size這個參數來符合需求

vi /usr/local/nginx/conf/nginx.conf

client_max_body_size 128m;

最後可能會需要調整的是分配記憶體給eAccelerator加速器大小的參數是16MB,適合記憶體在128MB的VPS主機,視主機記憶體多寡可以自行調整來加強效能

eaccelerator.shm_size="16"

—————————我是分隔線—————————

備註5:ZendOptimizer在PHP 5.3.X版本已經改名成Zend Guard,但其實就個人來說,我自己是覺得有eAccelerator就夠了,跑大型網站在把memcache拉上來吧!Linux的調教上並不適用多多益善這個道理,求穩定才是真王道 (Y)

—————————我是分隔線—————————

備註6:PHP在MAKE完畢時會跳一個錯誤訊息

PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.

但這問題是可以忽略的,並不會影響PHP的運作,就照字面意思翻譯是缺少了一個叫做PHP_Archive的PEAR套件,有需要再手動安裝,沒樁也不會影響到PHP的運作,除非某些特定程式要這個PEAR套件。

cd /usr/local/php/bin
wget http://pear.php.net/go-pear.phar
php go-pear.phar
ln -f -s /usr/local/php/bin/pear /usr/bin/pear
pear install channel://pear.php.net/PHP_Archive-0.11.4
rm -f go-pear.phar

PHP_Archive這個錯誤,我猜是因為他是ALPHA的關係,因為正常大多人都是安裝穩定的版本,咕狗大神開示說PHP 5.3.6就有這個狀況,所以很無奶.....打錯~是無奈! 總之有需要的人再補這個吧~ (W)


臉書回應

篇回應

23 thoughts on “AceLNMP 2.3

  1. 779

    鋼喵了一下張宴的BLOG

    他寫的真詳細….@@

    他的OK嗎 有什麼缺陷嗎??

    回覆
  2. 五的

    Entering directory ‘/home/litoueva/acelnmp/mysql-5.1.52/mysql-test’
    安装停在这里不动了,怎么解决

    回覆
  3. 五的

    没问题了,安装好后怎么启动代码service nginx restart显示
    bash:service:command not found
    下面要怎么做

    回覆
  4. 窮苦人家的小孩 文章作者

    service nginx restart沒錯啊…你是啥米系統啊 @@” 或是試試/etc/init.d/nginx restart (Y)


    五的:

    没问题了,安装好后怎么启动代码service nginx restart显示
    bash:service:command not found
    下面要怎么做

    回覆
  5. 五的

    nginx文件缓存时间怎么弄动态静态那些,在nginx怎么配置,在网上找到可是配置错误服务器就没办法启动,谢谢

    回覆
  6. 窮苦人家的小孩 文章作者

    打開NGiNX 設定檔/usr/local/nginx/conf/nginx.conf,往下找到

    # 暫存特定檔案每7天過期
    location ~ .*.(ico|gif|jpg|jpeg|png|bmp|flv|swf)$ {
    expires 7d;
    access_log off;
    }

    這邊可以指定暫存什麼類型的檔案,若是rewrite的規則的話,我有把一些常見的打包進去了,在安裝過程中會複製到/usr/local/nginx/conf/rewrite底下。


    五的:

    nginx文件缓存时间怎么弄动态静态那些,在nginx怎么配置,在网上找到可是配置错误服务器就没办法启动,谢谢

    回覆
  7. 779

    XD 我也是因為有新機器 才在裝的

    KVM技術 虛擬3核 2G RAM 200G HDD @ Tokyo. :kao :kao :kao

    回覆
  8. 窮苦人家的小孩 文章作者

    O_o 多少錢一個月啊~ 網址交出來! GY

    XD 我也是因為有新機器 才在裝的

    KVM技術 虛擬3核 2G RAM 200G HDD @ Tokyo. :kao :kao :kao

    回覆
  9. 779

    可以用信用卡啊
    只要是JCB幾乎都可以過

    只是在申請時 你要日本IP 不難 XD XD

    回覆
  10. 779

    靠腰了 冏
    把PHP 改用5.3.27 就發生
    configure: error: libXpm.(a|so) not found.

    可是YUM的確有把LinXpm裝上去啊 冏

    回覆
  11. 窮苦人家的小孩 文章作者

    o_O 先看看libxpm.so在哪? 我的在這

    /usr/lib/libXpm.so.4
    /usr/lib/libXpm.so.4.11.0

    靠腰了 冏
    把PHP 改用5.3.27 就發生
    configure: error: libXpm.(a|so) not found.

    可是YUM的確有把LinXpm裝上去啊 冏

    回覆
  12. 779

    不知道是不是活見鬼了
    換回帽子5.10 i386 就裝上去了

    本來主機商提供的是6 的x64版 冏

    回覆
    1. 窮苦人家的小孩 文章作者

      鬼打牆了 o_O”

      不知道是不是活見鬼了
      換回帽子5.10 i386 就裝上去了

      本來主機商提供的是6 的x64版 冏

      回覆

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

(A)  :@  (brb)  (U)  (:cc)  :S  (H)  :-(  :cute  (6)  :-#  :$  :er  8-)  FUCK 
(})  ({)  GY  (L)  :kao  (K)  :cc  :pu  (F)  :(  ^o)  :-*  :O  +o(  |-) 
:)  (*)  :D  *-)  (N)  (Y)  :P  :|  (W)  ;)  XD