本文介绍在 Ubuntu14.04 上,用 PostgreSQL+PUMA+NGINX 部署 rails 应用,本文纯属学习用,所以没有用 mina 等自动部署工具,适合和我一样的新手参考阅读; 主要内容包括安装 rbenv,安装 ruby,安装 rails,安装 nodejs,安装 PostgreSQL,创建 rails 应用,安装 rbenv-vars 插件,运行创建的应用,安装配置 PUMA,安装配置 NGINX。
apt-get 安装的不是最新版本; 源码编译安装各种问题,包括编译问题,安装依赖 rubygems.org,被墙等等问题; rbenv 安装 ruby 很顺畅,rbenv 可以安装和管理多个 ruby 版本,据说 rbenv 比 rvm 简单。
参考http://www.zhihu.com/question/20010554 http://www.infoq.com/cn/news/2013/12/mysql-vs-postgresql
更新 apt-get
sudo apt-get update
安装 rben 和 ruby 的依赖
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev
安装 rbenv 和 ruby 编译插件 参考:https://github.com/sstephenson/rbenv
cd ~
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL
到官网查看最新的稳定版本号 https://www.ruby-lang.org/en/downloads/ 当前最新的稳定版本为 2.2.2,我们选择 2.2.2。
rbenv install -v 2.2.1
rbenv global 2.2.1
ruby -v
ruby 安装完成,顺便把 bundler 也装好
gem install bundler
gem install rails -v 4.2.0
rbenv rehash
rails -v
sudo apt-get install nodejs
sudo apt-get install postgresql postgresql-contrib libpq-dev
创建rails应用
rails new pumarails -d postgresql --skip-bundle
cd pumarails
vi Gemfile
修改rubygems.org为ruby.taobao.org,为什么,新手,你也懂的
bundle install
创建postgresql超级用户(deploy是Ubuntu14.04的一个用户)
sudo -u postgres createuser -s deploy
进入设置deploy的密码
sudo -u postgres psql
\password deploy
退出
\q
配置数据库
vi config/database.yml
username: deploy
password: <%= ENV['PUMARAILS_DATABASE_PASSWORD'] %>
安装rbenv-vars插件
cd ~/.rbenv/plugins
git clone https://github.com/sstephenson/rbenv-vars.git
设置数据库密码环境变量
cd ~/pumarails
rake secret
vi ~/.rbenv-vars
SECRET_KEY_BASE=copy_of_your_rake_secret_generated
PUMARAILS_DATABASE_PASSWORD=password_of_deploy_that_is_set_by_last_step(step 7)
查看设置的环境变量
rbenv vars
运行应用
RAILS_ENV=production rake db:create
rails generate scaffold Task title:string note:text
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rails s -b 0.0.0.0
浏览器中打开
http://server_public_IP:3000/tasks
Ctrl+c 退出应用
vi Gemfile
增加一行
gem 'puma'
保存退出
bundle install
grep -c processor /proc/cpuinfo
vi config/puma.rb
# Change to match your CPU core count
workers 2
修改workers后面的2为你的CPU核的个数
mkdir -p shared/pids shared/sockets shared/log
cd ~
wget https://raw.githubusercontent.com/puma/puma/master/tools/jungle/upstart/puma-manager.conf
wget https://raw.githubusercontent.com/puma/puma/master/tools/jungle/upstart/puma.conf
vi puma.conf
修改uid和gid为deploy
setuid deploy
setgid deploy
sudo cp puma.conf puma-manager.conf /etc/init
sudo vi /etc/puma.conf
加入下行,保存退出
/home/deploy/pumarails
sudo start puma-manager
sudo start puma app=/home/deploy/pumarails
官方安装参考链接:http://wiki.nginx.org/Install
sudo -s
nginx=stable # use nginx=development for latest development version
add-apt-repository ppa:nginx/$nginx
apt-get update
apt-get install nginx
sudo vi ~./nginx_puma_conf
copy 以下内容,保存退出
upstream app {
# Path to Puma SOCK file, as defined previously
server unix:/home/deploy/appname/shared/sockets/puma.sock fail_timeout=0;
}
server {
listen 80;
server_name localhost;
root /home/deploy/appname/public;
try_files $uri/index.html $uri @app;
location @app {
proxy_pass http://app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
sudo cp ~./nginx_puma_conf /etc/nginx/sites-available/default
sudo service nginx restart
浏览器访问http://server_public_IP/tasks
恭喜同是新手的你,你已经部署好了一个 rails 应用。
本文内容中的亮点 rbenv 安装 ruby,简单控制 ruby 版本 rbenv-vars,保证密码不被上传到代码库 puma,最新的 rails 并发工具 (大家自行去比较 Passenger or Unicorn)