EC-Cube を Heroku でも
Heroku Meetup #22
Takahiro Yonei (@yonet77)
Herokuに「何か」を載っけるシリーズ 〜EC-Cube編〜
※続くかどうかは未定
 米井 孝浩(よねい たかひろ)
 TAOドライブ株式会社 エンジニア
 Salesforce向けの受託開発をメインにしてます
 最近はHerokuにも力を入れ始めてます
 Salesforce DG (Tokyo) の運営メンバの1人
 (いちおう)Salesforce MVP (Spring’ 15)
 PHP歴 ほぼゼロ
 Heroku に本腰入れたのは今年から
※そんな初心者が(無謀?)にもEC-Cube案件に挑んだ時の記録です...
1. EC-CubeをHerokuで試してみる
 EC-Cubeのインストール
 EC-Cube on Heroku の動作確認
 Heroku Pipeline に載せる etc
2. Heroku上で稼働させるポイント(分かってきたこと)
3. 今後の展望
 ECサイトを何かサクッと作れないか?
 とあるエンドユーザからの要求...
 Salesforceは稼働中
 ただ、Commerce Cloudはちょっと...
 ならばHerokuで構築するしかない!
 専任のインフラ担当はいないので、AWSで稼働させるのはツラい
 ECサイト用のパッケージとしては...EC-Cubeが良いのでは?
-> EC-CubeをHerokuに載っけてみよう
コトの発端...
 EC-Cubeとは?
 オープンソースのEC向けコンテンツ管理システム
• PHP + PostgreSQL で構築されており、v2.13系とv3.0.x系があるが、
初めから使うならv3.0.x系が良さそう
 有償ライセンスと無償ライセンス(GPLライセンス)のデュアルライセンス方式
 様々なプラグインが用意されており、プラグインを組み合わせることで拡張可能
 開発コミュニティの規模も大きく、非常に活発
https://www.ec-cube.net/ https://github.com/EC-CUBE/ec-cube
 EC-Cube を Heroku にインストール
 Heroku DeployボタンよりHerokuにデプロイする
 半年ほど前の場合だと、postgreのバージョン指定がなくインストールに失敗する
※ 最新の app.json だと、v9.6 が指定されており、インストールは成功する
 EC-Cube on Heroku の動作確認
 画像ファイルはHeroku内に格納できないので、別のストレージサービスを使う
Herokuのaddonとして利用できるストレージサービス
• Bucketeer https://elements.heroku.com/addons/bucketeer
• Cloudinary https://elements.heroku.com/addons/cloudinary
Cloudinary用のプラグインと、Heroku
addonの組合せが良さそう
(試せてないですが)
画像ファイルをCloudinaryに保存するプラグインもある
https://www.ec-cube.net/products/detail.php?product_id=1058
 EC-Cube on Heroku の動作確認
 Dynoの数を増やしてみたら、正常にログインできなくなった
ログインしたはずなのに、ログイン画面にリダイレクトされてしまう!
セッション情報をローカルに保存する方式になっていた模様?
-> Dynoが増えるとセッションの引き継ぎに失敗する
-> セッション用のデータストアが必要
セッションを Heroku Redis で管理するよう変更
(設定ファイルのイメージ)
 EC-Cube を Heroku Pipeline に載せる
 Pull Requestを作って、review appを作成する
-> 新規に app を作るのは特段問題なし
 stagingへのデプロイで色々と問題が発生した
1. デプロイ時に流すスクリプトはどうするの?
2. 環境ごとにDBとか切り分けたいがどうするの?
3. 2回目以降のデプロイ後、管理画面にログインできない!
4. プラグインのインストールでエラー発生...
 EC-Cube を Heroku Pipeline に載せる
1. デプロイ時に流すスクリプトについて
PHPアプリをHerokuにデプロイする場合、Composer.json内の “scripts” -> “compile” にて指定したコマンドが実行
される
ここに、EC-Cubeインストールコマンドを指定する
-> https://devcenter.heroku.com/articles/php-support#custom-compile-step
アプリを新規作成する場合(review appを作成するなど)には、以下の処理
既にインストールされているアプリに差分をデプロイする場合(stagingへのデプロイ)には、
以下の処理
環境ごとに、デプロイ時の処理を切り替える
 EC-Cube を Heroku Pipeline に載せる
1. デプロイ時に流すスクリプトについて
環境ごとに切り替えるインストールスクリプトを用意する
(スクリプトのイメージ)
 EC-Cube を Heroku Pipeline に載せる
1. デプロイ時に流すスクリプトについて
作成したスクリプトを、composer.json から呼び出す
インストール用のスクリプトを、
composer.json で指定する
 EC-Cube を Heroku Pipeline に載せる
2. 環境ごとにDBとかを切り分けたい
こんな感じに環境に応じて設定ファイルを分け
られるようにしたい
2. 環境ごとにDBとかを切り分けたい
src/Eccube/Application.php に手を加える
-> 環境変数によって読み込むconfigを切り替える
ただ、src/Eccube/Application.php に手を加えるのが良い方法かどうか??
(詳しい人からのアドバイスを募集...)
※本体の方でも修正があった模様? https://github.com/EC-CUBE/ec-cube/pull/2550
 EC-Cube を Heroku Pipeline に載せる
3. 2回目以降のデプロイ後、管理画面にログインできない(stagingアプリ)
Herokuの環境変数として AUTH_MAGIC をもたせて、常に同じ値とする
① /eccube_install.php を実行
② 変数 AUTH_MAGIC を新規生成
③ ②の AUTH_MAGIC 値を使って、saltキーを生成
⑤ 設定ファイルに AUTH_MAGIC を保存
④ saltキーとともにadminユーザを登録
初回デプロイ
2回目以降デプロイ
� ユーザ登録時のAUTH_MAGICの値と異
なる値を設定ファイルに保存
-> ログインできない!
(stagingアプリのデプロイ処理 一部抜粋)
 EC-Cube を Heroku Pipeline に載せる
4. プラグインのインストールでエラー発生(stagingアプリ)
 EC-Cube を Heroku Pipeline に載せる
(まず)プラグインのインストール方法について
1. プラグインのインストールはスクリプト化しておく
2. デプロイ時にアプリによって処理を切り分ける
 review app(appを新規作成) -> app.json の scripts にスクリプトを指定する
 staging(差分更新) -> デプロイ後に手動で実行($ heroku run bash xxx)
4. プラグインのインストールでエラー発生(stagingアプリ)
インストール処理で、使用するテーブルの存在をチェックしてないプラグインもある
(テーブルの存在チェックは、プラグイン作成時の必須要件ではない)
プラグインを都度修正(存在チェックを追加していく)
 EC-Cube を Heroku Pipeline に載せる
本体 プラグイン composer.json app.json
インストール - - - • addon指定
• postgres
• redis
• cloudinary(ベター?)
Pipelineへの搭
載
環境ごとに
設定ファイルを
切り分ける
インストール時に
重複エラーを回避する
環境ごとに
デプロイ時の処理を
切り分ける
• 環境変数
• AUTH_MAGIC を指定する
(これまでの修正箇所)
 物理ファイルは格納できないので、ストレージサービスは必須
 セッション管理には、redisなど別のデータストアサービスを利用する
 アプリの設定ファイルは、環境ごとに切り分けできるようにする
 本体の方でも検討されている模様なので要確認
 デプロイ時の処理(インストールなど)の内容を把握して、
review app作成時と、stagingデプロイ時の両方にも対応できるようにする
(これまでで分かってきたこと...)
 EC-Cube を Heroku で稼働させる上でのノウハウを
もっと溜め込みたい
 他のソフトウェアもHerokuで稼働させることを試してみたい
-> Heroku で「何か」を稼働させる上でのポイントを溜め込みたい
EC-CubeをHerokuでも

EC-CubeをHerokuでも

  • 1.
    EC-Cube を Herokuでも Heroku Meetup #22 Takahiro Yonei (@yonet77) Herokuに「何か」を載っけるシリーズ 〜EC-Cube編〜 ※続くかどうかは未定
  • 2.
     米井 孝浩(よねいたかひろ)  TAOドライブ株式会社 エンジニア  Salesforce向けの受託開発をメインにしてます  最近はHerokuにも力を入れ始めてます  Salesforce DG (Tokyo) の運営メンバの1人  (いちおう)Salesforce MVP (Spring’ 15)
  • 3.
     PHP歴 ほぼゼロ Heroku に本腰入れたのは今年から ※そんな初心者が(無謀?)にもEC-Cube案件に挑んだ時の記録です...
  • 4.
    1. EC-CubeをHerokuで試してみる  EC-Cubeのインストール EC-Cube on Heroku の動作確認  Heroku Pipeline に載せる etc 2. Heroku上で稼働させるポイント(分かってきたこと) 3. 今後の展望
  • 5.
     ECサイトを何かサクッと作れないか?  とあるエンドユーザからの要求... Salesforceは稼働中  ただ、Commerce Cloudはちょっと...  ならばHerokuで構築するしかない!  専任のインフラ担当はいないので、AWSで稼働させるのはツラい  ECサイト用のパッケージとしては...EC-Cubeが良いのでは? -> EC-CubeをHerokuに載っけてみよう コトの発端...
  • 6.
     EC-Cubeとは?  オープンソースのEC向けコンテンツ管理システム •PHP + PostgreSQL で構築されており、v2.13系とv3.0.x系があるが、 初めから使うならv3.0.x系が良さそう  有償ライセンスと無償ライセンス(GPLライセンス)のデュアルライセンス方式  様々なプラグインが用意されており、プラグインを組み合わせることで拡張可能  開発コミュニティの規模も大きく、非常に活発 https://www.ec-cube.net/ https://github.com/EC-CUBE/ec-cube
  • 7.
     EC-Cube をHeroku にインストール  Heroku DeployボタンよりHerokuにデプロイする  半年ほど前の場合だと、postgreのバージョン指定がなくインストールに失敗する ※ 最新の app.json だと、v9.6 が指定されており、インストールは成功する
  • 8.
     EC-Cube onHeroku の動作確認  画像ファイルはHeroku内に格納できないので、別のストレージサービスを使う Herokuのaddonとして利用できるストレージサービス • Bucketeer https://elements.heroku.com/addons/bucketeer • Cloudinary https://elements.heroku.com/addons/cloudinary Cloudinary用のプラグインと、Heroku addonの組合せが良さそう (試せてないですが) 画像ファイルをCloudinaryに保存するプラグインもある https://www.ec-cube.net/products/detail.php?product_id=1058
  • 9.
     EC-Cube onHeroku の動作確認  Dynoの数を増やしてみたら、正常にログインできなくなった ログインしたはずなのに、ログイン画面にリダイレクトされてしまう! セッション情報をローカルに保存する方式になっていた模様? -> Dynoが増えるとセッションの引き継ぎに失敗する -> セッション用のデータストアが必要 セッションを Heroku Redis で管理するよう変更 (設定ファイルのイメージ)
  • 10.
     EC-Cube をHeroku Pipeline に載せる  Pull Requestを作って、review appを作成する -> 新規に app を作るのは特段問題なし  stagingへのデプロイで色々と問題が発生した 1. デプロイ時に流すスクリプトはどうするの? 2. 環境ごとにDBとか切り分けたいがどうするの? 3. 2回目以降のデプロイ後、管理画面にログインできない! 4. プラグインのインストールでエラー発生...
  • 11.
     EC-Cube をHeroku Pipeline に載せる 1. デプロイ時に流すスクリプトについて PHPアプリをHerokuにデプロイする場合、Composer.json内の “scripts” -> “compile” にて指定したコマンドが実行 される ここに、EC-Cubeインストールコマンドを指定する -> https://devcenter.heroku.com/articles/php-support#custom-compile-step アプリを新規作成する場合(review appを作成するなど)には、以下の処理 既にインストールされているアプリに差分をデプロイする場合(stagingへのデプロイ)には、 以下の処理 環境ごとに、デプロイ時の処理を切り替える
  • 12.
     EC-Cube をHeroku Pipeline に載せる 1. デプロイ時に流すスクリプトについて 環境ごとに切り替えるインストールスクリプトを用意する (スクリプトのイメージ)
  • 13.
     EC-Cube をHeroku Pipeline に載せる 1. デプロイ時に流すスクリプトについて 作成したスクリプトを、composer.json から呼び出す インストール用のスクリプトを、 composer.json で指定する
  • 14.
     EC-Cube をHeroku Pipeline に載せる 2. 環境ごとにDBとかを切り分けたい こんな感じに環境に応じて設定ファイルを分け られるようにしたい
  • 15.
    2. 環境ごとにDBとかを切り分けたい src/Eccube/Application.php に手を加える ->環境変数によって読み込むconfigを切り替える ただ、src/Eccube/Application.php に手を加えるのが良い方法かどうか?? (詳しい人からのアドバイスを募集...) ※本体の方でも修正があった模様? https://github.com/EC-CUBE/ec-cube/pull/2550  EC-Cube を Heroku Pipeline に載せる
  • 16.
    3. 2回目以降のデプロイ後、管理画面にログインできない(stagingアプリ) Herokuの環境変数として AUTH_MAGICをもたせて、常に同じ値とする ① /eccube_install.php を実行 ② 変数 AUTH_MAGIC を新規生成 ③ ②の AUTH_MAGIC 値を使って、saltキーを生成 ⑤ 設定ファイルに AUTH_MAGIC を保存 ④ saltキーとともにadminユーザを登録 初回デプロイ 2回目以降デプロイ � ユーザ登録時のAUTH_MAGICの値と異 なる値を設定ファイルに保存 -> ログインできない! (stagingアプリのデプロイ処理 一部抜粋)  EC-Cube を Heroku Pipeline に載せる
  • 17.
    4. プラグインのインストールでエラー発生(stagingアプリ)  EC-Cubeを Heroku Pipeline に載せる (まず)プラグインのインストール方法について 1. プラグインのインストールはスクリプト化しておく 2. デプロイ時にアプリによって処理を切り分ける  review app(appを新規作成) -> app.json の scripts にスクリプトを指定する  staging(差分更新) -> デプロイ後に手動で実行($ heroku run bash xxx)
  • 18.
  • 19.
    本体 プラグイン composer.jsonapp.json インストール - - - • addon指定 • postgres • redis • cloudinary(ベター?) Pipelineへの搭 載 環境ごとに 設定ファイルを 切り分ける インストール時に 重複エラーを回避する 環境ごとに デプロイ時の処理を 切り分ける • 環境変数 • AUTH_MAGIC を指定する (これまでの修正箇所)
  • 20.
     物理ファイルは格納できないので、ストレージサービスは必須  セッション管理には、redisなど別のデータストアサービスを利用する アプリの設定ファイルは、環境ごとに切り分けできるようにする  本体の方でも検討されている模様なので要確認  デプロイ時の処理(インストールなど)の内容を把握して、 review app作成時と、stagingデプロイ時の両方にも対応できるようにする (これまでで分かってきたこと...)
  • 21.
     EC-Cube をHeroku で稼働させる上でのノウハウを もっと溜め込みたい  他のソフトウェアもHerokuで稼働させることを試してみたい -> Heroku で「何か」を稼働させる上でのポイントを溜め込みたい