EC-CUBEとインストール方法について
EC-CUBEについて調べる機会がありましたので、備忘録を兼ねてEC-CUBEのインストール手順をまとめておきます。
EC-CUBEとは
「EC-CUBE(イーシーキューブ)」は、株式会社ロックオンのEC構築パッケージをオープンソースで公開しているものです。ECとは「Electronic Commerce」の略でよくeコマースと呼ばれています。 つまりネットショップを開店させるためのパッケージソフトです。
環境について
インストール環境はMac OSX上にVitualBoxとVagrantを使って、仮想環境上にインストールしていきます。
- Mac OSX
- VirtualBox
- Vagrant
$ VBoxManage -v
5.1.10r112026
$ vagrant -v
Vagrant 2.0.2
仮想サーバ用OSのセットアップ
今回仮想サーバ用のOSとして選定したのはCentOSですので、仮想マシンにCentOSを追加していきます。
BOX追加
Vagrantbox.esからお目当てのCentOSを探して、URLをコピー、そのURLを使ってboxを追加します。
# ↓はどこのディレクトリで実行してもOK
$ vagrant box add centos7.1 https://github.com/XXXXX
# ↓は仮想サーバを起動させたいディレクトリで実行
$ vagrant init
仮想サーバ起動
BOXを追加したら仮想サーバを起動します
# 初期化を行います。(Vagrantfileを生成)
$ vagrant init CentOS7.1
# 起動
$ vagrant up
# 接続
$ vagrant ssh
[vagrant@localhost ~]$
EC-CUBEのセットアップ前準備
EC-CUBEを動かすために必要なものをインストールしておきます。 (いわゆるLAMP環境ですね。Linux、Apache、MySQL、PHP)
Apache
ネットショップですので、SSL接続ができるようにする必要があります。 そこで、apacheと同時にopenSSL mod_sslをインストールします。
$ yum -y install httpd openssl mod_ssl
そのまま実行すると「root権限が必要です」と表示されるので、先頭に「sudo」をつけて実行します。毎回「sudo」をつけるのが面倒であれば「sudo su -」で常時root権限で実行できます。
インストールが完了したら動作確認のために、Apacheを起動してみます。
$ systemctl start httpd.service
これで、apacheでWebサーバが起動したので、ブラウザでアクセス行います。
※Vagrantを起動しているホストからブラウザでアクセスするために、Vagrantfileを修正する必要があります。デフォルトの設定だと31行目あたりの
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
上記をコメントアウトすると、guestOS(CentOS)の80番ポートをホストOSの8080番ポートにポートフォワードしてくれます。 さらに私の環境ではCentOSのファイヤーウォールで接続ができなかったので、無効化しました。
$ systemctl stop firewalld
本番環境でファイヤーウォールの設定が必要ならば下記コマンドでhttpアクセスを許可します。
$ firewall-cmd --permanent --zone=public --add-service=http
SSL接続
今回は検証用なのでプライベート認証局(いわゆるオレオレ認証局)を構築しようと思います。
前準備
OpenSSLで提供される「CAスクリプト」ではデフォルトでCA証明書の有効期限が3年に設定されています。 (ちなみにCA証明書とは、Certification Authorityの略で認証局という意味です)
# 念の為元のファイルをコピー(-pオプションは元の属性を保持)
$ cp -p /etc/pki/tls/misc/CA /etc/pki/tls/misc/CA.original
$ vim /etc/pki/tls/misc/CA
< CADAYS="-days 1095" # 3 years --- > if [ -z "$CADAYS" ] ; then CADAYS="-days 1095" ; fi # 3 year
> if [ -z "$CADAYS" ] ; then CADAYS="-days 1095" ; fi # 3 year
証明書を作成する際に、同じようなユーザ情報のの問い合わせがあります。そこで、デフォルトでOpenSSLの設定ファイルに記述しておくと、手間が省けオペミスを防げます。
$ cp -p /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.original
$ vim /etc/pki/tls/openssl.cnf
# 変更箇所のみ
> countryName_default = JP
> stateOrProvinceName_default = Tokyo
> localityName_default = Koto
> 0.organizationName_default = memoran.net
OpenSSLの設定ファイルを認証局用、サーバ用、クライアント用を準備します。
$ cd /etc/pki/tls/
$ cp -p openssl.cnf openssl-ca.cnf
$ cp -p openssl.cnf openssl-server.cnf
$ cp -p openssl.cnf openssl-client.cnf
CA証明書の作成
まずは、CA証明書を発行するための設定ファイルを編集します。
$ vim /etc/pki/tls/openssl-ca.cnf
> basicConstraints=CA:TRUE # CA証明書を発行
> nsCertType = sslCA, emailCA # ssl、とemail認証局とします
次にプライベート認証局のCA証明書の作成を行います。 起動前にコマンドラインから変数を設定しています。
CADAYS="-days3650" 認証局の有効期限:10年
SSLEAY_CONFIG="-config /etc/pki/tls/openssl_ca.cnf" 使用する設定ファイルを指定
$ CADAYS="-days 3650" SSLEAY_CONFIG="-config /etc/pki/tls/openssl_ca.cnf" /etc/pki/tls/misc/CA -newca
CA certificate filename (or enter to create)
Making CA certificate ...
Generating a 2048 bit RSA private key
..........................................................................................................................................................+++
................................+++
writing new private key to '/etc/pki/CA/private/./cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Koto]:
Organization Name (eg, company) [memoran.net]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:Private CA
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/pki/tls/openssl-ca.cnf
Enter pass phrase for /etc/pki/CA/private/./cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
d9:db:51:0e:a8:9b:e6:1d
Validity
Not Before: Aug 11 07:14:56 2018 GMT
Not After : Aug 8 07:14:56 2028 GMT
Subject:
countryName = JP
stateOrProvinceName = Tokyo
organizationName = memoran.net
commonName = Private CA
X509v3 extensions:
X509v3 Subject Key Identifier:
B0:BC:2C:F5:AA:DE:89:7A:B0:80:76:F6:0A:C4:A4:69:BC:1D:41:2B
X509v3 Authority Key Identifier:
keyid:B0:BC:2C:F5:AA:DE:89:7A:B0:80:76:F6:0A:C4:A4:69:BC:1D:41:2B
X509v3 Basic Constraints:
CA:TRUE
Certificate is to be certified until Aug 8 07:14:56 2028 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
もしエラーを出してしまって、もう一度行いたい場合は「/etc/pki/CA」のディレクトリを削除するとできます。
無事に実行を終えると認証局用の各ファイルが作成されます。
$ ls -1 /etc/pki/CA/*
/etc/pki/CA/cacert.pem #CA証明書
/etc/pki/CA/careq.pem #CAのCSR(CAの自己署名する前の公開鍵))
/etc/pki/CA/index.txt #CA管理ファイル(証明書管理情報)
/etc/pki/CA/index.txt.attr #CA管理ファイル(属性)
/etc/pki/CA/index.txt.old #CA管理ファイル(バックアップ)
/etc/pki/CA/serial #シリアル番号ファイル
/etc/pki/CA/certs: #証明書ディレクトリ
/etc/pki/CA/crl: #証明書失効ディレクトリ
/etc/pki/CA/newcerts: #新しい証明書ディレクトリ
/etc/pki/CA/private: #秘密鍵ディレクトリ
サーバ用証明書の作成
認証局の証明書、鍵が作成できたら次にサーバ用の証明を作成します。 CA証明書の作成と同様に、サーバ用設定ファイル(openssl-server.cnf)の編集を行います。
$ vim /etc/pki/tls/openssl-server.cnf
> nsCertType = server #サーバー証明書用
編集を終えたら、サーバ用証明書の作成に移ります。
DAYS="-days 3650" SSLEAY_CONFIG="-config /etc/pki/tls/openssl-server.cnf" /etc/pki/tls/misc/CA -newreqreturn
DAYS="-days 3650" SSLEAY_CONFIG="-config /etc/pki/tls/openssl-server.cnf" /etc/pki/tls/misc/CA -newreqreturn
ssl-server.cnf" /etc/pki/tls/misc/CA -newreq
Generating a 2048 bit RSA private key
...........................+++
.......................................................................+++
writing new private key to 'newkey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Koto]:
Organization Name (eg, company) [memoran.net]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:memoran.net
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Request is in newreq.pem, private key is in newkey.pem
作成されたファイルを確認
ls -1
newkey.pem #サイト用秘密鍵
newreq.pem #サイト用公開鍵-署名なし(CSR)
サーバ証明書の発行
SSLEAY_CONFIG="-config /etc/pki/tls/openssl-server.cnf 使用する設定ファイルを指定
SSLEAY_CONFIG="-config /etc/pki/tls/openssl-server.cnf" /etc/pki/tls/misc/CA -sign
Using configuration from /etc/pki/tls/openssl-server.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
d9:db:51:0e:a8:9b:e6:1e
Validity
Not Before: Aug 11 22:20:27 2018 GMT
Not After : Aug 11 22:20:27 2019 GMT
Subject:
countryName = JP
stateOrProvinceName = Tokyo
localityName = Koto
organizationName = memoran.net
commonName = memoran.net
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Server
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
ED:...(省略)
X509v3 Authority Key Identifier:
keyid:B0:...(省略)
Certificate is to be certified until Aug 11 22:20:27 2019 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
d9:db:51:0e:a8:9b:e6:1e
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=JP, ST=Tokyo, O=memoran.net, CN=Private CA
Validity
Not Before: Aug 11 22:20:27 2018 GMT
Not After : Aug 11 22:20:27 2019 GMT
Subject: C=JP, ST=Tokyo, L=Koto, O=memoran.net, CN=memoran.net
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:d9:0e:a2:4c:9f:f2:58:e8:c6:1a:9e:e2:c9:1b:
...(省略)
bb:03
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Server
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
ED:...(省略)
X509v3 Authority Key Identifier:
keyid:B0:...(省略)
Signature Algorithm: sha256WithRSAEncryption
b3:...(省略)
-----BEGIN CERTIFICATE-----
...(省略)
-----END CERTIFICATE----
Signed certificate is in newcert.pem
apacheのSSL設定
前準備が長かったですが、やっとSSLの設定に入ります。 apacheのSSL関連の設定は全て/etc/httpd/conf.d/ssl.confで行うことになっています。 編集箇所のみ抜粋しています。
> DocumentRoot "/var/www/html" #コメントを外す
> ServerName memoran.net:443 #コメントを外す
> SSLCertificateFile /etc/pki/tls/newcert.pem # サーバー証明書のパスを指定
> SSLCertificateKeyFile /etc/pki/tls/newkey.pem # サーバー秘密鍵のパスを指定
最低限の項目のみ設定しています。
- DocumentRoot:ドキュメントルート
- ServerName :サーバー名、ポート番号
- SSLCertificateFile:サーバー証明書
- SSLCertificateKeyFile:サーバー秘密鍵
私の環境ではまたしてもfirewalldの影響で接続できなかったので、firewallの設定を変更しました。 (停止またはhttpsのポートを空けます)
# firewallの停止
$ systemctl stop firewalld
# firewallのポートを開ける
$ firewall-cmd --permanent --zone=public --add-service=https
これでapacheを再起動してアクセスしてみるとhttps表示ができるはずです。
MariaDBインストール
さぁApacheの準備が終わりました。 続いて、CentOS7ではMariaDBというデータベースが標準となっているみたいなので、MariaDBを入れていきます。 MariaDBはmysqlの派生バージョンで、mysqlと高い互換性があるみたいです。
$ yum -y install mariadb mariadb-server
...
$ mysql --version
mysql Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1
設定ファイルを編集し文字コードをutf8に設定する。
$ vim /etc/my.cnf
# add 文字コード設定
[mysqld]
character-set-server=utf8 #追加
自動起動を有効化して、起動します。
$ systemctl enable mariadb.service
$ systemctl start mariadb.service
私の環境では上記のコマンドを実行してもエラーでMariaDBが起動できなかったので、一度yum remove mariadb
でインストールしたMariaDBをアンインストールしてからもう一度インストールし直すと起動できました。
続けて、初期設定を行います。
初期設定を行う際に私の環境ではERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
というエラーが表示されたので、下記のような対応を行いました。
$ touch /var/lib/mysql/mysql.sock #ファイル作成
$ chown mysql:mysql /var/lib/mysql/mysql.sock #所有者変更
$ ls -l /var/lib/mysql/ #変更確認
$ systemctl restart mariadb
初期設定を開始します。
$ mysql_secure_installation
# インストール直後はrootパスワード空白なのでそのままenter
# その後の質問(anonymousユーザ削除など)は全て「y」でいいと思います
その後に、管理者パスワード設定、データベース作成、ユーザ作成を行います。
$ mysql -u root -p #ログイン
$ set password for root@localhost=password('XXXXX'); #ルートパスワード変更
$ CREATE USER hoge@'localhost' IDENTIFIED BY 'hogehoge'; #新規ユーザ・パスワード追加
$ CREATE DATABASE eccube; #データベース作成
$ GRANT ALL ON eccube.* to hoge; #権限付与
$ FLUSH PRIVILEGES; #最新に更新
DBのことについて詳しくないので、シングルクォートの位置などおかしいかもしれません。違うホストの同じユーザ名を作ってしまってました。
phpインストール
次にphpのインストール作業に入ります。
EC-CUBEのソフトウェア要件に必須PHPライブラリが記載されていますので、それを参考にインストールします。
$ yum install php php-mysql php-phar php-mbstring php-zlib php-ctype php-session php-json php-xml php-libxml php-openssl php-zip php-curl php-fileinfo
phpの動作を確認します。
$ systemctl restart httpd.service
$ cd /var/www/html
$ echo '<?php echo phpinfo(); ?>' > info.php
以上を実行して、ブラウザでhttp://localhost:8080/php.infoにアクセスするとphp情報ページが表示されます。
EC-CUBEインストール
いよいよEC-CUBE本体のインストール作業に移ります。
まずEC-CUBEの本体をダウンロードします。最新版はEC-CUBEのサイトにてメンバー登録をする必要があるので登録を行いました。(もしかしたら最新版もメンバー登録不要かも?)
最新でなくてもいい場合はhttp://downloads.ec-cube.net/src/eccube-3.0.7.zip
ここなどからダウンロードできるみたいです。
※2018年8月14日の最新は3.0.16でした。
$ yum install wget
$ wget http://downloads.ec-cube.net/src/eccube-3.0.16.tar.gz
ダウンロードが完了したら、解凍して配置します。(今回はtar.gzファイルの例で行います。)
$ cd /var/www/
$ mv html html_org #解凍ファイルにhtmlディレクトリがあるのでバックアップしています。
$ tar xfz eccube-3.0.16.tar.gz
$ mv eccube-3.0.16/* . #解凍したディレクトリを/var/wwwに移動します。
これでブラウザからルートディレクトリに接続するとEC-CUBEのセットアップ画面に移ります。
セットアップ
ここからはブラウザ上で作業が進みます。
- 権限チェック
- サイトの設定
- 店名
- メールアドレス
- ログインIDなど...
- データベースの設定
- データベースの初期化
- インストール完了
上記セットアップ完了後、管理画面へのリンクが表示されますが、私はそれをクリックしても404エラーページが表示されました。
そこでネットで調べたところ、https://192.168.33.10/index.php/hope(管理画面のURL)
のように途中にindex.php
を挟むと管理画面が表示されるようになりました。
完了!
以上でEC-CUBEのインストール手順が完了しました!一から自分で環境構築すると凄い手間や時間がかかりました。しかしLAMP環境構築の勉強にもなったので個人的に収穫はあったと思います。
今だとレンタルサーバなどで簡略化されてインストールできるものもあるみたいなので、そちらのほうが楽かもしれませんね。
インストール作業中に見つけたのですが、EC-CUBEは現在の3.xのバージョンから4.xのバージョンのリリースを予定しているみたいで、GitHubでベータ版を公開しているみたいです。また機会がありましたら4.x系のインストールにも挑戦してみたいと思います。