Capistranoではまらない!Railsをデプロイするまでの完全手順
Railsで作成したWEBアプリケーションのデプロイでよく利用されるCapistranoですが、そのインストールや設定手順について悩まれている方は多いのではないでしょうか。
このページでは、Capistranoのインストールや設定手順について説明していきます。
私がCapistranoでRailsのWEBアプリケーションのリリースができるまでの手順を文章化していますので、参考になると思います。ぜひお役立てください。
Capistrano3のインストール
Capistranoの公式ドキュメントに沿ってインストールを行います。
Gemfileの編集
Gemfileを編集して必要なライブラリを追加します。
1 2 3 4 5 6 7 |
group :development do gem 'capistrano', '~> 3.4' #デプロイ用 gem 'capistrano-rbenv' #デプロイ先のrbenv環境をベースとするため gem 'capistrano-bundler' #デプロイ先でbundle installを実施するため gem 'capistrano-passenger' #passenger用 gem 'capistrano-rails' #アセットパイプラインのプリコンパイル用 end |
変種が終わりましたらgemのインストールをしましょう。コマンドは次のとおりです。
1 |
bundle install |
設定ファイル等の編集
設定ファイル等の編集をしていきます。
まずCapfileではデプロイに利用するgemを指定します。指定の方法は「#」のコメントを外せばOKです。
1 2 3 4 5 6 7 |
# require 'capistrano/rvm' # require 'capistrano/rbenv' # require 'capistrano/chruby' require 'capistrano/bundler' require 'capistrano/rails/assets' require 'capistrano/rails/migrations' # require 'capistrano/passenger' |
通常のRailsアプリケーションはbundler、assets、migrationsは必須でしょう。
また、アプリケーション・サーバーの種類によってはpassenger、Rubyのバージョン管理ツールに合わせてrvmやrbenvを選びましょう。
次にdeploy.rbの設定を行います。
今回はソースのリビジョン管理をgitとしています。gitリポジトリをサーバーにチェックアウトしてデプロイする方式で設定を進めていきます。deploy.rbの設定前後のdiffは下記のとおりです。
gitリポジトリの指定、database.ymlやsecrets.yamlのシンボリックリンクの指定、logフォルダ等のシンボリックリンクの指定、rbenvを利用しているのでその指定をしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
-set :repo_url, 'git@example.com:me/my_repo.git' +set :repo_url, 'git@bitbucket.org:xxx/web_walker.git' -# set :deploy_to, '/var/www/my_app_name' +set :deploy_to, '/var/www/projects/web_walker' -# set :linked_files, fetch(:linked_files, []).push('config/database.yml', 'config/secrets.yml') +set :linked_files, fetch(:linked_files, []).push('config/database.yml', 'config/secrets.yml') -# set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system') +set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system') +# capistrano/rbenv +set :rbenv_type, :user # or :system, depends on your rbenv setup +set :rbenv_ruby, '2.2.2' |
続いて、デプロイ先のサーバーやその接続方法を指定します。
「server-based syntax」の箇所にサーバー情報を追加していきます。
今回はWEBサーバー、アプリケーション・サーバー、DBサーバーすべて同じサーバーの男前構成でいきます。
1 2 3 4 5 6 7 8 9 10 11 |
+server '[サーバー名 or IP]', user: '[ユーザー名]', roles: %w{app db web}, my_property: :my_value + #sshの接続オプションを任意に指定 +set :ssh_options, { + #keys: %w(/home/[ユーザー名]/.ssh/id_rsa), + #forward_agent: false, + #port: 1234, + #auth_methods: %w(password) + #auth_methods: %w(publickey), # 認証方法 passwordも可能 + #password: 'xxxxx' #password指定 +} |
サーバーサイドの準備
デプロイ先のサーバーの設定を行います。
デプロイ先となるフォルダの作成と権限の付与
1 2 3 |
sudo mkdir /var/www/projects/web_walker -p sudo chown xxx:yyy /var/www/projects/web_walker |
続いて、デプロイに必要なフォルダ等をツールを使って生成します。
クライアント側から下記のコメンドを実行します。
1 |
cap production deploy:check |
必要なフォルダ等が作られるため、データベースの接続情報とシークレットキーをサーバーの環境のものにセットします。
具体的には下記フォルダをproduction用に編集しましょう。
- /var/www/projects/web_walker/shared/config/database.yml
- /var/www/projects/web_walker/shared/config/secrets.yml
Railsアプリケーションのリリース
いよいよデプロイです。下記のコマンドでデプロイされます。とても楽ですね!
1 |
bundle exec cap production deploy |
が、失敗します。
原因は本番サーバーのDBにないことが理由でした。そのため、下記コマンドを実行してDBを作成しましょう。
1 2 |
cd /var/www/projects/web_walker/releases/[タイムスタンプ]/ bundle exec rake db:create RAILS_ENV=production; |
DBの作成が完了したら、もう一度リリースしてみましょう。
1 |
bundle exec cap production deploy |
私の場合はこれで完了!動作検証もOKでした!
みなさんもぜひお試しください!