基於Ubuntu Nginx Mongrel Mysql部署rails

前提: 已安裝好了ubuntu,此處用的是7.10版本
要做得事情:

  • 安裝
    • ruby
    • gem
    • rails (含一些用到的插件)
    • mongrel(含mongrel_cluster)
    • Mysql
    • Nginx

  • 配置
    • 給mysql建庫
    • rails生成生產環境數據庫
    • 配置mongrel_cluster
    • 配置Nginx
  • 手動開關
    • mongrels
    • nginx
  • 自動運行腳本
    • mongrels
    • nginx
    • mysql
  • 監控 monitor

 

 

I.安裝

I.Ruby

首先完成安裝gcc和zlib的安裝

 

下載ruby源代碼包到本地Linux主機,然後解壓縮,進入該目錄,進行配置,編譯和安裝:
tar xzvf ruby-1.8.6.tar.gz
cd ruby-1.8.6

./configure –prefix=/usr/local/ruby
make && make install
如果不定製安裝的目錄,默認將安裝到/usr/local目錄下面。然而建議自行定製一個ruby的安裝目錄,例如/usr/local/ruby,這樣便於以後的升級,不會和操作系統其他軟件混在一起。
 
安裝好以後,修改操作系統PATH路徑,加入/usr/local/ruby/bin:
export PATH=/usr/local/ruby/bin:$PATH
將我們自己安裝的ruby放在系統PATH前面,避免操作系統自帶的ruby造成的干擾。在Linux上,一般將設置放在/etc/profile中,便於對全局生效。

I.gem

下載好源代碼包,解壓縮,安裝:
tar xzvf rubygems-0.9.0.tgz
cd rubygems-0.9.0/
ruby setup.rb

會有gem命令產生在ruby/bin目錄下

I.rails (含一些用到的插件)

gem install rails -v 1.2.6

gem install rails -y --source http://gems.rubyonrails.org




gem query --local 查詢本地已安裝的gem

I.mongrel(含mongrel_cluster)

安裝mongrel
gem install mongrel -y

安裝mongrel_cluster
gem install mongrel_cluster -y  

I.Mysql

sudo apt-get install mysql-server

 

I.Nginx

先安裝prec包 http://sourceforge.net/project/showfiles.php?group_id=10194&package_id=9960&release_id=572108 (tar configure make 'make install')
對於nginx:

./configure  --with-pcre=../pcre-7.6 && make && make install

 

C.配置

C.給mysql建庫

mysql -uroot
create database runlog_prodution character set utf8

以root的身份建一個編碼是utf8的庫,庫的名字按照rails的coc原則來確定。

 

C. 給Rails生產環境數據庫加入內容

注意各環境下的database.yml是否可以配合的起來。

設置環境變量爲  export RAILS_ENV=production , 然後執行rake db:migrate

 

C.配置mongrel_cluster

關鍵在於產生 mongrel_cluster.yml文件,指明各種參數

可先建立config目錄,用於存放 使用mongrel_rails cluster::configure產生的 mongrel_cluster.yml,然後在此基礎上進行修改

mongrel_rails cluster::configure -p 8000 -e production /
-a 127.0.0.1 -N 3 -P /var/www/apps/railsway/shared/pids/mongrel.pid /
-c /var/www/apps/runlog

 

C.配置Nginx

有的地方建議把配置分成  nginx.conf 和 railsway.conf 兩個文件,以區分全局和某個應用。

不過最基本的配置只要像下面這樣即可:

RH.手動開關

RH.mongrels

mongrel_rails cluster::start -C /home/production/config/mongrel_cluster.yml
其中,在mongrel_cluster.yml中給出cwd:表明對應app的目錄。
將start改成close就是關閉

RH.nginx

直接調用/usr/local/nginx/sbin/nginx 即可運行。如給出 -C file 則可進一步指定運行的nginx.conf文件的位置。

ngix採用主從控制的模式,由一個master進程(會將pid號寫入logs/ngnix.pid中)來帶另外多個worker 進程(數量可設置)。僅僅殺掉master進程,另外兩個worker進程會繼續有效。
而通過傳15這個信號 kill - 15 pid,可以終結全部nginx進程。

 

RA.自動運行腳本

自動運行的內容包括mongrels nginx和mysql。實質上就是把這些服務的啓動腳本放入/etc/init.d/下,然後在rc?.d下面建立指向init.d/下實際腳本文件的link。

這裏實際是高度封裝的,不管是什麼腳本,處理方式是一樣的。不過需要注意,mongrel的啓動序列必須晚於mysql。此外,就是執行mongrel的啓動腳本時,PATH中必須包含/usr/local/ruby/bin.

 

稍微提一下ubuntu的啓動服務機制。

在/etc下面,存在init.d目錄以及rc[0-6|S].d目錄。init.d存放實際的腳本文件, rc[0-6|S].d存放要被執行的文件,都是指向init.d的連接文件,普遍以S或者K開頭。S開頭的文件就是啓動時會執行的文件。 rcS.d中是上電時必會被執行的,而rc[0-6].d則會視系統的run_level來決定執行哪個目錄下的問題就。

含義大致如下:

0 爲停機,機器關閉。
1 爲單用戶模式,就像Win9x 下的安全模式類似。
2 爲多用戶模式,但是沒有NFS 支持。
3 爲完整的多用戶模式,是標準的運行級。
4 一般不用,在一些特殊情況下可以用它來做一些事情。
例如在筆記本電腦的電池用盡時,可以切換到這個模式來做一些設置。
5 就是 X11 ,進到 X Window 系統了。
6 爲重啓,運行 init 6 機器就會重啓。

 

通過 who -r 可顯示運行level。ubuntu的桌面模式下,run level是2。所以可以把腳本放在rc2.d下面。

ubuntu對傳統的init做了革新,採用了upstart的模式,不過還是兼容過去的rc?.d的服務自動啓動模式。即把服務放在rc?.d下面,進入對應的run_level時就會重啓.
在ubuntu下面,mysql的啓動,也是通過把腳本放在rc2.d下面來完成的。實際上mysql安裝時在多個rc?.d下面都建立了連接。
upstart模式兼容rc?.d,是通過在/etc/event.d/下面的rcS和rc-default來辦到的,前者會啓動rcS.d(上電時必須啓動的腳本),後者會觸發rc2.d。

 

番外: monit

http://www.igvita.com/2006/11/07/monit-makes-mongrel-play-nice/

 

ubuntu 的更新源(/etc/apt/sources.list)

apt-get -y install build-essential libssl-dev libreadline5-dev zlib1g-dev


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