Ubuntu Server配置Ruby企業版+Nginx+passenger+rails3+PHP+FPM運行環境

 rails的很多資料,都是用Apache做的舉例,我還是比較喜歡性能更高的Nginx,於是找了一番資料並親手逐步試驗之下,修正了資料中的一些錯誤,形成了下面正式的文檔。感謝網絡、感謝衆多資料文檔原作者:)


  實際安裝與測試版本爲ubuntu server 10.04 32位X86版,不過理論上,以下步驟也適用於ubuntu server9.04與桌面版。主要安裝目標是搭建一個基於ruby企業版的rails3的高速運行環境,同時在該臺服務器上支持php及相關工具。爲什麼要用ruby企業版呢?唔,根據官網資料,ruby企業版更加穩定,而且內存性能有33%以上的提升。
主要安裝步驟如下所述:
 
1 安裝ubntun
 
創建一個非root用戶
 
adduser shuqi888
更新源
 
sudo apt-get update
sudo apt-get upgrade
校正時區
 
sudo dpkg-reconfigure tzdata
選擇Asia,然後再選擇自己所在的時區【chongqing】。再查看是否設置正確:
 
date
2 安裝一些通用包
 
passenger等很多程序安裝的時候都需要,乾脆提前安裝好.
 
最重要的是gcc等編譯環境。
 
sudo apt-get install gcc
sudo apt-get install build-essential
其次重要的是git.
 
sudo apt-get install git-core
還有先下載,解壓等功能的包。
 
sudo apt-get install libcurl4-openssl-dev libssl-dev zlib1g-dev libreadline5-dev
最後是圖片庫imagemagick
 
sudo apt-get install imagemagick
創建管理下載文件的目錄
 
進入自己的home目錄,並且創建一個臨時文件夾,用於管理未來下載的一些文件。
 
cd /home/shuqi888
mkdir download
 
3 安裝mysql
 
sudo apt-get install mysql-server mysql-client
請牢記安裝過程中輸入的密碼。
 
4 安裝ree
 
進入之前創建的下載目錄,
 
cd /home/shuqi888/download
登陸ree官方網站
 
http://www.rubyenterpriseedition.com/download.html
 
找到最新版本的下載地址,然後使用wget直接下載到剛纔的目錄:
 
wget http://rubyforge.org/frs/download.php/71100/ruby-enterprise_1.8.7-2010.02_i386_ubuntu10.04.deb
然後開始安裝
 
sudo dpkg -i ruby-enterprise_1.8.7-2010.02_i386_ubuntu10.04.deb
檢查安裝是否成功:
 
ruby -v
正常應輸出:
 
ruby 1.8.7 (2010-04-19 patchlevel 253) [i686-linux], MBARI 0x8770, Ruby Enterprise Edition 2010.02
同時使用
 
gem list
可以看到,ree默認添加了一些老版本的gem,比如rails (2.3.8),passenger (2.2.14)等。在後續步驟中,我們將更新掉這些gem。
 
5 安裝rail並更新已經被ree默認安裝的gem //這一步聯網對網速要求有點高,有時候會失敗,重新執行一遍命令就好了
 
gem update --system
gem install rake
gem install rails
gem update
 
6 安裝nginx and passenger
 
請務必注意,安裝passenger之前,請使用gem list命令檢查已經安裝的passenger的版本。如果不是最新的版本,請務必使用gem install passenger而非gem update命令更新掉之後,才執行以下步驟。
 
遵從passenger官方安裝指南的提示,開始安裝:
 
passenger-install-nginx-module
按照界面提示,默認安裝即可。安裝成功之後,檢查nginx是否成功安裝:
 
打開nginx的默認安裝目錄:
 
sudo nano /opt/nginx/conf/nginx.conf
確保如下所示:
 
http {
    ...
    passenger_root /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.0;
    passenger_ruby /usr/local/bin/ruby;
    ...
}
passenger_ruby如果不是指向ree的ruby解釋器,會導致之後的gem源丟失問題,請務必確保此處指向的ruby與你所使用的ruby環境中的一致。
 
passenger如果不是指向3.0版本,則會報Unable to start the Phusion Passenger watchdog 錯誤。
 
啓動nginx
 
sudo /opt/nginx/sbin/nginx
重啓可以使用:
 
sudo /opt/nginx/sbin/nginx -s reload
刷新首頁,應能出來nginx的歡迎界面,如不能,則往往是需要reboot
 
7 配置nginx隨機啓動
 
passenger默認會將nginx安裝到/opt/nginx下,與直接安裝nginx的路徑略有差異,請特別注意。
 
參考Gist525330寫一個腳本到:/etc/init.d/nginx,命令如下:
 
cd /home/anrenserver/download/
git clone git://gist.github.com/525330.git
sudo mv 525330/nginx.sh /etc/init.d/nginx
chmod +x /etc/init.d/nginx  
#此處不能使用sudo chown等其他更改權限方式
讓啓動腳本隨機啓動:
 
sudo /usr/sbin/update-rc.d -f nginx defaults
sudo /etc/init.d/nginx start
如果成功,則可以直接使用start,stop,restart,reload控制nginx
 
更多關於passenger的nginx用法,可以參考嚮導文件
 
更多關於nginx的配置文件寫法可以參考這裏
 
8 測試rails應用

Rails3默認使用SQLite3,所以如果沒有,需要先安裝一下。
sudo apt-get install sqlite3 libsqlite3-dev
sqlite3 --version
看到3.6.22,正常安裝了。
 
上傳一個本地的rails應用,
 
tar -cpzf /backup/home.bak.tar.gz /home
然後解壓,
 
tar -xvf home.bak.tar.gz
再bundle install,再運行migrate任務。
 
rake db:migrate RAILS_ENV=production
對於有些應用來說,比如將靜態文件寫入到public目錄,則需要賦予public目錄權限:
 
chmod 777 public
按照安裝提示修改nginx的配置文件,
 
sudo vi /opt/nginx/conf/nginx.conf 
在server配置節,倒數第二行增加:
 
   server {
      listen 80;
      server_name www.yourhost.com;
      root /somewhere/public;   # <--- be sure to point to 'public'!
      passenger_enabled on;
   }
nginx的passenger模塊默認是生產模式,如果是在本機進行開發,請更改。示範如下:
 
   server {
      listen 80;
      server_name www.yourhost.com;
      root /users/shuqi888/projects/demo/public;   # <--- be sure to point to 'public'!
      passenger_enabled on;
      rails_env development;
   }
如果是在本機而不是服務器調試,記得修改host文件,
 
sudo vi /etc/hosts
增加:
 
127.0.0.1 www.yourhost.com
 
9 安裝php並配置nginx
 
sudo apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
在fastcgi進程選擇上,可以使用spawn-fcgi,不過新版php已經內置php5-f更推薦使用處理方式更佳的php5-fpm.原來需要使用php-fpm,必須使用打補丁的php版本,不過現在的版本已經不需要,但是ubuntu只有10.10以後的版本的官方源纔有這個軟件包,因此,需要修改官方源:
 
sudo vi /etc/apt/sources.list
在末尾增加:
 
deb http://ppa.launchpad.net/jdub/devel/ubuntu maverick main
deb http://ppa.launchpad.net/brianmercer/php/ubuntu lucid main
deb-src http://ppa.launchpad.net/brianmercer/php/ubuntu lucid main
然後更新源的軟件包數據:
 
sudo apt-get upgrade
然後安裝:
 
sudo apt-get install php5-fpm
修改php5-fpm的配置文件:
 
sudo vi /etc/php5/fpm/php.ini
將_;cgi.fix_pathinfo=1_的註釋取消掉:
 
cgi.fix_pathinfo = 1
這樣php-cgi方能正常使用SCRIPT_FILENAME這個變量。
 
以及根據自己服務器的實際情況,修改這兩個參數:
 
pm.max_children = 1280 ;pm.max_requests = 1000
 
配置nginx.conf
 
特別注意替換多處root與index.php的增加。
 
location / {
    root   html;
    index  index.php index.html index.htm;
}
如果是使用passenger默認路徑安裝的nginx,則默認路徑指向html,有的教程所說的/var/www/nginx-default路徑不存在,請注意區分。
 
並修改一些默認的參數,使得php生效。
 
server {
        listen   80;
       server_name  xxx.xxxxx.xxx;
        
       #access_log  /var/www/log/xxx-access.log;
       #error_log   /var/www/logs/xxx-error.log;
 
       location / {
            root /users/shuqi888/projects/demo/public; 
          passenger_enabled on;
          rails_env development;
       }
 
       #error_page  404  /404.html;
 
       # redirect server error pages to the static page /50x.html
       #
       #error_page   500 502 503 504  /50x.html;
       #location = /50x.html {
       #       root   /var/www/nginx-default;
       #}
 
       location ~ \.php$ {
root /var/www/;
               fastcgi_pass   127.0.0.1:9000;
               fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
include        fastcgi_params;
       }
 
       location ~ /\.ht {
               deny  all;
       }
}
測試php文件,創建一個test.php,裏面內容爲:
 
<?php 
phpinfo();
 ?>
上傳到nginx默認安裝路徑指向的htm路徑,正常應能出來php等環境信息。
 
10 安裝Zend Optimizer與phpmyadmin
 
由於產品服務器主要運行rails程序,而最新的php5.3.2與zend Optimizer 不兼容,因此,我們可以考慮降級php版本,或者暫時不安裝,改用其他php加速器。可以參考:
 
http://www.cnblogs.com/xiaoxing208/archive/2009/12/04/1617258.html
 
登陸,找到最新版的下載地址,然後上傳並安裝。
 
http://www.phpmyadmin.net/
 
11 其他問題
 
ldconfig deferred processing now taking place提示
這句話表示剛剛安裝的軟件需要在重新啓動後纔會生效,通常出現這個提示的時候,會有一個提示,詢問你是否現在重新啓動電腦。
 
RSA host key錯誤
在本地mac,連接遠程ubuntu server時,出現該錯誤。刪除之前的RSA host key
 
mate /Users/ouyang/.ssh/known_hosts
Unable to start the Phusion Passenger watchdog
老版本的passenger作怪,使用:
 
gem install passenger
No input file specified.
請使用實際路徑。例如:
 
fastcgi_param SCRIPT_NAME /var/www/nginx-default/$fastcgi_script_name;
更多可以參考:
 
http://qlj.sh.cn/linux/20090815/nginx-php-no-input-file-specified/
 
http://wesoho.blog.51cto.com/715082/200689
 
bundle install的時候,安裝mysql報錯:necessary libraries and/or headers. Check the mkmf.log file for moredetails.
 
解決方法:
 
sudo apt-get install libmysqlclient15-dev
 
   

//20111011增加
    在此服務器上運行rails new appname生成新的rails3應用之後,通過瀏覽器訪問rails程序,出現2個錯誤,解決如下:
1、報錯Could not find a JavaScript runtime
解決辦法就是安裝一個js環境
sudo apt-get install python-software-properties
  sudo add-apt-repository ppa:jerome-etienne/neoip
  sudo apt-get update
  sudo apt-get install nodejs

2、上述問題解決後,rails程序依然無法正常顯示,用自帶的webrick啓動卻可以正常訪問,判斷應該是passenger的問題
解決辦法:進入rails程序目錄  cd appname
輸入:passenger start -a 127.0.0.1 -p 3001 -d
重新啓動nginx,再次從瀏覽器訪問rails應用地址,一切正常。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章