EC-CUBE 4 を OpenBSD 6.4 にインストールする

nabbisen - Dec 21 '18 - - Dev Community

はじめに

EC-CUBE は、オープンソースの「ネットショップ構築システム」です。
日本発の製品で、株式会社ロックオン によって開発されています。
低い学習コストと高い機能性およびカスタマイズ性を兼ね備えている魅力的なソフトウェアです。
PHP の Symfony をベースとする Silex フレームワークで構築されています。テンプレートエンジンとして Twig が、また Alt-CSS として Sass が採用されています。

OpenBSD は Unix 系 OS の一つで、こちらもオープンソースのシステムです。
オペレーティングシステムとしてはセキュリティの高さで有名です。
それに加えて、OpenSSH / LibreSSL / OpenSMTPD / PF 等の堅牢なソフトウェアの開発を行っているプロジェクトでもあり、その成果は他の OS からも取り入れられています。
クリーンなソフトウェアライセンスの追求や、半年ごとの定期的な OS リリースの継続を実現している、優れたプロジェクトでもあります。

今回、公式チュートリアル を参考にしながら EC-CUBE を OpenBSD にインストールしました。
その手順をご紹介します。

環境

  • OS: OpenBSD 6.4 amd64
  • Web サーバー: OpenBSD httpd
  • カートシステム: EC-CUBE 4.0.0
  • DB: MariaDB 10.0
✿ ✿ ✿

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 で指定することができます:

  • 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
Enter fullscreen mode Exit fullscreen mode

#2. 実行環境を準備する

システム要件 に従って、必要なパッケージをシステムにインストールします。

# # PHP Composer (PHP 7.0 ver.)
# pkg_add composer

# # PHP 拡張モジュール
# pkg_add php-intl php-pdo_mysql
Enter fullscreen mode Exit fullscreen mode

* 補足: 開発環境で SQLite3 を使用する場合は、php-pdo_mysql の代わりに php-pdo_sqlite をインストールします。(本番環境では推奨されていません!)

PHP の ini ファイル を編集して必要な extension を有効にします。

# nvim /etc/php-7.2.ini
Enter fullscreen mode Exit fullscreen mode
extension=curl
extension=fileinfo
extension=intl
extension=mbstring
; ...
extension=mysqli
extension=pdo_mysql
;extension=pdo_sqlite
Enter fullscreen mode Exit fullscreen mode

* 補足: 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/`
Enter fullscreen mode Exit fullscreen mode

php72_fpm を再起動します。

# rcctl restart php72_fpm
Enter fullscreen mode Exit fullscreen mode

#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"
        }
}
Enter fullscreen mode Exit fullscreen mode

* 補足: ただインストーラーを動かすだけの場合、以下の定義で十分でした。ただし通常運用には使えません。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"
        }
}
Enter fullscreen mode Exit fullscreen mode

httpd の chroot によって etc ディレクトリが実際上 /var/www/etc になることに対応します:

# mkdir /var/www/etc
# cp /etc/{hosts,resolv.conf,localtime} /var/www/etc/
Enter fullscreen mode Exit fullscreen mode

httpd を再起動します。

# rcctl restart httpd
Enter fullscreen mode Exit fullscreen mode

Web インストーラーを用いて EC-CUBE をインストールする準備ができました。

#4. Web インストーラーで EC-CUBE をインストールする

httpd で指定したホストのルートディレクトリ(https://%host%/)にアクセスします。
Web インストーラーが表示されるので、画面に従って進めて行きます。

screenshot

アクセス権限のチェック:

screenshot

サイトの設定:

screenshot
screenshot

データベースの設定:

screenshot

* 補足: EC-CUBE 4.0.0 の場合、データーベースユーザーのパスワードに "#" は含めないようにする必要がありました。 4.0.1 で解消されています。

データベースの初期化:

screenshot

完了画面が表示されます:

screenshot

管理画面へのログイン画面が表示されます。
「サイトの設定」で登録した管理者情報を用いてログインできます。

screenshot
screenshot

インストール完了後は、ホストのルートディレクトリ(https://%host%/)にアクセスすると、ショッピングサイトのトップページが表示されます。

✿ ✿ ✿

以上です。
お読み頂きありがとうございました。


* 追記

後日、4.0.1 にアップデートしました:

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .