BPS Webチームのebiです。あっと言う間に入社半年が過ぎてしまいました。
ほぼ未経験で入社しましたが、なんだかんだそれっぽい仕事もこなせているので程々の満足感です。
さて、未経験から仕事をしていくうえで何に困るって、ローカル環境を構築することだったりしました。ちょっとした改修をやるにしても、まずはそのサイトをローカル環境に再現しないと開発も進めようがないのですが、色々と経験不足なのでちょっと特殊なサイトとなると一苦労です。
今回はそうした中から、本番サーバ上にあるEC-CUBEサイトのローカル環境構築について取り上げて記事にしてみます。Dockerはおろかその他ターミナルのコマンドなんてまともに使えない人のための開発入門記事として、慣れないEC-CUBEサイトの開発に携わることになった人向けの記事として、役に立てば幸いです。
本来であればApacheやVirtualBoxの話から整理したいところですが、正直今もなんとなく使っている、かつ話が壮大になること不可避なので、小ネタとして完結できる記事にしました。
あとEC-CUBEでTechrachoの記事を検索しても記事がヒットしなかったということで、TechRacho初のEC-CUBEネタの記事を書くことにしたのです。
EC-CUBEについて
EC-CUBEは株式会社ロックオンの商標です
EC-CUBEとは、オープンソースのEC構築パッケージです。
要はWordPressみたいなもんですね。日本で開発され、使用されているのも日本中心なので、やや情報源が少ないのが玉に瑕です。加えてECサイト向けのパッケージですから、余計情報源が限られている気がします。
公式フォーラムがありますので、困ったらそちらに駆け込むのも一つの手でしょう。
また、EC-CUBEのバージョンによっても結構仕様が違ったりします。ネットで拾ってきた情報を試す時にはバージョンによる違いも気にする必要があります。
2016年10月現在の最新バージョンは3.0.11となっています。今回使用したバージョンは2.13.5です。
公式サイトを見てみると、EC-CUBEで構築したサイトの実例が数多く紹介されています。結構色んなサイトがあって面白いです。
ちなみにEC-CUBEではSmartyと言うphpのテンプレートエンジンが使われていて、まともに改修しようと思うと大分苦戦するのですが、その話はまた機会があれば……。
EC-Cubeをローカル環境で構築する
本番サーバのデータをコピーする
本題に入ります。僕の場合PCはWindowsですが、VirtualBox上のUbuntu14.04を動かしてLinux環境でやってます。あとデータベースにはMySQLを使用している想定ですが、PostgreSQLを使用している場合もあるはずですね。要領は同じだと思います。
本番サイトをローカル環境に再現するためには、当然のことながらまずは本番サーバにあるEC-CUBE等のファイル一式とデータベースが必要になります。
と聞くと、初心者的発想の持ち主としては、最悪ファイルはFTPで強引に入手して、データベースはphpMyAdminからエクスポートすればよくね?って思ってしまいますが、職業エンジニアとしては格好悪いですね。
幸い、僕の場合はインフラエンジニアのyamasitaさんからいただいたシェルを実行して一気にガガガっとやれました。感無量です。
以下、実行するシェルの概要です。rsyncの件は前回の記事を参考にしてください。
#!/bin/bash
# rsyncでサーバまるごとコピーする
set -e
cat < exc.txt
+ /home/
+ /home/target/
+ /home/target/**
- *
EOF
ssh target@server.ne.jp 'mysqldump -hmysql1234.db.sever.ne.jp -utargetuser -pserverpass --all-databases | gzip -c > /home/target/bk/targetdb.dump.gz'
rsync -avz --numeric-ids --delete --exclude-from=exc.txt target@server.ne.jp:/ ./root/
ファイルの方は前回同様にrsyncを使っていい感じに取ってきます。
データベースの方は、sshで対象となるリモート先を指定した後、''の間にリモート先で行うmysqldumpのコマンドを記すことで、rsyncの実行前にバックアップ用のファイルを作成できます。その後、rsyncで一緒にローカルに引き込んでいる感じですね。
今さらですが、SSHはSecure Shellの略。情報系の知識に疎かった時期はSSLと混同してた気がします。リモート先のシェルを安全に操作するためのもの、と理解すればもう間違えませんね。
データベースを再現する
今回はgzip形式でデータベースのデータを取得していますので、これをローカルのMySQLに再現します。
zcatコマンドで展開できるとのことだったので実行してみます。
zcat root/home/target/bk/targetdb.dump.gz | mysql -u username -ppassword targetdb
するとUnknown databaseと表示が出ました。先に復元先のデータベースを作成してあげないといけないようです。
ということで、復元先のデータベースを別途作成してから再度コマンドを実行すると、無事ローカル環境にデータベースも再現できました。
ローカル用に調整する
ローカル環境のApacheで表示するために適切な設定を反映します。ファイルの情報をローカル環境に合わせ少し書き換える必要があるので、それを忘れないようにすれば他に大きな注意点はありません。
data/config/config.phpに沢山defineの記述があります。これらのうち必要な情報をローカル環境に合わせて変更します。
// ローカルのApacheで使用したいURLに書き換えます。
define('HTTP_URL', 'http://localserver.ne.jp/');
define('HTTPS_URL', 'http://localserver.ne.jp/'); //HTTPSを使用しない場合はhttpにします。商品購入時に困ります。
// ローカルのDBを使うユーザー名。rootにします。
define('DB_USER', 'root');
// ローカルのDBのパスワードに変更します。
define('DB_PASSWORD', 'password');
// ローカルのDBのサーバー名。localhostにします。
define('DB_SERVER', 'localhost');
// DBの名前を指定。本番と同じ名前のDBを使うなら変更不要です。
define('DB_NAME', 'targetdb');
// HTTPSを使用しない場合はこれをFALSEに変更しておきます。変更しないと管理画面に入れず困ります。
define('ADMIN_FORCE_SSL', FALSE);
あとは、data/Smarty/templates_c/default辺りの編集用のパーミッションが必要になったので、該当するパスのパーミッションに書き込み権限を追加しておきました。
構築完了
僕の場合は、以上の手続きで本番サーバのEC-CUBEサイトをローカル環境に再現できました。あとはエディタで好き勝手いじっては、すぐにローカルで確認できます。ぶっ壊してもヘッチャラです。
なお、EC-CUBEのデバッグモードは管理画面のパラメーター設定からオンにできますが、管理画面にたどり着く前でもdata/cache/mtb_constants.phpからパラメーターを制御できます。
何か困ったことがあったら、デバッグモードをオンにしてその情報を頼りにすればなんとかなるはずです。
今回は以上です。
最後に
ローカル環境の構築に関しては今後も課題が山積みです。
目下のところ、サブドメイン型マルチサイトのWordPressをローカルで運用する方法、ローカル環境作成をもっと根本的に楽にするDockerへの入門等です。
このあたりも上手く乗り越えて、理解が進んだらまた記事にしようと思います。