Ubuntu 12.04 上使用 Nginx Passenger 部署 Ruby on Rails

Feuda edited this page Dec 27, 2014 · 13 revisions

本教程将会涉及以下工具:

  • Ubuntu 12.04 LTS
  • RVM
  • Ruby 2.1.2
  • Rails 4.0.3
  • Passenger 4.0+
  • Nginx(由 Passenger 编译)

推荐通过 Vagrant 搭建虚拟机环境进行练习。

创建帐号

假设你已经用 root 帐号通过 SSH 登陆服务器。

出于安全考虑,不要使用 root 帐号运行 web 应用。这里新建一个专门用于部署的用户,例如 deploy 或者其它你喜欢的名字。运行以下命令创建用户:

# useradd -m -s /bin/bash deploy

将用户加入 sudo 群组,以便使用 sudo 命令:

# adduser deploy sudo

为 deploy 用户设置密码:

# passwd deploy

退出当前 SSH 链接,用 deploy 帐号重新登陆。

安装 RVM 和 Ruby

更新 apt,并安装 curl:

$ sudo apt-get update
$ sudo apt-get install curl

然后安装 RVM:

$ \curl -sSL https://get.rvm.io | bash

RVM 安装完毕后,重新登陆 SSH,让 RVM 配置生效。然后安装 Ruby 2.1.2:

$ rvm use --install --default 2.1.2
$ rvm use 2.1.2@your_gemset --create --default

Ruby 安装过程会请求 apt-get update 的权限,并自动安装系统依赖。安装完毕后,确认目前的 Ruby 版本:

$ ruby -v

应该看到 ruby 2.1.2 字样。

安装 Passenger

Passenger 是一个 app server,支持基于 Rack 框架的 Ruby app(包括 Rails)。Passenger 的特点是需要作为模块编译到 Nginx 中,优点是配置简单,不需要自己写启动脚本。

安装 Passenger 最简单的方法是通过 apt 安装,首先导入 Passenger 的密钥(官方文档):

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7

安装 apt 插件以支持 https 传输:

sudo apt-get install apt-transport-https ca-certificates

添加 apt 源(对应 Ubuntu 12.04 LTS):

$ sudo bash -c 'echo "deb https://oss-binaries.phusionpassenger.com/apt/passenger precise main" > /etc/apt/sources.list.d/passenger.list'
$ sudo apt-get update

安装 Passenger 的包:

$ sudo apt-get install nginx-extras passenger

现在修改 nginx 配置,编辑 /etc/nginx/nginx.conf,找到这两行注释:

# passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
# passenger_ruby /usr/bin/ruby;

将它修改为:

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /home/deploy/.rvm/wrappers/default/ruby;

这会打开 Passenger 支持,并且指定使用之前用 rvm 安装的 ruby 版本。

上传文件

用你喜欢的方法把项目上传到服务器上,例如 git(推荐)或 rsync,假设你使用 git,并且使用 github 的公开源。

创建站点文件夹:

$ sudo mkdir -p /var/www/example.com
$ sudo chown deploy:deploy /var/www/example.com

clone 项目文件:

$ cd /var/www/example.com
/var/www/example.com $ git clone https://github.com/YOURNAME/REPO.git current

取决于你的应用,这里需要安装数据库等其他系统组件,例如 PostgreSQL:

$ sudo apt-get install postgresql libpq-dev

执行 bundle 和 migrate:

/var/www/example.com $ cd current
/var/www/example.com/current $ bundle install
/var/www/example.com/current $ RAILS_ENV=production rake db:create db:migrate

执行 assets precompile:

/var/www/example.com/current $ rake assets:precompile

修改 Nginx 配置

删除原有的默认网站配置:

$ rm /etc/nginx/sites-enabled/default

新建网站配置:

$ touch /etc/nginx/sites-enabled/example.com.conf

编辑 /etc/nginx/sites-enabled/example.com.conf,写入以下内容:

server {
    listen 80 default;
    server_name example.com; # 这里填写你真实域名
    root /var/www/example.com/current/public;
    passenger_enabled on;
}

重启 nginx:

$ sudo service nginx restart

完成

在浏览器打开服务器的 IP 地址或域名,应该看到你的网站在运行。

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.