Memorandum

普段の生活の覚え書き。主に技術録

EC-CUBEとインストール方法について

EC-CUBEについて調べる機会がありましたので、備忘録を兼ねてEC-CUBEのインストール手順をまとめておきます。

EC-CUBEとは

EC-CUBE(イーシーキューブ)」は、株式会社ロックオンのEC構築パッケージをオープンソースで公開しているものです。ECとは「Electronic Commerce」の略でよくeコマースと呼ばれています。 つまりネットショップを開店させるためのパッケージソフトです。

環境について

インストール環境はMac OSX上にVitualBoxと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環境ですね。LinuxApacheMySQLPHP

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

apacheSSL設定

前準備が長かったですが、やっとSSLの設定に入ります。 apacheSSL関連の設定は全て/etc/httpd/conf.d/ssl.confで行うことになっています。 編集箇所のみ抜粋しています。

/etc/httpd/conf.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を入れていきます。 MariaDBmysqlの派生バージョンで、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のセットアップ画面に移ります。

セットアップ

ここからはブラウザ上で作業が進みます。

  1. 権限チェック
  2. サイトの設定
    1. 店名
    2. メールアドレス
    3. ログインIDなど...
  3. データベースの設定
  4. データベースの初期化
  5. インストール完了

上記セットアップ完了後、管理画面へのリンクが表示されますが、私はそれをクリックしても404エラーページが表示されました。 そこでネットで調べたところ、https://192.168.33.10/index.php/hope(管理画面のURL)のように途中にindex.phpを挟むと管理画面が表示されるようになりました。

完了!

以上でEC-CUBEのインストール手順が完了しました!一から自分で環境構築すると凄い手間や時間がかかりました。しかしLAMP環境構築の勉強にもなったので個人的に収穫はあったと思います。

今だとレンタルサーバなどで簡略化されてインストールできるものもあるみたいなので、そちらのほうが楽かもしれませんね。

インストール作業中に見つけたのですが、EC-CUBEは現在の3.xのバージョンから4.xのバージョンのリリースを予定しているみたいで、GitHubでベータ版を公開しているみたいです。また機会がありましたら4.x系のインストールにも挑戦してみたいと思います。