zoukankan      html  css  js  c++  java
  • 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的配置已经完成,接下来你就可以将项目发布到服务器了.

  • 相关阅读:
    合数分解为质数的乘积模板
    P2626 斐波那契数列(升级版)(合数的质数分解, 大数为素数的概率十分小的利用)
    1305 Pairwise Sum and Divide
    1344 走格子 (前缀和)
    1347 旋转字符串
    E
    pek (北大oj)3070
    数学中各种矩阵收集(转至其他博主)
    (数论)逆元的线性算法
    洛谷P2627 修剪草坪 题解 单调队列优化DP
  • 原文地址:https://www.cnblogs.com/lexus/p/1896737.html
Copyright © 2011-2022 走看看