EC-CUBE4 PHP Vagrant VurtualBox 開発環境 雑談
EC-CUBE4 の雑多な話
開発室員(お父さん)です。
あついです。外に出たくないです! 公園に行きたくないです!!
最新のEC-CUBE
EC-CUBE4。国産のECサイト用CMSの最新バージョンです。
しかし出たばっかりだからか、なかなか情報が分散しているな…と思ったのでメモ。
Vagrantで動かす
ローカルの開発環境が欲しいので、いつも通り Ansible_local で Vagrantマシンを作成します。EC-CUBE は Composer で入れてしまいましょう。
が、ちょいちょいと問題が…。
環境
- ホスト Windows 10
- ゲスト CentOS 7
- PHP 7.2.19
- yumリポジトリは
remi-php72
を使います
- yumリポジトリは
- EC-CUBE 4.0.2
Ansibleがコケる
Ansible でプロビジョンするときに失敗。Composer で止まる。
GihHubはい。
EC-CUBE を composer で入れると普通に警告が出るので、そのせいで Ansible が止まるんですねー。
というわけで ignore_errors: True
としてしまいます。仕方がない。
- name: EC-CUBE 4 インストール
shell: composer create-project ec-cube/ec-cube ec-cube "4.0.2" --keep-vcs
ignore_errors: True
args:
chdir: /var/www
creates: /var/www/ec-cube
synced_folder 使うと重すぎる
え、なんで? ってくらい遅いです。キャッシュされてないページは10秒? 15秒? みたくかかるので、これでは開発はきびしい…。Intel i7 + SanDisk の SSD でも無理。
共有ディレクトリにキャッシュを生成する処理が大変らしく、それで重くなるようです。キャッシュ置き場を変えればいいんですが、EC-CUBE本体にごにょごにょしなければならないようなので、別の方法でどうにか。
同期方式にNFSを使う
通常は type: "virtualbox"
にするかと思いますが、どうやらこれが遅いようなので NFS を利用してみます。
プラグインをインストールしてから…
vagrant plugin install vagrant-winnfsd
Vagrantfileをこうする
eccube.vm.synced_folder "C:\\path\\to", "/var/www", type: "nfs", nfs_export: true, nfs_version: 3
割とマシになるかと思います。
OPcache と APCu でがんばる
公式でも記載されていますね。 GihHub
まず OPcache。これは、PHPスクリプトをバイトコードでキャッシュしておく仕組みです。
yum install php72-php-opcache.x86_64
次の APCu はデータの方をキャッシュしておく仕組みですね。
yum install php72-php-pecl-apcu.x86_64
自分の環境ではなぜか有効になってなかったので、find で探してあるべき場所へコピーしてしまいます。
cp -a /etc/opt/remi/php72/php.d/40-apcu.ini /etc/php.d/40-apcu.ini
cp -a /opt/remi/php72/root/usr/lib64/php/modules/apcu.so /usr/lib64/php/modules/apcu.so
systemctl restart httpd php-fpm
# 終わったら一応 bin/console cache:clear --no-warmup
php -i | grep -Ei 'apc|opcache'
これで探して apc と opcache の両方が引っかかればOKです。
APCu を一応確認。
んー、ちゃんと使われているようですね。
余談
GihHubこれでたぶん戦えるのでは?
自分の環境では、これで普通に使えるようになった感じです。
xDebug 動かしてもまぁ大丈夫!
メールの設定
.env などに設定します。
ローカルのPostfixから投げるとか
MAILER_URL=smtp://localhost:25
認証+暗号化のSMTPサーバーに接続する
MAILER_URL=smtp://(接続先):(ポート)?encryption=ssl&auth_mode=login&username=(ユーザー名)&password=(パスワード)
コンソール
コマンドの確認
php bin/console list
パッケージだと動かない?
composer でインストールしている場合は問題ないのですが、ZIPのパッケージ版だと console コマンドが正しく動作しません。
GihHubGitHub から testsディレクトリを引っ張ってきて配置するのが早いかと。
キャッシュ消す
bin/console cache:clear --no-warmup
--no-warmup
オプションをつけないと、メモリ不足で落ちる。PHPに3GBくらい当てたけどダメなのであきらめた。
bin/console cache:clear --no-warmup --env=prod
--env=APP_ENV
で環境も指定できます。(キャッシュは環境ごとに用意されています)
全部のルートを確認
php bin/console debug:route
地味に便利だったので。自分で作ったわけではないので、ルーティングが一覧できると便利ですね。
ストアのプラグインが入らない…?
さて、なんかプラグイン入れてみよっと。ということでキーを登録したりなんなりして管理画面から入れてみるものの…入らない。
真っ赤で禍々しいエラー画面を見ると EC-CUBE のサイトから持ってくる packages.json がなんかパースできてない? っぽいようなエラーが出ています。
composer.json を見ると
"repositories": {
"eccube": {
"type": "composer",
"url": "https://package-api.ec-cube.net",
"options": {
"http": {
"header": ["X-ECCUBE-KEY: 1234cdef"]
}
}
}
}
あー。コイツにアクセスできねーのかな?
curl -sS https://package-api.ec-cube.net/packages.json \
-H 'X-ECCUBE-KEY: 1234cdef' | jq .
↓
{
"packages": {
"ec-cube/SSCsvUploadprice": {
"1.0.1": {
"name": "ec-cube/SSCsvUploadprice",
"version": "1.0.1",
"description": "価格のみCSVアップロードプラグイン for EC-CUBE4",
"type": "eccube-plugin",
"extra": {
"code": "SSCsvUploadprice",
"id": 1909
},
"dist": {
"type": "tar",
"url": "https://package-api.ec-cube.net/ec-cube/SSCsvUploadprice/1.0.1/SSCsvUploadprice-1.0.1.tgz"
}
}
},
"ec-cube/StockShow4": {
(以下略)
えー、見れるじゃん! jqでパースもできてるし!!
一部パッケージをアップデート
髭2号先生がググってくれまして…
cd /path/eccube_root
composer update symfony/flex --no-plugins --no-scripts
これで解決! Vagrant上でカード決済の試験などもできますね~。
以上、雑多なメモでした
まだあるのですが、ひとまず。
ECシステムはフルスクラッチで作ることもあるかもですが、ローカルにインストールして参考にするのも。「あー、なるほどスゲェ」「いやー、そうするかなぁ?」ってなる。ぜひどうぞ。