AWS の Ubuntu 14.04 に Rails アプリケーションを設置した時に行った操作のまとめです.

AWSで準備

EC2の新しいインスタンス(Ubuntu 14.04)を作成.
Route53でDNSの設定.
windowsで作業するので鍵をputtyに変換.
RLoginでubuntuユーザーでSSH接続.

インストール

sudo apt-get update
sudo apt-get install -y g++ git emacs libffi-dev
sudo apt-get install -y zlib1g-dev
sudo apt-get install -y libsqlite3-dev libmysqlclient-dev libreadline-dev
sudo apt-get install -y postgresql postgresql-contrib libpq-dev
sudo apt-get install -y libssl-dev
sudo apt-get install -y libxml2-dev
sudo apt-get install -y libxslt-dev
sudo apt-get install -y nodejs npm

postgresql設定

postgresユーザーになってアプリケーションの専用アカウントのためのpostgreユーザーを作成します:

sudo su - postgres
createuser -s app_name -P

ユーザー作成

アプリケーションの専用アカウントを作成します:

sudo adduser app_name
(sudo usermod -G sudo app_name) # ubuntuユーザでsudoすればいいから省略

.emacs.d/init.el

ubuntuユーザーと作成したユーザー app_name の両方で emacs の設定:

emacs ~/.emacs.d/init.d
; スタート画面を表示させない
(setq inhibit-startup-message t)

; リージョンをコメントアウト
(define-key global-map "\C-c\C-c" 'comment-or-uncomment-region)

; 行番号表示
;(global-linum-mode t)

; バックスペースで削除
(global-set-key "\C-h" 'delete-backward-char)

; バックアップファイルを作成しない
(setq make-backup-files nil)
(setq auto-save-default nil)

; ファイルの最後に改行
(setq require-final-newline t)

; カーソルの位置を復元
(require 'saveplace)
(setq-default save-place t)

; 対応するカッコを光らせる
(show-paren-mode t)

Nginx

ubuntuユーザーになって Nginx をインストールします:

curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
sudo sh -c "echo 'deb http://nginx.org/packages/ubuntu/ trusty nginx' >> /etc/apt/sources.list"
sudo sh -c "echo 'deb-src http://nginx.org/packages/ubuntu/ trusty nginx' >> /etc/apt/sources.list"
sudo apt-get update
sudo apt-get install nginx

参考: Ubuntuに最新のnginxをインストールする

Ruby

アプリケーション用ユーザー(app_name)になってRailsの環境を準備します:

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec -l $SHELL
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenv install 2.2.0
rbenv global 2.2.0
git clone git://github.com/jf/rbenv-gemset.git ~/.rbenv/plugins/rbenv-gemset
rbenv gemset create 2.2.0 gemset-2.2.0
emacs ~/.gemrc
install: --no-rdoc --no-ri
update: --no-rdoc --no-ri

Railsをインストールします:

gem install rails

WEBアプリケーション設置

ドキュメントルートは /home/app_name/www/public にします.

mkdir ~/run
git clone https://*****@bitbucket.org/*****/app_name.git ~/www
cd ~/www
npm install
bundle install --without test development

runフォルダはUNIXドメインソケットのファイルを置く場所です.

データベース準備

bundle exec rake assets:precompile RAILS_ENV=production
bundle exec rake db:migrate:reset RAILS_ENV=production
bundle exec rake db:seed RAILS_ENV=production

ルーティング

ubuntuユーザーになって nginx の設定ファイルを作成します:

nginx

cd /etc/nginx/conf.d
sudo mv default.conf default.conf.org
sudo mv example_ssl.conf example_ssl.conf.org
sudo emacs app_name.conf
upstream app_name {
  server unix:///home/app_name/run/app_name.sock;
}

server {
  listen 80;
  server_name app_name.example.com;
  root /home/app_name/www/public;

  location / {
    proxy_pass http://app_name; # match the name of upstream directive which is defined above
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  location ~* ^/assets/ {
    # Per RFC2616 - 1 year maximum expiry
    expires 1y;
    add_header Cache-Control public;

    # Some browsers still send conditional-GET requests if there's a
    # Last-Modified header or an ETag header even if they haven't
    # reached the expiry date sent in the Expires header.
    add_header Last-Modified "";
    add_header ETag "";
    break;
  }
}

nginxを再起動:

sudo service nginx restart

puma

アプリケーション用ユーザー(app_name)になってpumaを起動:

bundle exec rake secret
echo 'SECRET_KEY_BASE="***"
exec -l $SHELL
bundle exec puma -e production -b unix:///home/app_name/run/app_name.sock

OKならデーモンとして起動:

bundle exec puma -e production -d -b unix:///home/app_name/run/app_name.sock
ps aux | grep puma

pumaの起動確認

ps aux | grep puma
stock     2570  0.0 10.6 587292 107804 ?       Sl   07:46   0:02 puma 2.11.1 (unix:///home/app_name/run/app_name.sock) [www]                                                                                      
stock     2785  0.0  0.0  10468   928 pts/2    S+   08:35   0:00 grep --color=auto puma

pumaの再起動

kill -s SIGUSR2 2570

2570はpumaの起動確認で表示されるPIDです.

pumaの停止

kill -s SIGTERM 2570

参考:How to Setup Rails App With Puma and NGINX