Docker で Ruby on Rails の環境を作る方法:unicorn + nginx

Docker で Ruby on Rails の環境を作成する方法について紹介します。サーバーは、unicorn + nginx を採用します。

なお既に Docker はインストール済として説明していくので、インストールが済んでない方はまず Docker のインストールを行ってください。

Dockerのコンテナ立ち上げ

イメージの取得

今回は、Ruby on Rails 4.2.6の公式イメージを取得します。

Dockerfile を使う方法もありますが、今回は docker pull でイメージを取得してからコンテナを作成する方法をとります。

$ docker pull rails:4.2.6

docker images で、取得したイメージを確認します。

$ docker images
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  rails               4.2.6               ebe8911521f9        2 weeks ago         837 MB

コンテナの作成

次に、取得したイメージからコンテナを作成します。-p オプションでポート80をコンテナ側のポート80にポートフォワーディングして、名前は myproject としています。

$ docker run -p 80:80 --name myproject -i -t rails:4.2.6 /bin/bash

これでコンテナが作成されたので、以下よりコンテナ内での作業となります。

ちなみこのイメージの OS は、Debian 8.4 が使われています。

$ cat /etc/debian_version
  8.4

Ruby on Railsの環境作成

必要なものをインストール

apt-get をアップデートしてから vim と nginx をインストールします。

$ apt-get update
$ apt-get -y install vim nginx

nginx を起動しておきます。

$ service nginx start

GemとBundlerのインストール時に、--no-rdoc --no-ri オプションを指定しなくて良いように .gemrc ファイルを作成し、以下のように追加し保存します。これは、オプションなのでスキップしても大丈夫です。

$ vi ~/.gemrc
  gem: --no-rdoc --no-ri

Ruby on Railsのプロジェクト作成

任意のディレクトリに移動し、rails new でプロジェクトを作成します。今回は、myproject という名前にします。

$ cd /var/www/
$ rails new myproject

myproject に移動します。

$ cd myproject

unicorn + nginx の環境設定

unicornの設定

Gemfile の unicorn の部分のコメントアウト#を外します。

$ vi Gemfile
  gem 'unicorn'

unicorn をインストールします。

$ bundle install

次に、unicorn の設定ファイル unicorn.rb を作成します。

$ vi config/unicorn.rb

uniconrn.rb の内容は以下のようになります。ディレクトリは必要に応じて変更してください。

/var/www/myproject/config/unicorn.rb

pid '/var/www/myproject/tmp/unicorn.pid'
listen '/var/www/myproject/tmp/unicorn.sock'
stderr_path '/var/www/myproject/log/unicorn.log'
stdout_path '/var/www/myproject/log/unicorn.log'
worker_processes 2
timeout 30

nginxの設定

nginx の設定ファイルを作成します。今回は unicorn.conf という名前で作成します。

server や root などで指定しているディレクトリは、 unicorn.rb と合わせてください。

/etc/nginx/conf.d/unicorn.conf

upstream unicorn {
  server unix:/var/www/myproject/tmp/unicorn.sock fail_timeout=0;
}

server {
  listen 80;
  server_name localhost;

  root /var/www/myproject/public;

  try_files $uri @unicorn;

  location @unicorn {
    proxy_set_header Host $http_host;
    proxy_pass http://unicorn;
  }
}

nginx -t で設定ファイルのシンタックスチェックを行ってから、nginx を再起動します。

$ nginx -t
$ service nginx restart

/var/www/myproject で、unicorn を起動するコマンドを実行します。

$ bundle exec unicorn -c config/unicorn.rb -D

ブラウザで、http://localhost にアクセスすると、以下のような画面が表示されます。

docker-rails

これでセットアップが完了しました。