ECCUBE3構築 Compute Engine

こんにちはgrasys長谷川です。

今回はECCUBE3を構築してみました。

システム要件 - ECCUBE3

php7系ががががが!!!!

内容は基本セットアップして入れて起動しただけです。

OSの設定の話やMiddlewareの設定の話も必要になってきますが、長くなりすぎちゃうのでどんどん省略します!w

環境

Envronment Description
Compute Engine Image centos-7-v20160921
OS CentOS7 CentOS Linux release 7.2.1511 (Core)
Web Server nginx-1.10.1
PHP phpenv 7.0.11
Database Percona-Server 5.6.33

Install Database

今回は何でも良かったんだけど・・・

Percona-Serverで入れてみる

yumのrepo

yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

Install Percona Server

yum install \
  Percona-Server-shared-56 \
  Percona-Server-devel-56 \
  Percona-Server-client-56 \
  Percona-Server-server-56

これだけで完了!

気になる人は適当にして下さい。

  • /etc/yum.repos.d/percona-release.repoenable=0にしたり
  • datadirの位置変更してmysql_install_dbしたり
  • /etc/my.cnf書き換えてチューニングしたり

自分はしてますが、ここでは省略!

user nginx

nginxもphp-fpmも一旦nginx userで動かす想定なので作っとく!

username=nginx
group=nginx
uid=80
gid=80
home=/usr/local/nginx
shell=/sbin/nologin
groupadd -g $gid $group
useradd -M -d $home -g $group -u $uid $username

Disable SELinux

めんどいんで一旦disableにしちゃいましょう

setenforce 0
getenforce
sed -i -e "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

ここで一度rebootしときましょう!

shutdown -r now

or

reboot

Setup phpenv

Install build tools

build toolsをまずInstall

yum -y groupinstall "Development Tools"

あといろいろphpをbuildするときに適当に言われるLibやらheaderをInstall

yum -y install \
  openssl-devel \
  pcre-devel \
  libxml2-devel \
  libcurl-devel \
  zlib-devel \
  libzip-devel \
  bzip2-devel \
  gd-devel \
  readline-devel \
  libxslt-devel

re2cも入れとく

curl -L -o /tmp/re2c-0.16.tar.gz https://github.com/skvadrik/re2c/releases/download/0.16/re2c-0.16.tar.gz
test -f /tmp/re2c-0.16.tar.gz && cd /tmp/ && tar -xvzf re2c-0.16.tar.gz
cd re2c-0.16
./configure \
    --prefix=/usr/local/`basename $PWD`
make
make install

test -d /usr/local/re2c-0.16 && ln -s /usr/local/re2c-0.16 /usr/local/re2c

export PATH=$PATH:/usr/local/re2c/bin

cat << EOL > /etc/profile.d/re2c.sh
export PATH=\$PATH:/usr/local/re2c/bin
EOL

Install phpenv

phpenvを使ってます。

export PHPENV_ROOT=/usr/local/phpenv

cat << EOL > /etc/profile.d/phpenv.sh
export PHPENV_ROOT=/usr/local/phpenv
if [ -d \$PHPENV_ROOT -a -x \$PHPENV_ROOT/bin/phpenv ]; then
  export PATH=\$PATH:/usr/local/phpenv/bin
  eval "\$(phpenv init -)"
fi
EOL

test ! -d /tmp/phpenv && \
  git clone --depth 1 https://github.com/CHH/phpenv.git /tmp/phpenv
test -x /tmp/phpenv/bin/phpenv-install.sh && /tmp/phpenv/bin/phpenv-install.sh
test ! -d /usr/local/phpenv/plugins/php-build && \
  git clone --depth 1 https://github.com/php-build/php-build.git /usr/local/phpenv/plugins/php-build

bashの環境変数周りいじってるので1度、logoutしてloginし直して下さいね〜〜

Install php 7.0.11

phpenvのphp-buildにはdefinitionsというbuild parameterがありまして
こいつがけっこうめんどいので自分は書き換えちゃったりしてますwww

  • /usr/local/phpenv/plugins/php-build/share/php-build/default_configure_options
  • /usr/local/phpenv/plugins/php-build/share/php-build/definitions/[version]
