はじめに
EC-CUBE は、オープンソースの「ネットショップ構築システム」です。
日本発の製品で、株式会社ロックオン によって開発されています。
低い学習コストと高い機能性およびカスタマイズ性を兼ね備えている魅力的なソフトウェアです。
PHP の Symfony をベースとする Silex フレームワークで構築されています。テンプレートエンジンとして Twig が、また Alt-CSS として Sass が採用されています。
OpenBSD は Unix 系 OS の一つで、こちらもオープンソースのシステムです。
オペレーティングシステムとしてはセキュリティの高さで有名です。
それに加えて、OpenSSH / LibreSSL / OpenSMTPD / PF 等の堅牢なソフトウェアの開発を行っているプロジェクトでもあり、その成果は他の OS からも取り入れられています。
クリーンなソフトウェアライセンスの追求や、半年ごとの定期的な OS リリースの継続を実現している、優れたプロジェクトでもあります。
今回、公式チュートリアル を参考にしながら EC-CUBE を OpenBSD にインストールしました。
その手順をご紹介します。
環境
EC-CUBE のインストール
凡例
-
#
で始まる行のコマンドは、スーパーユーザー権限で、実行します。 -
$
で始まる行のコマンドは、一般ユーザー権限で、実行します。 - %word% のような
%
囲みの言葉は、環境によって変動する値を、抽象的な言葉で表しています。 - eccube-4.?.? の
?
は、任意の 1 文字を表します。本記事の場合、具体的には eccube-4.0.0 です。
前提
Web サーバー / PHP 7.2 の PHP-FPM / MariaDB 環境が構築されている前提です。
(ご参考) * いずれも参照記事は英語です。
- Web サーバー
# rcctl enable httpd
で OpenBSD httpd のデーモンを有効化します:
Web インストーラーでパスワードを入力する場面があるため、本記事は HTTPS 通信を行う前提で記述します。
Let's Encrypt で発行した SSL/TLS 証明書を httpd で指定することができます:
Let's Encrypt: Certbot For OpenBSD's httpd
nabbisen ・ Dec 14 '18
- PHP-FPM
php
パッケージ( php-7.2
)追加後に、ini ファイルの設定とデーモンの有効化を行うことで環境構築を行います:
- MariaDB
mariadb-server
パッケージ追加後に、デーモンの有効化と初期化コマンドを実行することで環境構築を行います:
その後に、EC-CUBE で使用するデータベースとユーザーを CREATE しておく必要があります。
インストール手順
#1. アプリケーションファイルのダウンロードと配置を行う
公式サイトの 無料ダウンロード から最新版の zip ファイルを取得します。
# pkg_add unzip
$ # zip ファイルをダウンロードする
$ wget %eccube-zip%
# # Web サーバーのルートディレクトリに配置する
# mv %eccube-zip% /var/www/%eccube-parent-dir%
$ cd /var/www/%eccube-parent-dir%
# unzip %eccube-zip%
# # update vendor
# cd eccube-4.?.?
# chown -R %dev-user%:www vendor
# php-7.2 /usr/local/libexec/composer.phar install
# php-7.2 /usr/local/libexec/composer.phar update
# cd ../
# # ファイルおよびディレクトリの所有者を httpd 用に変更する
# chown -R www:www eccube-4.?.?
# # in order to develop plugins
# chown -R %dev-user%:www eccube-4.?.?/app
# chown -R %dev-user%:www eccube-4.?.?/var
#2. 実行環境を準備する
システム要件 に従って、必要なパッケージをシステムにインストールします。
# # PHP Composer (PHP 7.0 ver.)
# pkg_add composer
# # PHP 拡張モジュール
# pkg_add php-intl php-pdo_mysql
* 補足: 開発環境で SQLite3 を使用する場合は、php-pdo_mysql
の代わりに php-pdo_sqlite
をインストールします。(本番環境では推奨されていません!)
PHP の ini ファイル を編集して必要な extension を有効にします。
# nvim /etc/php-7.2.ini
extension=curl
extension=fileinfo
extension=intl
extension=mbstring
; ...
extension=mysqli
extension=pdo_mysql
;extension=pdo_sqlite
* 補足: SQLite3 を使用する場合は、pdo_mysql
の代わりに pdo_sqlite
のコメントを外します。
mysqli
の有効化については、代わりの方法もあります。
PHP 7.2 インストール時に、いくつかの extension 用の conf ファイルが、/etc/php-7.2.sample
ディレクトリに作成されます。
そちらを使用して mysqli
を有効化することもできます。
# ln -sf /etc/php-7.2.sample/mysqli.conf /etc/php-7.2/`
php72_fpm
を再起動します。
# rcctl restart php72_fpm
#3. Web サーバーを起動する
/etc/httpd.conf
に EC-CUBE サイト用の定義を追加します。
block
定義や pass
定義の一部は EC-CUBE アプリケーションファイル内に複数存在する .htaccess
の内容をもとにしています。
server "%host%" {
listen on $ext_addr port 80
block return 301 "https://$SERVER_NAME$REQUEST_URI"
}
server "%host%" {
listen on $ext_addr tls port 443
tls {
certificate "/etc/letsencrypt/live/%host%/fullchain.
pem"
key "/etc/letsencrypt/live/%host%/privkey.pem"
}
root "/%eccube-parent-dir%/eccube-4.?.?"
directory auto index
location ".git" { block }
location "/composer" { block }
location "/COPYING" { block }
location "/.env" { block }
location "/.maintenance" { block } # (後日) 4.0.1 アップデート時に追加した行
location "/Procfile" { block }
location "/app.json" { block }
location "/gulpfile.js" { block }
location "/package.json" { block }
location "/package-lock.json" { block }
location "web.config" { block }
location "/src/*" { block }
location "/bin/*" { block }
location "/vendor/tecnickcom/tcpdf/tools/*" { block }
location "/app/*" { block }
location "*.gif" { pass }
location "*.png" { pass }
location "*.jpg" { pass }
location "*.jpeg" { pass }
location "*.css" { pass }
location "*.ico" { pass }
location "*.js" { pass }
location "*.svg" { pass }
location "*.map" { pass }
location "/" {
block return 301 "https://$SERVER_NAME/index.php/"
}
location "/*.php*" {
fastcgi socket "/run/php-fpm.sock"
}
location match "^/(.*)$" {
fastcgi socket "/run/php-fpm.sock"
request rewrite "/index.php/%1"
}
}
* 補足: ただインストーラーを動かすだけの場合、以下の定義で十分でした。ただし通常運用には使えません。HTTPS 通信を行う場合は https://... と明示的に URL を指定する必要があります。且つ、インストール後のトップページの URL ラウティングに問題が残っています。
server "%host%" {
listen on $ext_addr port 80
listen on $ext_addr tls port 443
tls {
certificate "/etc/letsencrypt/live/%host%/fullchain.pem"
key "/etc/letsencrypt/live/%host%/privkey.pem"
}
root "/%eccube-parent-dir%/eccube-4.?.?"
location match "/html/.*" {
directory index index.html
}
# todo: location "/index.php/" => show /index.php
location match "(/?|/index.php/?)" {
directory index index.php
}
location match "/index.php/.+" {
fastcgi socket "/run/php-fpm.sock"
}
location "*" {
block return 302 "https://$HTTP_HOST/index.php$REQUEST_URI"
}
}
httpd の chroot
によって etc ディレクトリが実際上 /var/www/etc
になることに対応します:
# mkdir /var/www/etc
# cp /etc/{hosts,resolv.conf,localtime} /var/www/etc/
httpd を再起動します。
# rcctl restart httpd
Web インストーラーを用いて EC-CUBE をインストールする準備ができました。
#4. Web インストーラーで EC-CUBE をインストールする
httpd で指定したホストのルートディレクトリ(https://%host%/)にアクセスします。
Web インストーラーが表示されるので、画面に従って進めて行きます。
アクセス権限のチェック:
サイトの設定:
データベースの設定:
* 補足: EC-CUBE 4.0.0 の場合、データーベースユーザーのパスワードに "#" は含めないようにする必要がありました。 4.0.1 で解消されています。
データベースの初期化:
完了画面が表示されます:
管理画面へのログイン画面が表示されます。
「サイトの設定」で登録した管理者情報を用いてログインできます。
インストール完了後は、ホストのルートディレクトリ(https://%host%/)にアクセスすると、ショッピングサイトのトップページが表示されます。
以上です。
お読み頂きありがとうございました。
* 追記
後日、4.0.1 にアップデートしました: