在 VPS 上部署 Rails 应用

deploy

系统软件

- add-apt-repository

接下来会通过PPA的方式来安装系统常用软件,但PPA所用的add-apt-repository,则是由python-software-properties(在新的Ubuntu中则是software-properties-common)提供的:

1
2
3
$ sudo apt-get -y install python-software-properties
# 如果 Ubuntu 版本 >= 12.10 则安装
$ sudo apt-get -y install software-properties-common
- Nginx
1
2
3
4
5
$ sudo add-apt-repository -y ppa:nginx/stable
$ sudo apt-get update
$ sudo apt-get -y install nginx
# 安装完成之后,即可以用IP访问,会看到 Welcome to nginx! 的页面。
- Node.js
1
2
3
$ sudo add-apt-repository -y ppa:chris-lea/node.js
$ sudo apt-get update
$ sudo apt-get -y install nodejs
- MySQL

在阿里云的云主机乞丐版上,使用PPA来安装5.6的版本是无法正常启动的,但系统自带的5.5就没有这个问题,耗费了太久,最后还是重置了机器,直接使用系统自带的5.5。

1
2
3
4
$ sudo add-apt-repository -y ppa:ondrej/mysql-5.6
$ sudo apt-get update
$ sudo apt-get -y install mysql-server-5.6 mysql-client-5.6
# 期间会被要求输入root用户密码

更多MySQL的使用见:MySQL小手册

- Git

1
2
3
$ sudo add-apt-repository -y ppa:git-core/ppa
$ sudo apt-get update
$ sudo apt-get -y install git-core

- 安装编译依赖库

1
$ sudo apt-get install build-essential autoconf bison openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev libxml2-dev libxslt-dev libc6-dev g++ gcc

部署

- 创建部署用户

作为4次卫星发射的运载火箭,我喜欢战神ares这个名字用来当部署用户。

1
2
3
$ sudo adduser ares --ingroup sudo
# 输入用户密码
$ su ares
- rbenv & Ruby

在系统中我们使用rbenv来进行Ruby的版本管理,更多关于rbenv,见这里

rbenv会被以user的身份来进行安装,这里使用用户ares,下面所有的操作都在该用户下进行。

1
2
3
4
$ curl https://raw.github.com/fesplugas/rbenv-installer/master/bin/rbenv-installer | bash
# 然后,按提示,在.bashrc里配置变量。
$ rbevn install 2.1.1
$ rbenv global 2.1.0

配置 .gemrc见这里

- SSH Key

生成Git所需要的SSH Key,email换成自己的,见github:help

1
$ ssh-keygen -t rsa -C "email@example.com"

打印SSH key

1
$ cat < ~/.ssh/id_rsa.pub
- Bundler

安装’bundler’

1
$ gem install bundler

mysql2 的gem编译需要要安装库libmysqlclient-dev

1
$ sudo apt-get install libmysqlclient-dev

bundle 进行安装依赖gem包

1
src$ bundle

- 配置 Nginx + Unicorn

这部分的配置祥见:使用Nginx和Unicorn部署Rails

FAQ::

- sudo

如果是自已搭配的Ubuntu服务器,root用户默认是被禁用的,系中的操作要用sudo来进行提权,但像Linode, Amazon EC2, Aliyun EC这样的云主机,则都会默认把root启用,这样在运行系统命令的时候就不再需要sudo。

而Vagrant还不一样,在Vagrant的Box里,系统默认提供一个账号vagrant,用其运行系统命令一定要用sudo提权的,但却不用输入密码。

REF::

Rails Deploying
RailsCasts Deploying to a VPS - Video