カテゴリー
ECサイト

VPS WebARENA (Indigo) を使って格安でEC-CUBE4環境準備

EC-CUBEとは

株式会社イーシーキューブが開発・提供するECオープンプラットフォームです。

EC-CUBEは「日本発オープンソース」のEC構築システムとして、「リアル店舗のようにネットショップにも個性を」というビジョンのもと2006年に開発されました。

以降、日本国内だけでも35,000店舗以上、年間流通総額2,100億円、180万ダウンロードを突破。全国の開発者や数百社のEC関連企業がEC-CUBE経済圏を構成しビジネスを行っています。

ECオープンプラットフォームとして、低コストでありながら、フルスクラッチに迫るカスタマイズ性を有するEC-CUBEは、こだわりのあるネットショップ構築に、他では代替えできない立ち位置を確立しています。

引用:株式会社イーシーキューブ

オフィシャルサイト

オフィシャルサイトでは、各企業の導入事例(実際のサイト)を見ることが出来ます。

導入事例

EC-CUBEクラウド

公式サイトでは、EC-CUBEクラウド版も提供されています。ただし月額の利用料金は6,800円~で、販売額が50万円を超過したら、超過分の1.3%が必要です。

また、私がサイトを確認したときはLiteプランは新規登録受付停止中のため、Standardプランのみが申請可能でした。
(2022/6/19時点)

EC-CUBEクラウド料金

引用:クラウドECプラットフォーム料金について

VPSでのEC-CUBE4の環境構築はDockerがおすすめ

VPSでEC-CUBEを使う上で、おすすめはDockerを使うことです。
Dockerを使うことで、ミドルウェアのインストールなどの環境構築をコマンド1つで作り上げることが出来ます。

またVPSは、ランニングコストを抑えるために、「国内最安値」のWebARENA (Indigo) を利用します。

もし、まだVPS(Docker環境構築)が出来てない場合は、

VPS WebARENA (Indigo) でDocker環境構築

を参考に環境準備を進めて頂ければと思います。

もし環境構築の代行が必要であれば、お問い合わせフォームからお気軽にご連絡を頂ければと思います。

EC-CUBE4の環境構築の手順

はじめに環境準備の手順についてです。

  1. EC-CUBE4をダウンロードで取得
  2. サーバへファイル転送
  3. アップロードファイルの権限変更
  4. docker-compose でコンテナ起動
  5. EC-CUBEのインストール実行
  6. ファイヤーウォールの設定確認
  7. 動作確認

EC-CUBE4をダウンロードで取得

まずはEC-CUBE4 ダウンロード版 からEC-CUBEをダウンロードします。
私が環境を構築した2022/6月現在の最新バージョンは4.1.2でした。

EC-CUBE4 ダウンロード版

サーバへEC-CUBEのファイル転送

ファイル転送の準備(WinSCP)

ダウンロードしたファイルを解凍し、サーバへアップロードします。

ファイルのアップロードにはWinSCPなどのファイル転送ソフトを使います。
WinSCPは、オープンソースで開発されているFTP/SFTP/SCPクライアントソフトです。

winscp

認証はSSH鍵での公開鍵暗号方式となりますので、「設定」から「SSH-認証」を開き、
秘密鍵にSSH鍵作成の際に取得したファイルを指定します。

winscp設定

EC-CUBEファイルのアップロード

接続が確認できたら、右側にサーバにアクセス先のファイルが表示されますので、
EC-CUBEを起動するフォルダ(後でdocker-compose upする場所)に、ファイルを転送します。

解凍後のフォルダは225MBで、転送には10分ほどかかりました。
※ネットワークや契約サーバによって転送時間は変動します。

私が最初に環境を構築した際は、docker-compose.ymlの4ファイルだけを持っていって、
docker-composeしたのですが、File Not Foundが発生して起動できませんでした。

全部のファイルが必要となりますので、ここは気長に待ちます。

アップロード

アップロードファイルの権限変更

