越境EC Magento2をさくらVPS(CentOS7 + PHP7 + MySQL5.6)にインストール


前回、Magento2がどのようなものかについて、書きました。
今回はインストールをして、実際に画面を見るところまでいきたいと思います。

作業を行ったのは2017年3月になります。
時期や環境の違いで同じように作業をしても、上手くいかないことが多々ありますので注意してください。

環境は下記になります。
・CentOS7 x86_64
・PHP 7.0.17
・MySQL 5.7.17
・Magento 2.1.5

CentOS7のインストール

今回、サーバはさくらVPSを使用します。
お試しで2週間使用することが出来るので、安心して契約できますね!
契約したら管理画面の情報が送られてきますので、ログインしてインストールするOSを選択します。
今回は「CentOS7 x86_64」を選択します。

数分時間がかかりますが、サーバの状態が「稼働中」になったらOKです。
インストールされたらサーバに接続してみましょう。
ssh root@xxx.xx.xxx.xxx


インストールする際に設定したパスワードで接続できるはずです。
次にユーザを新たに作成します。
これは初期設定のrootアカウントだと攻撃を受ける可能性があるので、rootでは接続できないようにするためです。
useradd xxxxxx
passwd xxxxxx


新たに作成したユーザが管理者になれるようにします。
usermod -G wheel xxxxxx
vi /etc/pam.d/su
#auth sufficient pam_wheel.so trust use_uid

auth sufficient pam_wheel.so trust use_uid


管理者権限を持ったユーザを作成したので、rootでのログインを禁止します。
ついでにSSH portを適当なものに設定します。
vi /etc/ssh/sshd_config
#Port 22

Port 10014(適当な値に)

#PermitRootLogin yes

PermitRootLogin no


次に設定したportを開くようにしつつ、デフォルトのSSH portを閉じます。
firewall-cmd --add-service=http
firewall-cmd --permanent --add-service=http
firewall-cmd --add-port=10014/tcp
firewall-cmd --permanent --add-port=10014/tcp
firewall-cmd --remove-service=ssh
firewall-cmd --permanent --remove-service=ssh


設定を反映するために、sshdを再起動します。
systemctl restart sshd.service


これでrootで接続できなくなったので、exitして実際に再接続してみます。
ssh root@xxx.xx.xxx.xxx


下記のようなメッセージが出て、接続に失敗すれば成功です。
ssh: connect to host xxx.xx.xxx.xxx port 22: Connection refused


では新たに作成したユーザと設定したportで接続できるか確認します。
ssh -p 10014 xxxxx@xxx.xxx.xxx.xxx


接続できたら成功です。
サーバのセキュリティ設定は他にもできることはありますので、確認することをオススメします。
特にMagento2のようなECサイトの場合は、個人情報を扱うことも多いのでセキュリティには十分注意する必要があります。

Apacheをインストール

それでは次にMagento2に必要なものをインストールしていきます。
まず最初に権限がないとおもいますので、rootになっておきます。
sudo su -


次にパッケージとリポジトリを最新にしておきます。
yum -y update
yum -y install yum-plugin-priorities
yum -y groupinstall "Base" "Development tools" "Japanese Support"
yum -y install epel-release
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
rpm -Uvh http://mirror.fairway.ne.jp/dag/redhat/el7/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm


準備が出来たら、Apacheをインストールします。
yum install httpd
systemctl enable httpd
systemctl start httpd


この時点で、ブラウザにIPアドレスを入力すると起動が確認できます。
http://xxx.xxx.xxx.xxx



初期設定のままでは.htaccessファイルが有効でない設定になっています。
下記の変更を行います。
vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
AllowOverride All (NoneをAllに変更)

PHP7をインストール

次にPHP7をインストールします。
yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd php-fpm php-mysqlnd php-mcrypt php-intl php-bcmath php-pecl-imagick php-soap php-xmlrpc php-pecl-zip php-opcache php-pecl-xdebug


ちなみにMagento2がデフォルトでは英語表示の為、日本語に変えたいという場合にPHP7ではエラーになってしまいます。(2017年2月現在)
PHP7の方が処理は早くなるのでそちらにするべきですが、どうしても日本語にする必要がある場合はPHP5.6をインストールするのが良いかと思います。
インストールが完了したら、PHPの設定を少し変更します。
Magento2はかなりメモリを必要とするため、最低でも1G以上が必要になります。
vi /etc/php.ini
memory_limit = 64M

memory_limit = 1024M


準備ができたらApacheを再起動して、phpが動いているか確認します。
systemctl restart httpd
vi /var/www/html/info.php


下記を記述して、
<?php phpinfo();
ブラウザから/info.phpを確認して下記のような画像が出たら成功です。

