Skip to content
yafei Lee edited this page Apr 12, 2015 · 4 revisions

WBlog Ruby on Rails 项目布署指南

环境准备

  1. VPS Linux 服务器, 创建一个专门的用户( 如: ruby )用于发布( 推荐 Ubuntu >= 12.04 稳定版本 ), 并且安装了 git, 并可以获取远程仓库的代码( 例如 github 上创建一个 deploy key )
  2. Ruby( >= 2.0.0 ) 环境( 推荐 rvm, rbenv 也可以, 需要你简单定制 )
  3. Mongodb 数据库
  4. nginx

请自行查找资料安装以上依赖及环境准备.

自动化发布系统

WBlog 采用了 mina 来自动化发布, 这样, 只要有代码更新, 就可以一行命令发布你的新代码.

另外, WBlog 缺省使用 unicorn 作为应用发布容器, nginx 作为应用代理. 这样, 能够高效地运行你的 Rails 项目.

现在, 我将详细说明如何第一次布署 WBlog, 因为各 VPS 环境不同, 可能遇到不同的问题, 请自行 google 解决.

主要分为几个部分:

  1. 初始化生产环境
  2. 修改配置
  3. 发布应用
  4. nginx 配置与 邮件提醒

初始化生产环境

首先, 你需要配置个人电脑到 VPS 的 ssh 免密码登录, 请自行 google 设置.

第一步, 测试使用 ssh ruby@yourserver 来测试是否可以直接登录, 登录后, 使用 rvm use 2.0.0 来测试 rvm 是否正确安装.

然后, 修改本地的 WBlog 项目中的 config/deploy.rb, 将 domain, repository 调整为自己对应的发布地址与仓库地址.

第二步, 使用 mina setup 来生成发布环境的发布目录.

如果一切顺利, 可以进行配置修改了.

修改配置

你已经看到 mina setup 提醒你修改 mongoid.yml, application.yml 文件了.

登录到 VPS 上, 并进入你的发布目录的配置文件: /home/ruby/wblog/shared/config/, 请参考 WBlog 对应的参考配置文件如 config/xx.yml.example 进行配置修改.

一切准备好, 是时候发布你的应用了.

发布应用

在本地输入 mina deploy, 如果一切正常, mina 就已经帮你安装 WBlog 的 Gem 依赖, 并按 Rails 的标准发布流程发布成功了.

如果有任何报错, 请检查以上的依赖, 自行 google 解决.

nginx 配置与邮件提醒

发布应用之后, 我们并不能直接访问到它, 而是通过 nginx 帮助我们更高效托管静态文件, 更安全处理转发请求. nginx 标准的 Rails 配置文件( 如 /etc/nginx/conf.d/wblog.conf )如下:

user  ruby;
worker_processes  1;

upstream wblog {
  server unix:/tmp/unicorn_wblog.sock fail_timeout=0;
}

server {
  listen 80;
  server_name *.yafeilee.me;

  return 301 $scheme://yafeilee.me$request_uri;
}

server {
  listen 80;
  server_name yafeilee.me;
  root /home/ruby/wblog/current/public;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  location ~ ^/(uploads)/  {
    expires max;
    break;
  }

  try_files $uri/index.html $uri @wblog;
  location @wblog {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://wblog;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 20M;
  keepalive_timeout 10;
}

使用 nginx -s reload 来重新加载配置.

之后就可以使用 http://yafeilee.me 来访问你的应用了. 如果你还没有域名, 则可以将 server_name 调整为 IP, 使用 IP 访问.

另外一个问题就是邮件提醒, 如果你需要邮件提醒( 比如提供用户邮件订阅与回复评论的提醒 ), 则需要自行配置启动 sidekiq, 这个就留给你自行处理了.

总结

Ruby on Rails 应用的第一次发布难免遇到各种问题, 这里的发布文档并不是事无巨细的讲解, 在遇到问题的时候, 多去 google 之, 去理解应用发布的流程.

虽然远没有 php 项目发布那样简单, 但 mina 的发布流程是目前的最佳实践, 拥有着最佳的用户访问体验, 发布机制, 回滚机制, assets 打包机制, 都值得你去研究与学习.

如果有任何问题, 欢迎开 issue 讨论.

相关讨论: https://github.com/windy/wblog/issues/36