この作業は、ファイルの転送方法によっては不要かもしれませんが、
私の環境では発生したため、対応した手順を載せておきます。

“bin/console”への実行権限付与

docker-compose実行時に以下の権限エラーが発生したため、consoleへ実行権限を付与しました。

OCI runtime exec failed: exec failed: unable to start container process: exec: "bin/console": permission denied: unknown
$ docker exec -it eccube_ec-cube_1 /bin/bash

# cd /var/www/html/bin/

実行前は、確かにconsoleに実行家権限がついていません。

# ls -al
total 20
drwxr-xr-x.  2 1000 987   76 Jun 13 14:41 .
drwxr-xr-x. 12 1000 987 4096 Jun 13 14:41 ..
-rw-r--r--.  1 1000 987   30 Jun 13 13:57 .htaccess
-rw-r--r--.  1 1000 987 1037 Jun 13 13:57 console
-rw-r--r--.  1 1000 987  612 Jun 13 13:57 phpunit
-rw-r--r--.  1 1000 987 2250 Jun 13 13:57 template_jp.php

そのためchmodで権限を付与します。

# chmod +x console

# ls -al
total 20
drwxr-xr-x.  2 1000 987   76 Jun 13 14:41 .
drwxr-xr-x. 12 1000 987 4096 Jun 13 14:41 ..
-rw-r--r--.  1 1000 987   30 Jun 13 13:57 .htaccess
-rwxr-xr-x.  1 1000 987 1037 Jun 13 13:57 console
-rw-r--r--.  1 1000 987  612 Jun 13 13:57 phpunit
-rw-r--r--.  1 1000 987 2250 Jun 13 13:57 template_jp.php

oauthフォルダへのファイル書込権限付与

docker-compose実行時に以下の権限エラーが発生したため、oauthフォルダへ書込権限を付与しました。

  Warning: file_put_contents(/var/www/html/app/PluginData/Api/oauth/private.key): failed to open stream: Permission denied

oauthフォルダへの書き込み権限は所有者のみとなっています。

/var/www/html/app/PluginData/Api# ls -al
total 0
drwxr-xr-x. 3 1000 987 19 Jun 13 14:41 .
drwxr-xr-x. 3 1000 987 33 Jun 13 14:41 ..
drwxr-xr-x. 2 1000 987  6 Jun 13 14:41 oauth

そのためoauthフォルダへ書込権限を付与します。

# chmod a+w oauth

# ls -al
total 0
drwxr-xr-x. 3 1000 987 19 Jun 13 14:41 .
drwxr-xr-x. 3 1000 987 33 Jun 13 14:41 ..
drwxrwxrwx. 2 1000 987  6 Jun 13 14:41 oauth

docker-compose でコンテナ起動

以下のdocker-composeファイルが存在することを確認します。

$ ll
total 20
-rw-r--r--. 1 rocky docker   81 Jun 13 13:07 docker-compose.dev.yml
-rw-r--r--. 1 rocky docker  498 Jun 13 13:07 docker-compose.mysql.yml
-rw-r--r--. 1 rocky docker  486 Jun 13 13:07 docker-compose.pgsql.yml
-rw-r--r--. 1 rocky docker 1905 Jun 13 13:07 docker-compose.yml
-rw-r--r--. 1 rocky docker 3797 Jun 13 13:07 Dockerfile

以下のコマンドを実行し、サービスを起動します。

$ docker-compose -f docker-compose.yml -f docker-compose.mysql.yml -f docker-compose.dev.yml up -d

問題がなければ、以下のサービスが起動するはずです。

  • ec-cube_ec-cube
  • schickling/mailcatcher
  • mysql:5.7
