MagentifyをつかってMagentoの本番反映を楽にする
この記事は公開から 1年以上が経過しています。現在の最新情報との整合性については弊社では一切の責任を負いかねます。
Magentoを使ったサイトへの本番反映が抱える問題点
Magentoを使ったサイトに対し、変更を加える事は、オープンソース・ソフトウエアである以上ごく当たり前のことであると思います。
ですが、Magentoのディレクトリ構成には以下のような問題があります。
- モジュール、テーマ、スキンディレクトリが別になっているので、アップロードする際に手間がかかる
- データベースに対する更新処理が行われる場合には慎重な反映作業が求められる
- 何かあった際に変更を取りやめる際にディレクトリの複雑さのために手間がかかる
当然のことながら、本番反映をする際にはきちんと手順を追って反映作業を行うのですが、
- 反映対象のファイルを整理して、一括で反映できるように準備する
- 容易に対象ファイルを抽出できるようにバージョン管理システムを導入する
ということは必要だと思います。
バージョン管理システムがあれば、その変更履歴を元に反映対象ファイルを抽出できます。
まだ導入されていない場合は、使い始めが少しむずかしいかもしれませんが、ぜひ導入されることをおすすめします。
さて、このエントリではMagentoの本番反映をラクにするためのツール「Magentify」を紹介します。
Magentifyとは?
Magentifyは、Alistair Stead氏が開発・公開している、「Capistrano」のMagento用レシピです。
Capistranoの良い所は、
- あらかじめ決まった手順に沿って反映作業が行える
- 複数のサーバーに並列的に作業が行える
- 万一の際に巻き戻し処理が行える
というところです。
MagentifyはこのCapistranoのMagento専用のレシピと便利ツールをセットにしたもので、うまく使うことで安全・安心な本番反映ができるようになります。
Magentifyのインストール
Magentifyのインストールはとても簡単です。
デプロイシステムを構築したいサーバー上で、
gem install magentify
とタイプするだけでインストールできます。
とても簡単ですね。
もちろん、インストール前にはRubyGemのインストールをしておく必要があります。
デプロイプロジェクトのセットアップ
Magentifyのインストール後、デプロイプロジェクトのセットアップを行います。
mkdir /opt/magentify
cd /opt/magentify
magentify .
bundle install
とすることで、Magentifyのレシピを使用するCapistranoプロジェクトが作成できます。
デプロイプロジェクトの設定
Magentifyを使ったデプロイプロジェクトはCapistranoと同じ形式です。
/opt/magentify/config/deploy.rbに設定ファイルがあります。
設定ファイルを開くと、以下のように初期状態では記述されています。
set :application, "magento" set :domain, "#{application}.com" set :deploy_to, "/var/www/#{domain}" set :user, "deploy" set :repository, "git@github.com:user/project.git" set :scm, :git role :web, "000.000.000.000" # Your HTTP server, Apache/etc role :app, "000.000.000.000" # This may be the same as your `Web` server or a separate administration server set :keep_releases, 3 set :app_symlinks, ["/media", "/var", "/sitemaps", "/staging"] set :app_shared_dirs, ["/app/etc", "/sitemaps", "/media", "/var", "/staging"] set :app_shared_files, ["/app/etc/local.xml"]
:applicationにはアプリケーション名をつけます。任意につけるとよいでしょう。ただしデフォルトのままだと、この値をファイルをデプロイするディレクトリ名に流用してしまうので、環境に合わせて書き換えます。
次に:repositoryを設定します。GitHubや自社リポジトリなどを指定します。必要に応じて:userにユーザー名、:passwordを追加設定してパスワードを入れておきます。
そしてroleの:webと:appに、反映するサーバーのIPアドレスを入力します。
管理画面とフロントエンドを別サーバーにしている場合は両方書いても良いですし、:webだけを複数書いても構いません(複数書くと複数のサーバーにデプロイします)。
最後に設定ファイルやvar、mediaディレクトリのためのシンボリックリンクを張る設定を記述します。
基本的に標準設定のままでも良いですが、フルページキャッシュや決済関係の設定ファイルなどがある場合は、ここに追加しておいてください。
デプロイ先サーバーのセットアップ
設定ファイルの調整ができたら、
bundle exec cap deploy:setup
を実行します。
うまく実行できると、デプロイ先サーバーの:deploy_toで指定したディレクトリ配下に
- releases
- shared
というディレクトリができます。
ここはCapistranoと同じ仕組みです。
うまくいかない場合はSSH接続IDやパーミッションなどを見なおしてみてください。
デプロイの実行
セットアップが完了し、実際にデプロイを実行する前に、Magentifyで利用できるコマンドを確認しておきましょう。
bundle exec cap -T
とすることで利用できるコマンドの一覧が表示されます。
cap deploy # [Overload] Deploys your project. cap deploy:check # Test deployment dependencies. cap deploy:cleanup # Clean up old releases. cap deploy:cold # [Overload] Default actions only calls 'update'. cap deploy:create_symlink # Updates the symlink to the most recently deployed version. cap deploy:finalize_update # [Overload] Touches up the released code. cap deploy:migrate # [Overload] Default actions cancelled. cap deploy:migrations # Deploy and run pending migrations. cap deploy:pending # Displays the commits since your last deploy. cap deploy:pending:diff # Displays the `diff' since your last deploy. cap deploy:restart # [Overload] Default actions cancelled cap deploy:rollback # Rolls back to a previous version and restarts. cap deploy:rollback:code # Rolls back to the previously deployed version. cap deploy:setup # Prepares one or more servers for deployment. cap deploy:start # Blank task exists as a hook into which to install your own environment specific behaviour. cap deploy:stop # Blank task exists as a hook into which to install your own environment specific behaviour. cap deploy:symlink # Deprecated API. cap deploy:update # Copies your project and updates the symlink. cap deploy:update_code # Copies your project to the remote servers. cap deploy:upload # Copy files to the currently deployed version. cap deploy:web:disable # Present a maintenance page to visitors. cap deploy:web:enable # Makes the application web-accessible again. cap info # Show hosts cap info:roles # Show roles cap invoke # Invoke a single command on the remote servers. cap mage:cc # Clear the Magento Cache cap mage:clean_log # Clean the Magento logs cap mage:compiler # Run the Magento compiler cap mage:disable # Disable the Magento install by creating the maintenance.flag in the web root. cap mage:disable_compiler # Disable the Magento compiler cap mage:enable # Enable the Magento stores by removing the maintenance.flag in the web root. cap mage:enable_compiler # Enable the Magento compiler cap mage:files:pull # Pull magento media catalog files (from remote to local with rsync) cap mage:files:push # Push magento media catalog files (from local to remote) cap mage:finalize_update # Touches up the released code. cap mage:indexer # Run the Magento indexer cap mage:setup # Prepares one or more servers for deployment of Magento. cap shell # Begin an interactive Capistrano session. Some tasks were not listed, either because they have no description, or because they are only used internally by other tasks. To see all tasks, type `cap -vT'. Extended help may be available for these tasks. Type `cap -e taskname' to view it.
標準のCapistranoと異なる点は、「mage」で始まるコマンドが追加されている点です。
ログの削除やキャッシュのクリアだけでなく、メンテナンスモードの移行・解除が一斉にできる点も魅力です。
このようにMagentifyはMagentoを用いて構築したサイトの本番反映を簡単にするのみならず、メンテナンスを容易にするための機能も備えています。
さて、実際のデプロイですが、
bundle exec cap deploy
と実行することで、対象のサーバー全てに同時反映が行われます。
とても簡単ですね。
もし、デプロイした内容に誤りがあり、デプロイ自体をやり直したい場合は、
bundle exec cap deploy:rollback
とすれば1つ前のデプロイ内容に戻すことができます。
まとめ
Magentifyを使うことで、1台から複数台のサーバーに対するカスタマイズ内容を一括して反映することができます。
ファイルアップロードツールを使うよりも、安全で漏れのない作業ができる上、誰がやっても同じ結果が得られます。
また、Capistranoのレシピの書き方がわからなくても、MagentifyにはMagento用レシピが付属するので、すぐに使いはじめることができます。
まだMagentifyを使ったことがない方は、ぜひお試しください。