Open1

ECCUBE2.13.5の環境をDockerで

Koichi IidaKoichi Iida

ECCUBE2.13.5の開発環境が必要になったので、Dockerで作ることができるか調査。
WSL2のubuntu18.04にDocker環境を作っていたので、そこに構築できるかどうか確かめる。

検索すると、Dockerのimageの作り方がいくつか見つかったので、そのうちの1つを使ってみる。
https://zenn.dev/nanasess/articles/ec-cube2-docker-image
を参考に作成。
上記サイト記載のGitのリポジトリからcloneする。
今回は2.13.5が欲しいので、docker-compose.ymlのimageの行のうち、コメントアウトされている行を有効にしてみる。
MySQLのほうを使うので、そちらの起動コマンドを実行する。
「課題1」
最初は起動直後にhttp://localhost:4430にアクセスしてApacheが500エラーを返すので、うまくいっていないように思えたが、ECCUBE自体のインストールプロセスが走っていたため、暫く待たないといけないということが分かる。
「課題2」
Terminalのほうでdocker-composeを使って起動するようにしていたが、VSCodeでWSLに接続し、docker-pluginをインストールして操作したほうがかなり便利だということが分かるので、そうしてみる。
便利ポイントは、container毎のlogを手軽に見ることができることと、eccubeのcontainerにshellをattachして操作できる。VSCodeから直接container内のファイルを編集できる。
「課題3」
eccube,mysql,mailcatcherのそれぞれのコンテナが起動して、Topページまで表示されるが、うまく管理画面にログインできない。eccube側のログを見るとmysql接続でエラーが出ているようだ。

[/admin/index.php] Fatal error(E_ERROR): Call to undefined method MDB2_Error::loadModule() on [/var/www/app/data/class/SC_Query.php(914)] from 172.24.0.1

コンテナ内には、phpのextensionとして、mysqliが入っているが、それが設定上使われていない様子。
config/config.phpを編集して、使えるようにしてようとトライするも、エラーが解消せず。
仕方がないので、デフォルトのmysql.soを使おうとするが、コンテナの中に含まれていない。
そのため、php5.4.45のソースをDLしてきた上で、ext/mysqlをコンテナ内の/usr/local/src以下に展開し、ビルド&インストールを行う。
phpのソースはGithubから
https://github.com/php/php-src/tree/php-5.4.45
moduleのbuildの参考サイト
https://yyuuiikk.org/entry/33

「課題4」
この状態で起動しても別のエラーが発生して管理画面にログインできない。

Fatal error(E_USER_ERROR): DB処理でエラーが発生しました。
SQL: [SET SESSION storage_engine = InnoDB]
MDB2 Error: unknown error
_doQuery: [Error message: Could not execute statement]
[Last executed query: PREPARE mdb2_statement_mysql_144f11063ecfed60394b5fc0346e45b8ccff830e5 FROM 'SET SESSION storage_engine = InnoDB']
[Native code: 1193]
[Native message: Unknown system variable 'storage_engine']

エラーメッセージで検索すると、MySQLのバージョンに起因するようだ。
解消方法の参考となるサイトはこれ
https://xiyuan.jp/php/85/
サイト記載の通りに変更するも、エラー内容は変わるがログインできないことに変わりなし。
結局、上記サイトに書いてくれているソースの該当箇所、SC_DB\DBFactory_MYSQL.phpの当該箇所の命令2行をコメントアウトすることで対応。エラーも出ず、管理者画面にログインできた。