こんにちは、開発部の千葉です。 さっそくですが、EC-CUBEはご存知ですか?
PHPで開発された、国産のオープンソースECサイト用CMSで、2006年に正式版をリリースされてから 3,500以上のECサイトで利用されている、とても便利なパッケージです。
今回、私が参加しているプロジェクトで、EC-CUBEを構築・カスタマイズすることとなりました。 AWS+EC-CUBEの環境は、セミナー等で良く事例として紹介されていたので 勝手ながら環境構築手順的な情報は多々あるものだと思っていました。
しかし、実際のところは私が求めていた様な情報は多くはなく 存在しても、実運用までは想定されておらず『インストールした』で終わってしまっていました。
そこで、無いなら作ろうと思い立ち、本投稿に至りました。 AWSを上手に活用して、以下の様な環境を構築したいと考えています。
- ELB+CloudWatch+AutoScalingによる、負荷分散+冗長化
- RDS+MultiAZによる、データベース可用性の確保
- S3に画像ファイルを設置することによる、スケールアウトの簡易化
- SESの利用による、メール配信の信頼性を確保
全部やろうとすると、とても長い記事になってしまうので数回に分けてポストしようと思います。 (何回になるかな。。。) 第1回目の今回は『インストール編』とし、以下のシングル構成でEC-CUBEを動作させてみます。
1. EC2インスタンスの起動
今回は『Basic Amazon Linux AMI 2011.09(64bit)』を利用しました。 EC2インスタンス起動の手順については、割愛させて頂きます。
以降のステップでは、ec2-userにてssh接続した後の処理を記載します。
2. タイムゾーンの設定
$ sudo cp -i /usr/share/zoneinfo/Japan /etc/localtime
3. RPMパッケージのインストール
$ sudo yum install -y php httpd php-mbstring mysql php-mysql php-gd
4. PHPの設定
$ sudo vim /etc/php.ini
『date.timezone』の設定値を変更します。 【編集前】
953 [Date]
954 ; Defines the default timezone used by the date functions
955 ; http://www.php.net/manual/en/datetime.configuration.php
956 ;date.timezone =
957
958 ; http://www.php.net/manual/en/datetime.configuration.php
【編集後】
953 [Date]
954 ; Defines the default timezone used by the date functions
955 ; http://www.php.net/manual/en/datetime.configuration.php
956 date.timezone = Asia/Tokyo
957
958 ; http://www.php.net/manual/en/datetime.configuration.php
5. RDSの設定
※{}内は、適切な値を入力してください。 RDSインスタンス起動の手順については、割愛させて頂きます。 (RDS:DB Security Groups:Descriptionにて、対象EC2インスタンスからの接続を許可してください)
AWSアカウント認証設定ファイルの作成・編集
$ sudo cp /opt/aws/credential-file-path.template /opt/aws/credential-file-path
$ sudo vim /opt/aws/credential-file-path
1 AWSAccessKeyId={Write your AWS access ID}
2 AWSSecretKey={Write your AWS secret key}
環境変数の追加・読込
$ vim ~/.bashrc
8 # User specific aliases and functions
9
10 export JAVA_HOME=/usr/lib/jvm/jre
11 export AWS_HOME=/opt/aws
12 export AWS_RDS_HOME=$AWS_HOME/apitools/rds
13 export AWS_CREDENTIAL_FILE=$AWS_HOME/credential-file-path
14 export EC2_REGION=ap-northeast-1
15 export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$AWS_RDS_HOME/bin
$ source ~/.bashrc
RDSパラメータの変更 ※{}内は、RDS:DB Parameter Groupを指定してください。
$ rds-modify-db-parameter-group {DB Parameter Group} -p "name=character_set_client, value=utf8, method=immediate"
$ rds-modify-db-parameter-group {DB Parameter Group} -p "name=character_set_connection, value=utf8, method=immediate"
$ rds-modify-db-parameter-group {DB Parameter Group} -p "name=character_set_database, value=utf8, method=immediate"
$ rds-modify-db-parameter-group {DB Parameter Group} -p "name=character_set_filesystem, value=utf8, method=immediate"
$ rds-modify-db-parameter-group {DB Parameter Group} -p "name=character_set_results, value=utf8, method=immediate"
$ rds-modify-db-parameter-group {DB Parameter Group} -p "name=character_set_server, value=utf8, method=immediate"
6. データベースの作成
※{}内は、適切な値を入力してください。
$ mysql -h eccube_db.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -u {db_user} -p
mysql> create database eccube_db default character set utf8;
7. EC-CUBEの設置
$ sudo wget http://downloads.ec-cube.net/src/eccube-2.11.5.tar.gz
$ sudo tar xvaf eccube-2.11.5.tar.gz
$ sudo mv eccube-2.11.5 /home/eccube
httpd.confの編集・起動
$ sudo vim /etc/httpd/conf/httpd.conf
【編集前】
291 # symbolic links and aliases may be used to point to other locations.
292 #
293 DocumentRoot "/var/www/html"
294
295 #
296 # Each directory to which Apache has access can be configured with respect
【編集後】
291 # symbolic links and aliases may be used to point to other locations.
292 #
293 DocumentRoot "/home/eccube/html"
294
295 #
296 # Each directory to which Apache has access can be configured with respect
$ sudo chkconfig httpd on
$ sudo /etc/init.d/httpd restart
8. EC-CUBEのインストール
※{}内は、適切な値を入力してください。 http://{ec2:Public DNS}/install/ にアクセスし、インストール画面を表示します。
以下、画面キャプチャを記載します。
step1 | step2 |
---|---|
step3 | step4 |
step5 | step6 |
step7 | step8 |
step9 | step10 |
9. 接続してみる
※{}内は、適切な値を入力してください。
10. installディレクトリの削除
installディレクトリの削除
$ sudo rm -rf /home/eccube/html/install
11. RDS:MySQLのタイムゾーンについて
RDSでは、MySQLのタイムゾーンがUTCとなっており、変更不可パラメータとなっています。 Webサーバのタイムスタンプを利用する様に実装していれば問題ないのですが EC-CUBEでの実装の多くは、タイムスタンプにMySQLの『CURRENT_TIMESTAMP』を利用しています。
この問題の解決策として、少し面倒ですがセッション確立時に『SET time_zone = '+9:00';』を発行することとしました。 具体的な修正箇所は以下のとおりです。
$ vim /home/eccube/data/module/MDB2/Driver/mysql.php
【編集前】
576 if (PEAR::isError($connection)) {
577 return $connection;
578 }
579
580 $this->connection = $connection;
581 $this->connected_dsn = $this->dsn;
582 $this->connected_database_name = '';
【編集後】
576 if (PEAR::isError($connection)) {
577 return $connection;
578 }
579
580 $this->_doQuery("SET time_zone = '+9:00'", false, $connection);
581 $this->connection = $connection;
582 $this->connected_dsn = $this->dsn;
583 $this->connected_database_name = '';
最後に
以上で、EC-CUBEの動作環境は構築できました。 RDS:MySQLのパラメータ設定、タイムゾーンの設定箇所を除けば、AWS以外の環境で構築するのと変わりはなさそうです。
次回は『S3に画像ファイルを設置する』を書きたいと思います。