🚀

Laravel4アプリをCapistranoでデプロイする

Laravel4を、Capistranoを使ってステージングや本番環境に簡単にデプロイする例です。 この記事では下記のようなケースで作成してます。

  • デプロイ先を複数設定する(develop、production)
  • ソースコードはBitbucketに入ってる
  • デプロイ先はAmazonEC2
  • デプロイ時はローカル端末に一旦ファイルをチェックアウトして、まるごとアップロードする

Capistranoインストールからデプロイ実行までの一連の流れを簡単に記載すると、

  1. Capistranoをインストール
  2. デプロイ定義ファイルを作成
  3. デプロイ先の環境設定ファイルを準備
  4. デプロイの手順ファイルを定義
  5. デプロイの実行

となるのですが、これらの手順に関してはRyuzeeさんの下記のページに詳しく記載されているので、まずこちらを確認してみてください(えー)

CakePHP2アプリケーションをCapistranoでデプロイする(Ryuzee.com)

で、私の方でLaravel向けにサンプルとして作成した設定ファイルは下記の通りです。

1. デプロイ先環境別の設定ファイル(config/deploy/develop.rb)

# develop
role :web, *%w[
dev.sample.com
]
set :user, "deployuser"
ssh_options[:keys] = %w(/Users/sample/keys/ec2-key.pem)

上記でWebサーバの接続先と接続ユーザー名(デプロイ専用のユーザー)を指定しています。接続は鍵認証によるSSH接続を行うようにしているため、キーファイルの場所もここで指定しています。パスワードによる接続を行う場合はファイル内に記載してもいいですし、毎回入力を懇請するようにもできます。他の環境設定ファイルも同様の記載方法です。

2. デプロイ手順の定義ファイル(config/deploy.rb)

require "capistrano/ext/multistage"
require "capistrano_colors"
require "railsless-deploy"
require "rubygems"
set :application, "laravel_sample"

set :scm, :git
set :repository,  "git@bitbucket.org:kurikazu/laravel_sample"
set :branch, "master"

set :deploy_to, "/sites/laravel_sample/app"
set :deploy_via, :copy
set :use_sudo, false

namespace :deploy do
  task :finalize_update, :except => { :no_release => true } do
    #change permission for laravel storage directories.
    run "chmod -R 777 #{latest_release}/app/storage/"
  end
end

Laravelで使う際に必要なのが16〜19行目のところです。Laravelでは app/storage の下に書き込み権限を与える必要があるため、デプロイ後の処理として記載しています。 ちなみに finalize_update タスクは、デフォルトではRuby用の設定を行うようになっていて、ここで処理を上書きすることでLaravelの挙動に必要の無いディレクトリ作成などの処理を止めています。

以上が、ひとまず簡易的にLaravelのデプロイを行うための設定です。

実際にデプロイを実行すると、デプロイ先環境の deploy_to で指定したディレクトリ内の releases というディレクトリの下に、デプロイ時間でディレクトリが作成され、そこにデプロイしたファイル群が格納されます。そして最新ディレクトリは、同じく deploy_to のディレクトリ内の current からシンボリックリンクが張られます。 そのためDocumentRootは、上記の current/public に対して設定すれば良いということになります。

データベースのmigrationに関しては別の機会に。