EC-CUBE 4 を OpenBSD 6.4 にインストールする
Tags: eccube, ecommerce, openbsd, installation
Published: 2018-12-21 02:54:18

---
title: EC-CUBE 4 を OpenBSD 6.4 にインストールする
published: true
description: EC-CUBE は、オープンソースの「ネットショップ構築システム」です。OpenBSD は Unix 系 OS の一つで、こちらもオープンソースのシステムです。公式チュートリアルを参考にしながら EC-CUBE 4 を OpenBSD 6.4 にインストールしました。その手順をご紹介します。
tags: ec-cube, e-commerce, openbsd, installation
series: EC-CUBE On OpenBSD
---

# はじめに

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

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

今回、[公式チュートリアル](http://doc4.ec-cube.net/quickstart_install) を参考にしながら EC-CUBE を OpenBSD にインストールしました。
その手順をご紹介します。

### 環境

- OS: OpenBSD 6.4 amd64
- Web サーバー: OpenBSD [httpd](https://man.openbsd.org/httpd.8)
- カートシステム: EC-CUBE 4.0.0
- DB: [MariaDB](https://mariadb.org) 10.0

<center>✿ ✿ ✿</center>

# EC-CUBE のインストール

### 凡例

- `#` で始まる行のコマンドは、スーパーユーザー権限で、実行します。
- `$` で始まる行のコマンドは、一般ユーザー権限で、実行します。
- %word% のような `%` 囲みの言葉は、環境によって変動する値を、抽象的な言葉で表しています。
- eccube-4.?.? の `?` は、任意の 1 文字を表します。本記事の場合、具体的には eccube-4.0.0 です。

---

### 前提

Web サーバー / PHP 7.2 の PHP-FPM / MariaDB 環境が構築されている前提です。

（ご参考） *\* いずれも参照記事は英語です。*

- Web サーバー

`# rcctl enable httpd` で OpenBSD httpd のデーモンを有効化します:

{% link nabbisen/setting-up-openbsds-httpd-web-server-4p9f %}

Web インストーラーでパスワードを入力する場面があるため、本記事は HTTPS 通信を行う前提で記述します。
Let's Encrypt で発行した SSL/TLS 証明書を httpd で指定することができます:

{% link nabbisen/lets-encrypt-certbot-for-openbsds-httpd-3ofd %}

- PHP-FPM

`php` パッケージ（ `php-7.2` ）追加後に、ini ファイルの設定とデーモンの有効化を行うことで環境構築を行います:

{% link nabbisen/php-fpm-on-openbsd-2iof %}

- MariaDB

`mariadb-server` パッケージ追加後に、デーモンの有効化と初期化コマンドを実行することで環境構築を行います:

{% link nabbisen/installing-mariadb-server-on-openbsd-5lm %}

その後に、EC-CUBE で使用するデータベースとユーザーを CREATE しておく必要があります。

---

### インストール手順

#### \#1. アプリケーションファイルのダウンロードと配置を行う

公式サイトの [無料ダウンロード](https://www.ec-cube.net/download/) から最新版の zip ファイルを取得します。

```shell-session
# 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. 実行環境を準備する

[システム要件](http://doc4.ec-cube.net/quickstart_requirement) に従って、必要なパッケージをシステムにインストールします。

```shell-session
# # 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 ファイル](http://php.net/manual/ja/configuration.file.php) を編集して必要な [extension](http://php.net/manual/ja/extensions.php) を有効にします。

```shell-session
# nvim /etc/php-7.2.ini
```

```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` を有効化することもできます。

```shell-session
# ln -sf /etc/php-7.2.sample/mysqli.conf /etc/php-7.2/`
```

`php72_fpm` を再起動します。

```shell-session
# rcctl restart php72_fpm
```

#### \#3. Web サーバーを起動する

[`/etc/httpd.conf`](https://man.openbsd.org/httpd.conf.5) に EC-CUBE サイト用の定義を追加します。
`block` 定義や `pass` 定義の一部は EC-CUBE アプリケーションファイル内に複数存在する `.htaccess` の内容をもとにしています。

```apache
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 ラウティングに問題が残っています。*

```apche
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` になることに対応します:

```shell-session
# mkdir /var/www/etc
# cp /etc/{hosts,resolv.conf,localtime} /var/www/etc/
```

httpd を再起動します。

```shell-session
# rcctl restart httpd
```

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

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

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

![screenshot](https://thepracticaldev.s3.amazonaws.com/i/pca87lwvfuofl4cxrmvr.png)

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

![screenshot](https://thepracticaldev.s3.amazonaws.com/i/16ezxrmmonyl61c1423h.png)

サイトの設定:

![screenshot](https://thepracticaldev.s3.amazonaws.com/i/jbxoa7thuotkz2vmz0dy.png)
![screenshot](https://thepracticaldev.s3.amazonaws.com/i/zsk4092bw6otj3v3g4k6.png)

データベースの設定:

![screenshot](https://thepracticaldev.s3.amazonaws.com/i/u6o6uanawtwr5xnmu1wn.png)

*\* 補足: [EC-CUBE 4.0.0 の場合、データーベースユーザーのパスワードに "#" は含めないようにする必要がありました。](https://dev.to/nabbisen/ec-cube-400-malformed-parameter-url-9l6) 4.0.1 で解消されています。*

データベースの初期化:

![screenshot](https://thepracticaldev.s3.amazonaws.com/i/4uhmaydvrvcu02g6sce2.png)

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

![screenshot](https://thepracticaldev.s3.amazonaws.com/i/oib3pfcmqc5exp9b06wz.png)

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

![screenshot](https://thepracticaldev.s3.amazonaws.com/i/856fbfwygt74kc7em8ds.png)
![screenshot](https://thepracticaldev.s3.amazonaws.com/i/xifjlc92jh445q10ttye.png)

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

<center>✿ ✿ ✿</center>

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

---

### \* 追記

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

{% link nabbisen/ec-cube-400---401---openbsd-5g8m %}