cp -p /usr/local/phpenv/plugins/php-build/share/php-build/default_configure_options /usr/local/phpenv/plugins/php-build/share/php-build/default_configure_options.org
vi /usr/local/phpenv/plugins/php-build/share/php-build/default_configure_options

なんか今回とくにあれなんで適当にやってます。
mcrypt入れてないので消しちゃったりとかして・・・

自分はconfig系をgitで管理していたりするので
--with-config-file-path--with-config-file-scan-dirを設定してます。

phpenv install

phpenvでphp-buildを利用して今回の対象の7.0.11をInstallします。

以下でInstall可能なVersion一覧が確認できます。

phpenv install -l

InstallしたいVersionがなかったら
php-buildをpullしてみればあるかも?

cd /usr/local/phpenv/plugins/php-build && git pull origin master

それじゃbuild!!!

phpenv install 7.0.11

しばし待つ・・・

待つ・・・

待つ・・・

たぶん入ると思います!
mcryptくらいじゃないかなBuildErrorしちゃう理由(さっきいろんなLibとheaderも入れてるし・・・)
mcryptでコケたら/usr/local/phpenv/plugins/php-build/share/php-build/default_configure_optionsこれいじって貰えれば!

コケたらTerminalに出力されるので!
たぶん/tmp/php-build.7.0.11.NNNNNNNNNNNNNNN.logみたいな感じで吐かれてるので末尾20行くらい眺めれば理由がわかるかと!

Install確認

ls /usr/local/phpenv/versions/
7.0.11

ls /usr/local/phpenv/versions/7.0.11/
bin  etc  include  lib  libexec  php  sbin  share  var

入ってるので

phpenv global

PHPだし思いっきりSystem標準としてw

phpenv global 7.0.11
phpenv rehash

which php
/usr/local/phpenv/shims/php

php -v
PHP 7.0.11 (cli) (built: Oct 18 2016 08:00:10) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.11, Copyright (c) 1999-2016, by Zend Technologies
    with Xdebug v2.4.1, Copyright (c) 2002-2016, by Derick Rethans

php -i

phpinfo()
PHP Version => 7.0.11

System => Linux dev01 3.10.0-327.36.1.el7.x86_64 #1 SMP Sun Sep 18 13:04:29 UTC 2016 x86_64
...
...
しょーりゃく!
...
...
  • apcu
  • opcache

ここでは書きませんが自分は入れてるしちょっと設定いじったりしてます。

setup php-fpm

config file/dir PATH
etc /usr/local/phpenv/versions/7.0.11/etc
php.ini /usr/local/phpenv/versions/7.0.11/etc/php.ini
conf.d /usr/local/phpenv/versions/7.0.11/etc/conf.d
php-fpm.conf 存在せず
/usr/local/phpenv/versions/7.0.11/etc/php-fpm.conf.default
これを元に作る!
php-fpm.d /usr/local/phpenv/versions/7.0.11/etc/php-fpm.d
php-fpm.conf
cp -p /usr/local/phpenv/versions/7.0.11/etc/php-fpm.conf.default /usr/local/phpenv/versions/7.0.11/etc/php-fpm.conf
tail /usr/local/phpenv/versions/7.0.11/etc/php-fpm.conf
; used in logs and stats. There is no limitation on the number of pools which
; FPM can handle. Your system will tell you anyway :)