$ docker ps
CONTAINER ID   IMAGE NAMES                              COMMAND                  CREATED       STATUS      PORTS
e961ab5d3cba   ec-cube_ec-cube                          "docker-php-entrypoi…"   4 days ago    Up 4 days   0.0.0.0:8080->80/tcp, 0.0.0.0:4430->443/tcp      ec-cube_ec-cube_1
9355c714c318   schickling/mailcatcher                   "sh -c 'mailcatcher …"   4 days ago    Up 4 days   0.0.0.0:1025->1025/tcp, 0.0.0.0:1080->1080/tcp   ec-cube_mailcatcher_1
758e4cd29eca   mysql:5.7                                "docker-entrypoint.s…"   4 days ago    Up 4 days   33060/tcp, 0.0.0.0:13306->3306/tcp               ec-cube_mysql_1

実際は、Dockerfileに31ステップあるため、実際には30分くらいはかかった気がします。

<details>
<summary>実際の実行ログ</summary>

$ docker-compose -f docker-compose.yml -f docker-compose.mysql.yml -f docker-compose.dev.yml up -d
Building ec-cube
Sending build context to Docker daemon  5.452MB
Step 1/31 : FROM php:7.4-apache-bullseye
 ---> 54884b354869
Step 2/31 : ENV APACHE_DOCUMENT_ROOT /var/www/html
 ---> Using cache
 ---> 46e6748d2c02
