- 更新日: 2016年2月16日
- PHP & CakePHP
capcakeでCakePHPアプリをデプロイ
capcake(Capistrano::cakephp)を使って、CakePHP3 アプリケーションをデプロイする方法です。capcake は Capistrano に薄く機能が追加してある、CakePHP アプリケーションのデプロイ用ライブラリです。
https://github.com/jadb/capcake
CakePHP デプロイのためライブラリとしては有名らしい。
— 環境 —
PHP 5.5.19
CakePHP 3.1.1
capcake v3.0.2
capistrano 3.4.0
capcake および capistrano インストール
capcake, capistrano は Ruby gem のライブラリなので、事前に Ruby 環境の構築と Gem をインストールできるようにしておく必要がある。rbenv で Ruby 環境を準備するには以下記事等を参考にお願いします。
Mac の Ruby 管理を rvm から rbenv に乗り換え | EasyRamble
rbenv と ruby-build で Ruby をインストールして管理 〜 CentOS6 | EasyRamble
また、私は Gem の管理には Bundler を使っているので、なければ Bundler も入れる。
Bundler: The best way to manage a Ruby application’s gems
Bundler を使うと、Gemfile で Gem パッケージを管理できます。ということで、CakePHP アプリケーションのディレクトリで Gemfile を作成。
Gemfile
1 2 3 4 5 |
source "https://rubygems.org" ruby "2.2.3" gem 'capistrano', '~> 3.0.0' gem 'capcake', '~> 3.0.0' |
続いて bundle install で capistrano, capcake をインストールする。
1 2 3 4 |
$ cd /path/to/cake_app $ bundle install --path vendor/bundle |
これで、CakePHP アプリケーションのディレクトリの vendor/bundle 以下に、capcake と capistrano がインストールされました。
capistrano, capcake の初期設定
cap install コマンドで Capistrano が使うファイルを生成します。
1 2 3 4 5 6 7 8 9 |
$ 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 |
.capistrano 以下を .gitignore に追加。この時点で .capistrano というディレクトリは作成されていなかったけれど、capcake の README に書いてありましたので。
.gitignore
1 2 3 |
.capistrano/* |
続いて、Capfile に capcake のモジュールを追加。
Capfile
1 |
require 'capistrano/cakephp' |
オプションとして、以下等を追加できます。
1 2 3 |
require 'capistrano/cakephp/asset_compress' require 'capistrano/cakephp/migrations' require 'capistrano/composer' |
それぞれ、assets のビルド、DBマイグレーション実行、Composer によるライブラリのインストールを実行するためのモジュールです。
Composer は以下の手順でインストールできます。
1 2 3 4 5 |
$ cd ~/local/src $ curl -sS https://getcomposer.org/installer | php $ mv composer.phar ~/local/bin/composer |
デプロイ用スクリプトを作成
ここまでできたら、capistrano のデプロイ用スクリプトを作成する。config/deploy.rb を編集します。
config/deploy.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
set :application, 'app_name' set :repo_url, 'repo_url' # ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp } set :deploy_to, '/path/to/cake_app' set :scm, :git # set :format, :pretty # set :log_level, :debug # set :pty, true set :linked_files, %w{config/secrets.yml config/environments/production.php} set :linked_dirs, %w{logs tmp vendor} set :default_env, { path: "/path/to/local/bin:$PATH" } set :keep_releases, 5 namespace :deploy do # upload files desc 'Upload config/secrets.yml config/environments/production.php' task :upload do on roles(:app) do |host| if test "[ ! -d #{shared_path}/config ]" execute "mkdir -p #{shared_path}/config" end if test "[ ! -d #{shared_path}/config/environments ]" execute "mkdir -p #{shared_path}/config/environments" end upload!('config/secrets.yml', "#{shared_path}/config/secrets.yml") upload!('config/environments/production.php', "#{shared_path}/config/environments/production.php") end end desc 'Restart application' task :restart do on roles(:app), in: :sequence, wait: 5 do # Your restart mechanism here, for example: # execute :touch, release_path.join('tmp/restart.txt') end end after :restart, :clear_cache do on roles(:web), in: :groups, limit: 3, wait: 10 do # Here we can do anything such as: # within release_path do # execute :rake, 'cache:clear' # end end end after :finishing, 'deploy:cleanup' end |
アプリケーション名やリポジトリURL等は適宜変更する。
secrets.yml や production 環境用の設定ファイルをアップロードするための、upload タスクを作成しました。これらのファイルは、.gitignore に指定して git 管理から外しているので、production 環境に別途アップロードする必要がありましたので。詳細については、以下記事等を参考お願いします。
CakePHP3でYAMLの設定ファイルを読み込み | EasyRamble
CakePHP3で環境を切り替え(development/production) | EasyRamble
CakePHP3で環境毎(development/production)にデータベース・設定を切り替え | EasyRamble
以上で、config/deploy.rb は終了。
最後に、production 環境に固有の設定を、config/deploy/production.rb に記載する。
config/deploy/production.rb
1 2 3 4 5 |
set :stage, :production role :app, %w{host@example.com} role :web, %w{host@example.com} role :db, %w{host@example.com} |
以上で Capistrano のデプロイ用スクリプトの準備は終了です。
デプロイ関連のコマンド
デプロイが上手く動作するかの事前チェック。
1 2 3 |
$ bundle exec cap production deploy:check |
ファイルのアップロード。
1 2 3 |
$ bundle exec cap production deploy:upload |
デプロイ実行。
1 2 3 |
$ bundle exec cap production deploy |
一応以上で capcake を使ってデプロイが成功しました。注意点として、README に…
“IMPORTANT: Tested with CakePHP 3 thus far, but should work for CakePHP 2 that uses composer.”
「CakePHP 3 でも今のとこ動作するけど、CakePHP 2 で使ってね」的なことが書いてあります。
ということで、諸々あったり capcake 自体がそれほど多くの機能を使えるわけでもないので、結局現在は Capistrano を直接使うように変更しました。どちらを採用するかは好み次第かと思いますが、Capistrano を直接使って CakePHP アプリケーションをデプロイする方法はまた後日に書きます。
- – 参考リンク –
- Capistrano3とBitbucketを使ってRailsアプリをデプロイ | EasyRamble
- Capistrano3でRails4.1アプリケーションをデプロイ | EasyRamble
- CakePHP2アプリケーションをCapistranoでデプロイする | Ryuzee.com
- CakePHPのプロジェクトをcapistranoでデプロイ | 江島@システム開発
- FuelPHPアプリをCapistrano3でデプロイ – Capistrano環境構築編 | hrendoh’s memohrendoh’s memo
- PHP & CakePHP の関連記事
- PHP+MySQLでNo such file or directoryエラー
- bin/cakeコマンドでintlエラーが出る場合の対処(CakePHP)
- CakePHPアプリケーションをCapistranoでデプロイ
- Integrity constraint violation:Column ‘created’ in order clause is ambiguousエラー/CakePHP
- CakePHPでDB関連テーブルのレコード・データを取得
- CakePHPでカラム属性に別名/エイリアスを付ける仮想フィールド
- CakePHPで日付選択フォームのカスタマイズ
- CakePHP3で現在のコントローラー名・アクション名を取得
- PHPインストールでconfigure: error: freetype.h not foundエラー
- CakePHPでログイン後に元のページにリダイレクトさせる
- 初回公開日: 2016年2月15日
Leave Your Message!