- 更新日: 2014年6月19日
- Rails
Capistrano3とBitbucketを使ってRailsアプリをデプロイ
Capistrano3 を使って、Bitbucket に作成したリポジトリに置いた Rail アプリケーションを、staging 環境の CentOS サーバーにデプロイさせるところまで試しました。忘れないように作業記録です。
— 環境 —
Rails 4.1.1
Capistrano 3.2.1
SSH接続の設定
作業は手元の Mac にて。
1. Mac ローカルから Bitbucket リポジトリに push
2. staging 環境のサーバーが Bitbucket から master ブランチをチェックアウトしてデプロイ
という流れになります。SSH接続のために、2種類の鍵ペア(秘密鍵・公開鍵)が必要となる。
① Mac ローカルから staging サーバーへの SSH 接続用
② staging サーバーから Bitbucket への SSH 接続用
いずれもパスフレーズを空にして作成。最初パスフレーズを設定してたら、SSH接続で permission denied など問題が発生する場合がありましたので。①については、以下参照。
SSH で公開鍵認証による接続の設定、Mac で ssh-keygen し公開鍵をサーバーに保存 〜 CentOS6 | EasyRamble
②はssh で staging サーバーにログイン後、ssh-keygen で鍵作成。
1 2 3 4 |
[mac ~]$ ssh centos.staging [centos.staging ~]$ ssh-keygen -t rsa -C test@example.com |
パスフレーズ設定を聞かれますが、空のままEnter。作成された公開鍵のほうを、Bitbucket に登録します。これで、ローカル → staging サーバー、staging サーバー → Bitbucket の両者のSSH接続が可能となる。
Bitbucketアカウント作成〜ローカルのGit既存プロジェクトをインポート(push) | EasyRamble
また、SSH 接続の設定を、あらかじめ ~/.ssh/config に作成しておく必要があります。詳しくは以下。
SSH 接続クライアントの設定、 Macの ~/.ssh/config に SSH 接続の設定を書いておく 〜 CentOS6 | EasyRamble
capistrano の gem をインストール
Gemfile
1 2 3 4 5 6 |
group :development do gem "capistrano" gem 'capistrano-rails' gem "capistrano-rbenv" gem 'capistrano-bundler' end |
cap install で capistrano の設定ファイル等がインストールされます。
1 2 3 4 5 6 7 8 9 10 |
$ bundle install $ bundle exec cap install mkdir -p config/deploy create config/deploy.rb create config/deploy/staging.rb create config/deploy/production.rb mkdir -p lib/capistrano/tasks Capified |
config/deploy.rb の編集
deploy.rb にデプロイの設定を書いていきます。
config/deploy.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# config valid only for Capistrano 3.1 lock '3.2.1' set :application, 'app_name' set :repo_url, 'ssh://git@bitbucket.org/user_name/repo_name.git' set :deploy_to, '/path/to/deploy' set :scm, :git set :keep_releases, 5 namespace :deploy do #... end |
application → アプリケーション名
repo_url → リポジトリURL
deploy_to → デプロイ先サーバーのパス
scm → 利用するバージョン管理システム
deploy_to(/path/to/deploy)で指定したパスは、ログインユーザーが書き込めるパーミッションである必要があります。
staging 環境用のファイル作成
config/deploy/staging.rb
1 2 3 |
role :app, %w{user@centos.staging} role :web, %w{user@centos.staging} role :db, %w{user@centos.staging} |
app → アプリケーションサーバー
web → ウェブサーバー
db → DBサーバー
それぞれ以上を指定、今回はすべて同じ1台のサーバーで賄う。
以上で、最低限のデプロイ実行の準備は整いました。
デプロイコマンド実行
staging へのデプロイを行うコマンド実行。
1 2 3 |
$ bundle exec cap staging deploy |
これで一応最低限ではありますが、デプロイ完了です。
Rails アプリケーションを staging や production の環境で動作させるには、その他に以下も整える必要があります。
・Bundler による gem のインストール
・DBマイグレーション
・ウェブサーバー再起動
これはまた次の機会に。Capistrano でこれらも自動化するために、もうちょっと突っ込んでちゃんとやんないといけません。
- – 参考リンク –
- Capistrano3でrailsをdeployしてみる – Inside Out
- Capistrano 3系でRails4.1のデプロイ[rbenv][ruby2.1] – 酒と泪とRubyとRailsと
- Capistrano3で快適デプロイ生活!! – Less is Best
- Ruby初心者のCapistranoデプロイ入門 | 開発メモるアル
- Rals3.2.13で始める Git連携Capistrano 2系による自動デプロイ – 酒と泪とRubyとRailsと
- Rails – はじめてのCapistrano – Qiita
- capistrano 3.x系を使ってrailsをデプロイ | iii ThreeTreesLight
- Capistrano でローカルに置いてあるアプリケーションをデプロイ – akishin999の日記
- Capistrano3のデプロイフレームワークの使い方 – Qiita
- 特集 DevOps時代の必須知識:まとめてたくさん処理したい! を解決する「Capistrano」 – @IT
- 入門 Capistrano 3 ~ 全ての手作業を生まれる前に消し去りたい | GREE Engineers’ Blog
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
Leave Your Message!