部署 手动部署 PostgreSQL+PUMA+NGINX RAILS 应用

caiqinghua · May 27, 2015 · Last by babyhai replied at January 08, 2018 · 6067 hits

一、简介

本文介绍在 Ubuntu14.04 上,用 PostgreSQL+PUMA+NGINX 部署 rails 应用,本文纯属学习用,所以没有用 mina 等自动部署工具,适合和我一样的新手参考阅读; 主要内容包括安装 rbenv,安装 ruby,安装 rails,安装 nodejs,安装 PostgreSQL,创建 rails 应用,安装 rbenv-vars 插件,运行创建的应用,安装配置 PUMA,安装配置 NGINX。

为什么选择 rbenv 安装 ruby

apt-get 安装的不是最新版本; 源码编译安装各种问题,包括编译问题,安装依赖 rubygems.org,被墙等等问题; rbenv 安装 ruby 很顺畅,rbenv 可以安装和管理多个 ruby 版本,据说 rbenv 比 rvm 简单。

为什么选择 PostgreSQL

参考http://www.zhihu.com/question/20010554 http://www.infoq.com/cn/news/2013/12/mysql-vs-postgresql

二、安装 rbenv

更新 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

三、安装 ruby

到官网查看最新的稳定版本号 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

四、安装 rails

gem install rails -v 4.2.0
rbenv rehash
rails -v

五、安装 nodejs

sudo apt-get install nodejs

六、安装 PostgreSQL

sudo apt-get install postgresql postgresql-contrib libpq-dev

七、创建 rails 应用并设置数据库用户和密码

创建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 插件

安装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 退出应用

十、安装配置 PUMA

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

十一、安装配置 NGINX

官方安装参考链接: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)

参考教程:https://www.digitalocean.com/community/tutorials/how-to-deploy-a-rails-app-with-puma-and-nginx-on-ubuntu-14-04

cap 不用吗?

这几天也在折腾部署,比 lz 多用了 mina,方便很多

#2 楼 @chaucerling mina 以后再尝试

我只想说,还是原文比较详细 ,感谢提供链接,直接解决了难题。

设置数据库密码环境变量 cd ~/pumarails 这一步中得 pumarails 目录是新建的吗?

You need to Sign in before reply, if you don't have an account, please Sign up first.