ヒビノログ

個人的なメモを淡々と記録していくブログ。最近はLaravelやスマートフォンの話題など。

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) [ruby]# develop role :web, *%w[ dev.sample.com ] set :user, "deployuser" ssh_options[:keys] = %w(/Users/sample/keys/ec2-key.pem)[/ruby] 上記でWebサーバの接続先と接続ユーザー名(デプロイ専用のユーザー)を指定しています。接続は鍵認証によるSSH接続を行うようにしているため、キーファイルの場所もここで指定しています。パスワードによる接続を行う場合はファイル内に記載してもいいですし、毎回入力を懇請するようにもできます。他の環境設定ファイルも同様の記載方法です。

  2. デプロイ手順の定義ファイル(config/deploy.rb) [ruby]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[/ruby] Laravelで使う際に必要なのが16〜19行目のところです。Laravelでは app/storage の下に書き込み権限を与える必要があるため、デプロイ後の処理として記載しています。 ちなみに finalize_update タスクは、デフォルトではRuby用の設定を行うようになっていて、ここで処理を上書きすることでLaravelの挙動に必要の無いディレクトリ作成などの処理を止めています。

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

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

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