MySQLをインストール

PHPの次はMySQLをインストールします。
MariaDBはMagentoでは対応していないようなので、今回はMySQLになります。
sudo rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
sudo yum install -y mysql-community-server


インストールが完了したら、起動します。
systemctl start mysqld.service


また自動で起動するようにサービスとして登録します。
systemctl enable mysqld.service
MySQLのインストールができましたが、パスワード等を設定しないと接続できません。

MySQL5.7.6以降から、初期パスワードは下記から確認できます。
cat /var/log/mysqld.log | grep 'password is generated'
一番最後の文字列がパスワードになります。

下記を入力するとパスワードが変更できます。
mysql_secure_installation


最初にrootのパスワードが聞かれますが、先ほどのパスワードを入力してEnterを押します。
Enter password for user root


すると新しいパスワードの入力を求められます。
その他にも色々聞かれますが、デフォルトの設定のままで問題ないので、Enterを押してください。

Magento2をインストール

ここまで長かったのですが、あくまでもMagentoをインストールするための下準備です。

ようやくMagento本体のインストールに入っていきます。
今回はComposerを利用してインストールを行います。

Magentoサイトからアーカイブをダウンロードして、ファイル転送ツールからアップロード・インストールする方法もあるのですが、転送に時間がかかる上にアップデートが発生した時に対応が面倒になるので今回は利用しません。
まず、Composerをインストールします。
curl -sS https://getcomposer.org/installer | php
yum install -y curl
mv composer.phar /usr/local/bin/composer


次にMagento Marketplaceに登録して、ファイルを受け取れるようにします。
サイトは英語ですが、登録するだけなので難しい箇所は無いかと思います。
https://marketplace.magento.com/
登録を完了してSignInすると、「My Account」の画面になりますので、
「My Access Keys」をクリックしてください。


「Magento2」タブの「Create A New Access Key」をクリックすると、
ファイルを取得するための、Access Keyが発行されます。


Access Keyが発行されたので、ファイルをサーバにダウンロードします。
下記の最後がダウンロードするパスになりますので、ダウンロードするディレクトリを変えたい場合は変更してください。
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition /var/www/html/
Usernameが先ほど発行したAccess Keyの「Public Key」で、Passwordが「Private Key」になります。

Passwordを入力すると、Access Keyの情報を保存するか聞かれます。
Do you want to store credentials for repo.magento.com in /root/.config/composer/auth.json ?
またダウンロードするディレクトリが空でない場合に、「Project directory /var/www/html/ is not empty.」とエラーになるのでファイルが存在する場合は、あらかじめファイルを削除する必要があります。

次にMagento2のデータベースを作成します。
mysql -u root -p
create database データベース名 default character set utf8;
grant all on データベース名.* to データベースユーザ名@localhost identified by 'データベースパスワード';

データベースができたら、Magentoのインストールを開始します。

下記のそれぞれの項目を自分の内容に差し替えて入力してください。
php bin/magento setup:install \
--backend-frontname=admin_xxxxx \ (管理画面)
--db-host=localhost \
--db-name=xxxxx \ (データベース名)
--db-user=xxxxx \(データベースユーザ名)
--db-password=xxxxx/ \(データベースパスワード)
--base-url=http://xxxxxxx.vs.sakura.ne.jp/ \(URL)
--language=en_US \
--timezone=Asia/Tokyo \
--currency=JPY \
--admin-user=xxxxx \(管理者アカウント名)
--admin-password=xxxxx \(管理者パスワード)
--admin-email=xxxxx@xxx.com \(管理者メールアドレス)
--admin-firstname=xxxx --admin-lastname=xxxx(管理者姓名)


一点、気をつけたいのが「language」を「Japanese」にすると、管理画面がエラーになってしまいました。
ですので「English」にしておいて、インストール後に日本語へ設定することをオススメします。

最後に

以上でインストール作業が完了なのですが、私の場合にこれでブラウザに接続しても500エラーになってしまいました。

logからエラー内容を見ると、下記のディレクトリ以下に書き込み権限を与える必要がありました。
- /app/etc/
- /var/
- /pub/media/
- /pub/static/


このように手順通りに行っても上手くいかない場合がありますので、その際はlogを確認するようにしてください。
インストールは完了したのですが、データが無いためにコンテンツ部分は真っ白になってしまいます。

サンプルデータや静的コンテンツをダウンロードするには下記を行う必要があります。
php bin/magento setup:static-content:deploy


php bin/magento sampledata:deploy


長くなってしまいましたが、以上でインストールは完了になります。
次回はMagento2のファイルを見ていきたいと思います。