ECCUBE2.13.5の環境をDockerで
ECCUBE2.13.5の開発環境が必要になったので、Dockerで作ることができるか調査。
WSL2のubuntu18.04にDocker環境を作っていたので、そこに構築できるかどうか確かめる。
検索すると、Dockerのimageの作り方がいくつか見つかったので、そのうちの1つを使ってみる。
上記サイト記載の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から
moduleのbuildの参考サイト
「課題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のバージョンに起因するようだ。
解消方法の参考となるサイトはこれ
サイト記載の通りに変更するも、エラー内容は変わるがログインできないことに変わりなし。
結局、上記サイトに書いてくれているソースの該当箇所、SC_DB\DBFactory_MYSQL.phpの当該箇所の命令2行をコメントアウトすることで対応。エラーも出ず、管理者画面にログインできた。