; Include one or more files. If glob(3) exists, it is used to include a bunch of
; files from a glob(3) pattern. This directive can be used everywhere in the
; file.
; Relative path can also be used. They will be prefixed by:
;  - the global prefix if it's been set (-p argument)
;  - /usr/local/phpenv/versions/7.0.11 otherwise
include=/usr/local/phpenv/versions/7.0.11/etc/php-fpm.d/*.conf

/usr/local/phpenv/versions/7.0.11/etc/php-fpm.confの末尾に
includeがあるのでわかると思いますが poolの設定を入れます。

cd php-fpm.d

vi eccube3.conf
[eccube3]
listen = /tmp/$pool.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
user = nginx
group = nginx
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slowlog-$pool.log
listen.allowed_clients = 127.0.0.1
pm = static
pm.max_children = 10
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 5000
listen.backlog = -1
pm.status_path = /system/php_fpm_status
request_terminate_timeout = 60s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

request_slowlog_timeoutはちょっと厳しすぎるかもしれない・・・汗
Machine-SizeとRequest数次第だと思うけどw

pm.xxxxあたりは適当にどうぞ

おもむろに起動!

mkdir -p /var/log/php-fpm
chown -R nginx.nginx /var/log/php-fpm

/usr/local/phpenv/versions/7.0.11/sbin/php-fpm \
  --daemonize \
  -c /usr/local/phpenv/versions/7.0.11/etc/php.ini \
  --fpm-config /usr/local/phpenv/versions/7.0.11/etc/php-fpm.conf

systemdのserviceは適当に作って下さい

Install nginx

nginx

configure paramは適当にどっかのサーバから持ってきたんで適当ですw

curl -L -o /tmp/nginx-1.10.2.tar.gz https://nginx.org/download/nginx-1.10.2.tar.gz
test -f /tmp/nginx-1.10.2.tar.gz && cd /tmp/ && tar -xvzf nginx-1.10.2.tar.gz
cd nginx-1.10.2
./configure \
  --prefix=/usr/local/`basename $PWD` \
  --user=nginx \
  --group=nginx \
  --with-poll_module \
  --with-file-aio \
  --with-http_ssl_module \
  --with-http_addition_module \
  --with-http_sub_module \
  --with-http_realip_module \
  --with-http_stub_status_module \
  --with-http_dav_module \
  --with-http_flv_module \
  --with-http_random_index_module \
  --with-http_secure_link_module \
  --with-http_gunzip_module \
  --with-http_gzip_static_module \
  --with-http_degradation_module \
  --without-mail_pop3_module \
  --without-mail_imap_module \
  --without-mail_smtp_module 
make
make install

test -d /usr/local/nginx-1.10.2 && ln -s /usr/local/nginx-1.10.2 /usr/local/nginx

cat << EOL > /etc/profile.d/nginx.sh
export PATH=\$PATH:/usr/local/nginx/sbin
EOL

もーさっきからめんどくさくて/etc/profile.dにいろいろ追加しちゃうww

あんまよくないと思いますw

setting nginx

nginxのconfigは
Installしたprefixの中にあります。

/usr/local/nginx/conf

nginx.conf

server sectionの中にphpの記載がコメントアウトされてますが
先程php-fpmの設定でsocketを指定してたりするので無視して下さいw

    root /opt/eccube/html;
    location / {
      index index.html index.htm index.php;
      try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php {
      include       /usr/local/etc/nginx/conf/fastcgi_params;
      fastcgi_pass  unix:/tmp/eccube3.sock;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
    }

こんなの追加すれば多分動きます!

実際に自分が構成したnginxのconfig treeは可用性を高めるためincludeを多様していて
nginxがよくわからないと触りにくいと思うので公開するのやめてますw

起動してみる

defaultのnginx.confはerror_logもaccess_logもコメントアウトされてるというw nginx.confのpathをよくみて!directory permissionも確認してね!

config test

nginx -c /usr/local/nginx/conf/nginx.conf -t
nginx -c /usr/local/nginx/conf/nginx.conf

ECCUBE3

以下のLinkでUser登録をするとDownloadできます。 ECサイト構築・リニューアルは「ECオープンプラットフォームEC-CUBE」

zipをDownloadしたらサーバにUploadして
展開して下さい。

eccube_install.sh

このInstaller Shellの中身をみるとわかるのですが

export DBSERVER=${DBSERVER-"127.0.0.1"}
export DBNAME=${DBNAME:-"cube3_dev"}
export DBUSER=${DBUSER:-"cube3_dev_user"}
export DBPASS=${DBPASS:-"password"}

こんな感じになっていて環境変数で渡せます。

DBSERVER=xxxxxxxxx \
DBNAME=xxxxx \
DBUSER=xxxxxx \
DBPASS=xxxxx ./eccube_install.sh mysql

Installでエラーでるかもしれない・・・
もしかしたらCREATE DATABASEをしたかもしれない・・・(記憶がない・・・w

とりあえず動作しました。

php7系で動いた!

後半、blog書くのに力尽きた感が強いw