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的配置已经完成,接下来你就可以将项目发布到服务器了.
linux查看更多关于ruby1.9.2+rails3+nginx+passenger+postgresql的详细内容...