EC-CUBEサイトの複製をデータベースのdumpでやってみた

EC-CUBEサイトの複製をデータベースのdumpでやってみた
Page content

VMをコピーすれば簡単だけどもあえて

テスト環境のEC-CUBEサイトを複製して、同じEC-CUBEサイトをもう一つ構築する必要が生じた。サイト構築の方法としては、サーバ (仮想マシン) のイメージを丸ごと複製する方法をまず思いつくし、新サーバにEC-CUBEを新規導入した後、EC-CUBEのデータベースを複製する方法もありえるはず。今回は初めての機会として後者の方法でやってみた。扱う環境は次の通り。

項目複製元複製先
OSUbuntu 22.04Ubuntu 22.04
EC-CUBE4.2.14.2.1 (※)
データベースPostgreSQL 14.10PostgreSQL 14.10
特記事項商品登録を多少行っただけの状態。プラグインは導入無し。Web APIでGraphQLを利用している。
  • (※) 記事執筆時点でのEC-CUBE最新版は4.2.3。複製元が4.2.1で複製先が4.2.3という組み合わせの場合、今回行った複製方法のみでは、複製先のEC-CUBEのインストーラー実行途中にエラーが表示されて進めなくなる。ログによると双方のデータベース構造に違いがあるためのようであった。[2024-01-26]

Step-1. 複製元EC-CUBEでの作業

  1. PostgreSQLのデータをdumpしてファイル化する
    $ pg_dumpall -h localhost -U <DB_USERNAME> --no-role-passwords -f <DUMPFILE.sql>
    
  2. dumpファイルを複製先サーバへ転送する

Step-2. 複製先EC-CUBEでの作業

作業で楽をするために、拙作のansible-playbook「EC-CUBE4の公式パッケージをUbuntu環境に導入する時短ansible-playbook 〜PostgreSQL/Nginx/Let’s EncryptのSSL証明書とともに〜」 (以下、ec-cube4_installerと表記) を用いている。

  1. PostgreSQLのセットアップを行う (必要があればセットアップ前に初期化も行っておく)
  2. PostgreSQLへ複製元のdumpファイルを流し込む
    $ psql -h localhost -U <DB_USERNAME> -d <DB_NAME> -f <DUMPFILE.sql>
    
  3. EC-CUBEのインストールを行う (途中の「データベースの初期化を行わない」にはチェックを入れて (ONにして) 進める)
  4. インストーラーの終盤にてエラーが発生してEC-CUBE管理画面へ遷移できない (ログには次のエラーが出ていた) 時は、下記小ネタのキャッシュクリアコマンドを実行する
    Unable to generate a URL for the named route \"admin_api_oauth\"
    
  5. EC-CUBE管理画面へ遷移できたら、必ず最初に、管理者パスワードの変更を実施すること!
    • データベースの複製のみでは管理者認証情報はうまく継承されないようなので、ここでパスワード変更を行うことによって正規の情報を上書きするようなイメージである
  6. EC-CUBEが、商品画像の表示以外の面では問題なく使用できることを確認する
  7. 商品画像も複製するため、複製元の <EC-CUBEディレクトリ>/html/upload/save_image/ 以下のファイルを複製先の同じディレクトリに保存する

小ネタ

Symfonyのキャッシュクリア

$ <EC-CUBEディレクトリ>/bin/console cache:clear --no-warmup

## 必要に応じて管理者権限で
$ sudo <EC-CUBEディレクトリ>/bin/console cache:clear --no-warmup

EC-CUBEのログの確認

EC-CUBEのログファイルは <EC-CUBEディレクトリ>/var/log/ 以下に保存されるので、状況を詳細調査する場合にはここを参照すること。

参考リンク