Docker で Ruby on Rails の環境を作成する方法について紹介します。サーバーは、unicorn + nginx を採用します。
なお既に Docker はインストール済として説明していくので、インストールが済んでない方はまず Docker のインストールを行ってください。
Dockerのコンテナ立ち上げ
イメージの取得
今回は、Ruby on Rails 4.2.6の公式イメージを取得します。
Dockerfile を使う方法もありますが、今回は docker pull でイメージを取得してからコンテナを作成する方法をとります。
1 |
$ docker pull rails:4.2.6 |
docker images で、取得したイメージを確認します。
1 2 3 |
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE rails 4.2.6 ebe8911521f9 2 weeks ago 837 MB |
コンテナの作成
次に、取得したイメージからコンテナを作成します。-p オプションでポート80をコンテナ側のポート80にポートフォワーディングして、名前は myproject としています。
1 |
$ docker run -p 80:80 --name myproject -i -t rails:4.2.6 /bin/bash |
これでコンテナが作成されたので、以下よりコンテナ内での作業となります。
ちなみこのイメージの OS は、Debian 8.4 が使われています。
1 2 |
$ cat /etc/debian_version 8.4 |
Ruby on Railsの環境作成
必要なものをインストール
apt-get をアップデートしてから vim と nginx をインストールします。
1 2 |
$ apt-get update $ apt-get -y install vim nginx |
nginx を起動しておきます。
1 |
$ service nginx start |
GemとBundlerのインストール時に、--no-rdoc --no-ri オプションを指定しなくて良いように .gemrc ファイルを作成し、以下のように追加し保存します。これは、オプションなのでスキップしても大丈夫です。
1 2 |
$ vi ~/.gemrc gem: --no-rdoc --no-ri |
Ruby on Railsのプロジェクト作成
任意のディレクトリに移動し、rails new でプロジェクトを作成します。今回は、myproject という名前にします。
1 2 |
$ cd /var/www/ $ rails new myproject |
myproject に移動します。
1 |
$ cd myproject |
unicorn + nginx の環境設定
unicornの設定
Gemfile の unicorn の部分のコメントアウト#を外します。
1 2 |
$ vi Gemfile gem 'unicorn' |
unicorn をインストールします。
1 |
$ bundle install |
次に、unicorn の設定ファイル unicorn.rb を作成します。
1 |
$ vi config/unicorn.rb |
uniconrn.rb の内容は以下のようになります。ディレクトリは必要に応じて変更してください。
/var/www/myproject/config/unicorn.rb
1 2 3 4 5 6 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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 を再起動します。
1 2 |
$ nginx -t $ service nginx restart |
/var/www/myproject で、unicorn を起動するコマンドを実行します。
1 |
$ bundle exec unicorn -c config/unicorn.rb -D |
ブラウザで、http://localhost にアクセスすると、以下のような画面が表示されます。
これでセットアップが完了しました。