Step 3/31 : RUN apt update   && apt upgrade -y   && apt install --no-install-recommends -y     apt-transport-https     apt-utils     build-essential     curl     debconf-utils     gcc     git     vim     gnupg2     libfreetype6-dev     libicu-dev     libjpeg62-turbo-dev     libpng-dev     libpq-dev     libzip-dev     locales     ssl-cert     unzip     zlib1g-dev     libwebp-dev   && apt upgrade -y ca-certificates   && apt clean   && rm -rf /var/lib/apt/lists/*   && echo "en_US.UTF-8 UTF-8" >/etc/locale.gen   && locale-gen   ;
 ---> Using cache
 ---> 33e593fded09
Step 4/31 : RUN docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql   && docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp   && docker-php-ext-install -j$(nproc) zip gd mysqli pdo_mysql opcache intl pgsql pdo_pgsql   ;
 ---> Using cache
 ---> bc832c73e36c
Step 5/31 : RUN pecl install apcu && echo "extension=apcu.so" > /usr/local/etc/php/conf.d/apc.ini
 ---> Using cache
 ---> b715537ce5b3
Step 6/31 : RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -   && apt update   && apt install -y nodejs   && apt clean   ;
 ---> Using cache
 ---> a37caeb61ae8
Step 7/31 : RUN mkdir -p ${APACHE_DOCUMENT_ROOT}   && sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf   && sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf   ;
 ---> Using cache
 ---> 9f6a83c2af78
Step 8/31 : RUN a2enmod rewrite headers ssl
 ---> Using cache
 ---> d45a1b5aa3b6
Step 9/31 : RUN ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf
 ---> Using cache
 ---> 6e3fa48142c7
Step 10/31 : EXPOSE 443
 ---> Using cache
 ---> cca9f6e1dd83
Step 11/31 : RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
 ---> Using cache
 ---> 3016b1c8d829
Step 12/31 : COPY dockerbuild/php.ini $PHP_INI_DIR/conf.d/
 ---> Using cache
 ---> 35ce834499d4
Step 13/31 : COPY dockerbuild/docker-php-entrypoint /usr/local/bin/
 ---> Using cache
 ---> 96fec549b141
Step 14/31 : RUN chown www-data:www-data /var/www   && mkdir -p ${APACHE_DOCUMENT_ROOT}/vendor   && mkdir -p ${APACHE_DOCUMENT_ROOT}/var   && chown www-data:www-data ${APACHE_DOCUMENT_ROOT}/vendor   && chmod g+s ${APACHE_DOCUMENT_ROOT}/vendor   && chown www-data:www-data ${APACHE_DOCUMENT_ROOT}/var
 ---> Using cache
 ---> 32e4a28e967d
Step 15/31 : RUN curl -sS https://getcomposer.org/installer   | php   && mv composer.phar /usr/bin/composer
 ---> Using cache
 ---> 9e25de634095
Step 16/31 : RUN composer config -g repos.packagist composer https://packagist.jp
 ---> Using cache
 ---> 3145fea80201
Step 17/31 : COPY composer.json ${APACHE_DOCUMENT_ROOT}/composer.json
 ---> Using cache
 ---> 0b3a720b89d0
Step 18/31 : COPY composer.lock ${APACHE_DOCUMENT_ROOT}/composer.lock
 ---> Using cache
 ---> aed0a2ac02bb
Step 19/31 : RUN chown www-data:www-data ${APACHE_DOCUMENT_ROOT}/composer.*
 ---> Using cache
 ---> cfd4726d110d
Step 20/31 : USER www-data
 ---> Using cache
 ---> 5c87d0b0eafd
Step 21/31 : RUN composer install   --no-scripts   --no-autoloader   --no-plugins   -d ${APACHE_DOCUMENT_ROOT}   ;
 ---> Using cache
 ---> 7e38e0b43a6e
Step 22/31 : USER root
 ---> Using cache
 ---> 0dd9db65ca5e
Step 23/31 : COPY . ${APACHE_DOCUMENT_ROOT}
 ---> 8e59d42fee50
Step 24/31 : WORKDIR ${APACHE_DOCUMENT_ROOT}
 ---> Running in 386e2e75ff67
Removing intermediate container 386e2e75ff67
 ---> 1c69f75eb34f
Step 25/31 : RUN find ${APACHE_DOCUMENT_ROOT} \( -path ${APACHE_DOCUMENT_ROOT}/vendor -prune \) -or -print0   | xargs -0 chown www-data:www-data   && find ${APACHE_DOCUMENT_ROOT} \( -path ${APACHE_DOCUMENT_ROOT}/vendor -prune \) -or \( -type d -print0 \)   | xargs -0 chmod g+s   ;
 ---> Running in afeb8e14baef
Removing intermediate container afeb8e14baef
 ---> 57b3a165f18b
Step 26/31 : USER www-data
 ---> Running in d3e6f20deac0
Removing intermediate container d3e6f20deac0
 ---> 228ce74e1b2f
Step 27/31 : RUN composer dumpautoload -o --apcu
 ---> Running in 34e0ff964485
Generating optimized autoload files
composer/package-versions-deprecated: Generating version class...
composer/package-versions-deprecated: ...done generating version class
Carbon 1 is deprecated, see how to migrate to Carbon 2.
https://carbon.nesbot.com/docs/#api-carbon-2
    You can run './vendor/bin/upgrade-carbon' to get help in updating carbon and other frameworks and libraries that depend on it.
Generated optimized autoload files containing 24400 classes
Removing intermediate container 34e0ff964485
 ---> c9902f80f4ca
Step 28/31 : RUN if [ ! -f ${APACHE_DOCUMENT_ROOT}/.env ]; then         cp -p .env.dist .env         ; fi
 ---> Running in d7a4be3392c2
Removing intermediate container d7a4be3392c2
 ---> abff418d305a
Step 29/31 : ARG SKIP_INSTALL_SCRIPT_ON_DOCKER_BUILD=false
 ---> Running in f561160f8cc7
Removing intermediate container f561160f8cc7
 ---> d354d50123ae
Step 30/31 : RUN if [ ! -f ${APACHE_DOCUMENT_ROOT}/var/eccube.db ] && [ ! ${SKIP_INSTALL_SCRIPT_ON_DOCKER_BUILD} = "true" ]; then         composer run-script installer-scripts && composer run-script auto-scripts         ; fi
 ---> Running in 22721f91c7c3
Removing intermediate container 22721f91c7c3
 ---> 10ca44b2cedc
Step 31/31 : USER root
 ---> Running in 0175e968ea67
Removing intermediate container 0175e968ea67
 ---> f05281626528
Successfully built f05281626528
Successfully tagged eccube_ec-cube:latest

</details>

EC-CUBEのインストール実行

コンテナ起動が成功したら、以下のコマンドを実行してEC-CUBEの初期化を実施します。

$ docker-compose exec -u www-data ec-cube bin/console eccube:install -n

全て正常終了すれば、

[OK] EC-CUBE installation successful. 

と表示されます。

<details>

<summary>実際の実行ログ</summary>

$ docker-compose exec -u www-data ec-cube bin/console eccube:install -n

 Run doctrine:database:create --if-not-exists...
 Database `eccubedb` for connection named default already exists. Skipped.

 Run doctrine:schema:drop --force...

 Dropping database schema...

 [OK] Database schema dropped successfully!


 Run doctrine:schema:create...

 ! [CAUTION] This operation should not be executed in a production environment!

 Creating database schema...

 [OK] Database schema created successfully!


 Run eccube:fixtures:load...
   > Finished Successful!

 Run cache:clear --no-warmup...

 // Clearing the cache for the dev environment with debug
 // true

 [OK] Cache for the "dev" environment (debug=true) was successfully cleared.



 [OK] EC-CUBE installation successful.

</details>

EC-CUBE初期化

ファイヤーウォールの設定確認

接続に必要なポート番号を確認します。もしお試しで「8080」での接続を実施している場合は、
既存のファイヤーウォールでは設定がされていないかもしれません。

私はまんまと引っ掛かり、Request timeoutを何度も発生させてしまいました。

ファイヤーウォールの設定確認

必要なファイヤーウォールの設定を追加します。

ポートを追加

画面表示確認

初回起動は、EC-CUBEが必要なプラグインをダウンロードするため時間がかかります。
30分くらいかかった気がします。

気長に待ちます。

正常に完了すれば、以下の初期画面が表示されます。

EC-CUBE画面表示

EC-CUBEを起動した際のリソース使用状況

今回、 VPS WebARENA (Indigo) 最安値スペックでインストールしたため、
とても運用に耐えられる性能ではありませんでした。

というかサーバが落ちまくりました。

実運用では、メモリ/CPUはEC-CUBEの推奨スペックで考えた方がよさそうです。

参考までに、各リソース使用状況を載せておきます。

ディスク容量

ディスク容量は問題なさそうでした。

df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        367M     0  367M   0% /dev
tmpfs           403M     0  403M   0% /dev/shm
tmpfs           403M   26M  377M   7% /run
tmpfs           403M     0  403M   0% /sys/fs/cgroup
/dev/vda1        20G  6.1G   14G  31% /
tmpfs            81M     0   81M   0% /run/user/1000

メモリ

サーバが落ちた原因はこれかなぁと。最大で800MBしかないプランなので。。。
実運用はもっと上のプランがいいかなと。

$ free -m
              total        used        free      shared  buff/cache   available
Mem:            804         486          54          30         264         171
Swap:             0           0           0

CPUとか色々 (プロセスはメモリ使用が多い順)

一番メモリを使っているのは、DBサービスの「mysqld」でした。
その次に「dockerd」です。

top - 03:08:09 up 4 days, 12:51,  2 users,  load average: 0.00, 0.10, 2.12
Tasks: 118 total,   3 running, 115 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.3 us,  1.0 sy,  0.0 ni, 96.3 id,  0.0 wa,  0.3 hi,  1.0 si,  0.0 st
MiB Mem :    804.8 total,     53.5 free,    480.4 used,    271.0 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.    176.9 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 118304 systemd+  20   0 1115376 196184  15316 S   0.0  23.8   0:00.85 mysqld
   3676 root      20   0 1476328  54896   9100 S   0.0   6.7   3:02.06 dockerd
    848 root      20   0 1288272  35196   3116 S   0.0   4.3   0:54.28 containerd
 118526 root      20   0  381152  30456  23912 S   0.0   3.7   0:00.23 apache2
 118396 root      20   0   98280  26320    604 S   0.0   3.2   0:01.16 mailcatcher
    834 root      20   0  703272  14232      0 S   0.3   1.7  17:17.24 tuned
 118507 root      20   0  712392   8756   4812 S   0.0   1.1   0:00.60 containerd-shim
 118365 root      20   0  712648   8708   6308 S   0.0   1.1   0:00.67 containerd-shim
 118280 root      20   0  712648   8664   4668 S   0.0   1.1   0:00.68 containerd-shim
      1 root      20   0  175120   8396   3780 S   0.0   1.0   0:10.75 systemd
    727 polkitd   20   0 1851004   8168      0 S   0.0   1.0   0:01.07 polkitd
 118630 33        20   0  381192   7992   1436 S   0.0   1.0   0:00.00 apache2
 118631 33        20   0  381192   7992   1436 S   0.0   1.0   0:00.00 apache2
 118632 33        20   0  381192   7992   1436 S   0.0   1.0   0:00.00 apache2
 118633 33        20   0  381192   7992   1436 S   0.0   1.0   0:00.00 apache2
 118634 33        20   0  381192   7992   1436 S   0.0   1.0   0:00.00 apache2
    909 root      20   0  236136   7264   2208 S   0.0   0.9   0:21.32 rsyslogd
 117507 root      20   0  410812   6984   4640 S   0.0   0.8   0:00.14 sssd_be
 118473 root      20   0 1005060   6736   2036 S   0.0   0.8   0:00.00 docker-proxy
 118344 root      20   0 1005060   6700   2004 S   0.0   0.8   0:00.00 docker-proxy
 118332 root      20   0 1005060   6556   1864 S   0.0   0.8   0:00.00 docker-proxy
 118493 root      20   0 1005060   6536   1844 S   0.0   0.8   0:00.00 docker-proxy
 118683 rocky     20   0  278144   5256   4460 R   0.0   0.6   0:00.54 top                                                   
 117510 root      20   0   84372   5248   4376 S   0.0   0.6   0:00.15 systemd-journal
    660 root      20   0  116560   5184   2576 S   0.0   0.6   0:02.01 systemd-udevd
 116267 rocky     20   0  252920   4904      0 S   0.0   0.6   0:00.00 (sd-pam)

<参考> EC-CUBE4を起動時に発生したエラーと解決策

Read timed out

発生エラー

ERROR: for eccube_ec-cube_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=60)

対策

サーバを再起動した。

port is already allocated

発生エラー

$ docker-compose -f docker-compose.yml -f docker-compose.mysql.yml -f docker-compose.dev.yml up -d
Starting eccube_mysql_1       ... done
Starting eccube_mailcatcher_1 ... done
Starting eccube_ec-cube_1     ...
Starting eccube_ec-cube_1     ... error

ERROR: for eccube_ec-cube_1  Cannot start service ec-cube: driver failed programming external connectivity on endpoint eccube_ec-cube_1 (7438640bb26a38470863fe18fa060cc6534950545d4fa68bd84f10a0bfbd08d0): Bind for 0.0.0.0:4430 failed: port is already allocated

対策

dockerを再起動した

$ sudo service docker restart
Redirecting to /bin/systemctl restart docker.service

OCI runtime create failed

発生エラー

$ docker-compose -f docker-compose.yml -f docker-compose.mysql.yml -f docker-compose.dev.yml up -d
Starting eccube_mailcatcher_1 ... done
Starting eccube_mysql_1       ... done
Starting eccube_ec-cube_1     ... error

ERROR: for eccube_ec-cube_1  Cannot start service ec-cube: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "docker-php-entrypoint": executable file not found in $PATH: unknown

ERROR: for ec-cube  Cannot start service ec-cube: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "docker-php-entrypoint": executable file not found in $PATH: unknown
ERROR: Encountered errors while bringing up the project.

対策

「–force-recreate」を付与して実行

docker-compose -f docker-compose.yml -f docker-compose.mysql.yml -f docker-compose.dev.yml up -d --force-recreate

管理者のIDとパスワードが不明

docker-composeに見つけました。環境によっては違うかも。

admin
password

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください