ruby1.9.2+rails3+nginx+passenger+postgresql

服務器部署之 ruby1.9.2+rails3+nginx+passenger+postgresql

*2 次投票

jerry 分享於 3 個月 前, 5 條回覆, 569 次瀏覽

Share |

服務器系統: ubuntu server 10.04 64bit 案例服務器: Linode VPS 512系列.

服務器系統: ubuntu server 10.04 64bit
案例服務器: Linode VPS 512系列.

租下vps,安裝好所要的系統, 爲了方便起見,我將ruby 編譯到了 sudo組下的一個用戶中,所有首先要創建一個用戶,以jerry爲例:

$  useradd jerry  # 添加用戶  
$  passwd jerry  # 設置密碼  
$  gpasswd -a jerry sudo  #將用戶jerry添加進sudo組(sudo組是默認就存在的,所以不用創建)  
$  cd /home && mkdir jerry   #爲jerry創建目錄  
$  chown jerry /home/jerry  #設置權限  

添加你的證書到jerry用戶目錄下,這樣以後就ssh登錄就無需輸入密碼了(老是輸入密碼,這點很煩人).

$  cd ~  
$  mkdir .ssh  && cd .ssh  
$  vim authorized_keys   # 貼入你的公鑰證書

萬事具備,現在可以用rvm來編譯ruby 1.9.2了
首先安裝curl 和 git-core

$  sudo apt-get install curl  git-core

然後安裝rvm

$  bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )  

在~/.bashrc 和 ~/.profile 中加入以下配置:

if [[ -s "$HOME/.rvm/scripts/rvm" ]]  ; then source "$HOME/.rvm/scripts/rvm" ; fi  

退出終端再登錄就可以使用rvm了

$  rvm notes  

安裝必要的packages

$  sudo apt-get install bison build-essential zlib1g zlib1g-dev libssl-dev libreadline5-dev libxml2-dev subversion autoconf  

安裝完以上必須的packages後,正式用rvm編譯ruby 1.9.2,rvm會將ruby自動編譯到當前用戶目錄的~/.rvm下(非root用戶).

$  rvm install 1.9.2  

安裝完ruby 1.9.2後, 我們可以把rvm ruby 1.9.2設置爲默認

$  rvm --default ruby-1.9.2-p0  

接下來就可以查看ruby 版本了

$  ruby -v  
    ruby 1.9.2p0 (2010-08-18 revision 29034) [x86_64-linux]

接下來安裝rails3(可以不用安裝,看實際情況,如果你的項目中已經freeze了rails3)

$  gem install rails  

至此 Ruby 1.9.2編譯已經完成

安裝 Postgresql 數據庫

首先需要確認當前root env的LANG是否爲en_US.UTF8,

$  env  

看顯示信息是否有 LANG=en_US.UTF8,如果沒有,在 /etc/profile中加入以下代碼:
LANG=en_US.UTF8

之後退出終端再進入,你的設置就生效了,然後安裝postgresql數據庫.

$  sudo apt-get install postgresql  

修改 postgres 用戶密碼

$  su postgres -c psql postgres
$  ALTER USER postgres WITH PASSWORD 'postgres';
$  \q  

其中 ‘postgres’ 爲要修改的密碼

編輯 /etc/postgresql/8.4/main/pg_hba.conf 最後修改爲

# Database administrative login by UNIX sockets
# local   all         postgres                          ident

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               md5 #ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5  

如果不希望允許 postgres 使用密碼登入的可以開啓第2行 # local all postgres ident 的註釋

編輯 /etc/postgresql/8.4/main/postgresql.conf, 搜索 # listen_addresses = 將其修改爲

listen_addresses = 'localhost'                  # what IP address(es) to listen on;  

如果允許其他機器訪問的請將 localhost 修改成 *

重啓數據庫

$  /etc/init.d/postgresql-8.4 restart  

安裝 postgresql 的 Ruby 驅動

$  sudo apt-get install libpq-dev
$  gem install -V pg  

如果數據庫不再本地僅安裝此步即可

安裝 Phusion Passenger

用 gem 安裝 passenger,將會安裝到 /home/jerry/.rvm/gems/ruby-1.9.2-p0/gems/passenger-2.2.15,

$  gem install -V passenger   

安裝 nginx 服務器

下載最新 stable 版 nginx

$  mkdir -p /home/jerry/opt/src && cd /home/jerry/opt/src
$  wget http://nginx.org/download/nginx-0.7.67.tar.gz
$  tar xvf nginx-0.7.67.tar.gz

安裝編譯相關類庫

$  sudo apt-get install libpcre3-dev  

編譯安裝 帶有 passenger 模塊的 nginx

使用 passenger 腳本 passenger-install-nginx-module 編譯 nginx

選擇 2. No: I want to customize my Nginx installation. (for advanced users)

輸入 src: /home/jerry/opt/src/nginx-0.7.67 和 prefix: /home/jerry/opt/nginx

添加 編譯參數 並編譯

$  --conf-path=/home/jerry/opt/etc/nginx/nginx.conf --with-http_gzip_static_module  

如果還要啓動其他編譯參數請自行添加

另外: 如果不想使用 passenger 自帶腳本編譯 nginx, 也可以手工編譯 nginx 時加入 –add-module=’/home/jerry//opt/passenger/ext/nginx 參數, 來啓用 passenger 模塊.

配置 nginx

添加服務器用戶(如果直接用jerry來做發佈用戶可以省略下一步,我就是直接用jerry作爲發佈用戶的)

$  useradd -d /var/www/ -s /bin/bash www-data
$  usermod --shell=/bin/bash  www-data
$  mkdir -p /var/www/vhosts/default/htdocs
$  chown -R www-data:www-data /var/www

整理編譯自動生成的配置文件

$  cd /home/jerry/opt/etc/nginx
$  mkdir /home/jerry/opt/etc/nginx/default
$  mv *.default default/
$  mkdir conf.d
$  mkdir sites-enabled

將 /home/jerry/opt/etc/nginx/nginx.conf 替換爲

user  jerry jerry;
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    
    sendfile        on;
    #tcp_nopush     on;
    
    keepalive_timeout  65;
    gzip  on;
    
    include conf.d/*.conf;
    include sites-enabled/*;
}  

添加 gzip_static 模塊配置, 編輯 /opt/etc/nginx/conf.d/gzip_static.conf

gzip_static on;
gzip_types text/css application/x-javascript;

添加 Passneger 模塊配置, 編輯 /home/jerry/opt/etc/nginx/conf.d/passenger.conf

passenger_root /home/jerry/.rvm/gems/ruby-1.9.2-p0/gems/passenger-2.2.15;
passenger_ruby /home/jerry/.rvm/bin/ruby-1.9.2-p0;

添加 /home/jerry/opt/etc/nginx/sites-enabled/defaul, 這個default 最好是從別的文件link過來, $ ln -s /home/jerry/apps/conf/nginx.conf /home/jerry/opt/etc/nginx/sites-enabled/default

編輯 /home/jerry/apps/conf/nginx.conf:

server{
  listen 80;
  server_name  demo.com www.demo.com;
  root /home/jerry/apps/demo/current/public;  #just for example
  passenger_enabled on;

  location ~ ^/(images|javascripts|stylesheets)/  {
      root /home/jerry/apps/demo/current/public;
      expires 30d;
  }
}

如果需要配置 詳細的配置信息, 請參考 Nginx 文檔

添加啓動腳本 /home/jerry/opt/etc/init.d/nginx 內容爲

#! /bin/sh

### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO

# PATH=/home/jerry/.rvm/gems/ruby-1.9.2-p0/bin:/bin:/home/jerry/.rvm/rubies/ruby-1.9.2-p0/bin:/home/jerry/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
DAEMON=/home/jerry/opt/nginx/sbin/nginx
NAME=nginx
DESC=nginx
PIDFILE=/home/jerry/opt/nginx/logs/$NAME.pid

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /home/jerry/opt/etc/default/nginx ] ; then
    . /home/jerry/opt/etc/default/nginx
fi

set -e

. /lib/lsb/init-functions

test_nginx_config() {
    if $DAEMON -t; then
        return 0
    else
        return $?
    fi
}

case "$1" in
    start)
        echo -n "Starting $DESC: "
        test_nginx_config
        start-stop-daemon --start --quiet --pidfile $PIDFILE \
            --exec $DAEMON -- $DAEMON_OPTS || true
        echo "$NAME."
    ;;
    stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --pidfile $PIDFILE \
            --exec $DAEMON || true
        echo "$NAME."
    ;;
    restart|force-reload)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --pidfile \
            $PIDFILE --exec $DAEMON || true
        sleep 1
        test_nginx_config
        start-stop-daemon --start --quiet --pidfile \
            $PIDFILE --exec $DAEMON -- $DAEMON_OPTS || true
        echo "$NAME."
    ;;
    reload)
        echo -n "Reloading $DESC configuration: "
        test_nginx_config
        start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE \
           --exec $DAEMON || true
        echo "$NAME."
    ;;
    configtest)
        echo -n "Testing $DESC configuration: "
        if test_nginx_config; then
            echo "$NAME."
        else
            exit $?
        fi
    ;;
    status)
        status_of_proc -p $PIDFILE "$DAEMON" nginx && exit 0 || exit $?
    ;;
    *)
        echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest}" >&2
        exit 1
    ;;
esac

exit 0

設置隨服務器啓動(切換到root用戶下)

$  chmod +x /home/jerry/opt/etc/init.d/nginx
$  ln -s /home/jerry/opt/etc/init.d/nginx /etc/init.d/nginx
$  update-rc.d nginx defaults  

到這裏nginx的配置已經完成,接下來你就可以將項目發佈到服務器了.

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