Contenu connexe
Similaire à EC-CubeをHerokuでも (20)
Plus de Takahiro Yonei (14)
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案件に挑んだ時の記録です...
- 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 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
- 9. EC-Cube on Heroku の動作確認
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とかを切り分けたい
こんな感じに環境に応じて設定ファイルを分け
られるようにしたい
- 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)
- 19. 本体 プラグイン composer.json app.json
インストール - - - • addon指定
• postgres
• redis
• cloudinary(ベター?)
Pipelineへの搭
載
環境ごとに
設定ファイルを
切り分ける
インストール時に
重複エラーを回避する
環境ごとに
デプロイ時の処理を
切り分ける
• 環境変数
• AUTH_MAGIC を指定する
(これまでの修正箇所)
- 21. EC-Cube を Heroku で稼働させる上でのノウハウを
もっと溜め込みたい
他のソフトウェアもHerokuで稼働させることを試してみたい
-> Heroku で「何か」を稼働させる上でのポイントを溜め込みたい