初心者がさくらのサーバーにMagento2を構築してみた。

本記事は[Magento Advent Calendar 2015](http://www.adventar.org/calendars/931)の6日目の記事になります。
<h1>概要</h1>
サーバー関連の勉強を始めて1か月の初心者が、さくらのレンタルサーバーにMagento2を導入してみました。
手順どおりやっても上手くいかず、幾度となくハマり自暴自棄になりかけたので、今回は初心者の観点からハマりやすいポイントを押さえつつ、丁寧に解説していきたいと思います。WebサーバーとしてNginxを選択しましたが、とにかくMagento2を入れて試してみたいだけという方はNginxよりもApache2の方がハマりポイントが少なくオススメです。
<h1>構築環境</h1>
OS  : Ubuntu 14.04 LTS
Nginx : 1.8.0
MySQL : 5.6.27
PHP   : 7.0
Magento2 正式版 (下記URLよりダウンロードしておいて下さい)
https://www.magentocommerce.com/download
<h1>手順</h1>
今回はさくらのレンタルサーバーにUbuntu14.04を入れただけの状態から始めていきます。このサーバーへNginx, PHP, MySQLをインストールすることで、Magento2を構築することができます。
事前にダウンロードしたMagento2ファイルはサーバーの適当なディレクトリ(/var/wwwなど)に配置しておいてください。

1.　PHPのインストール・設定
2.　Nginxのインストール・設定
3.　MySQLのインストール・設定
4.　ブラウザからセットアップ画面にアクセス
5.　Magento2インストール(コマンドラインを用いて)
6.　ブラウザからフロントエンドにアクセス
7.　CSSを読み込ませる
<h2>1.PHPのインストール・設定</h2><h3>・PHP7.0のリポジトリを追加</h3>
<font color="green">$sudo add-apt-repository ppa:ondrej/php-7.0 -y
$sudo apt-get update</font>
<h3>・PHP7.0のインストール</h3>
PHP-FPMもインストールしておきます。

<font color="green">$sudo apt-get install php</font>
<font color="green">$sudo apt-get install php7.0-fpm</font>

PHPのインストールはこれで完了です。
<h3>・PHP-FPMの設定</h3>
今回はPHP-FPMとの接続をTCP/IPではなく、UNIXソケットを用いて行います。
/etc/php/7.0/fpm/pool.d/www\.confに以下のコードが記述されているか確認してください。
ない場合は、追加しましょう。

<font color="green">listen = /run/php/php7.0-fpm.sock</font>

最後にPHP-FPMの再起動をして、PHPのインストールと設定はこれで終了です。

<font color="green">$ sudo service php7.0-fpm restart</font>


<h2>2.Nginxのインストール・設定</h2>
<h3>・nginxサイトが配布するPGPキーを追加</h3>
<font color="green">$curl http\://nginx.org/keys/nginx_signing.key | sudo apt-key add -</font>
<h3>・リポジトリを一覧に追加</h3>
<font color="green">$sudo sh -c "echo 'deb http\://nginx.org/packages/ubuntu/ trusty nginx' >> /etc/apt/sources.list"
$sudo sh -c "echo 'deb-src http\://nginx.org/packages/ubuntu/ trusty nginx' >> /etc/apt/sources.list"
$sudo apt-get update</font>
<h3>・インストール</h3>
<font color="green">$sudo apt-get install nginx</font>
<h3>・Nginxの設定</h3>
Nginxの設定ファイルがMagento2ファイルのルートディレクトリにnginx.conf.sampleとして入っているので、そのままetc/nginx/conf.d/に配置しましょう。*.confが読み込まれる設定なので、ファイル名の変更を行っておいてください(<font color="red">nginx.conf.sample→nginx.conf</font>)以下のコメントアウトを外します。

<font color="green">
 upstream fastcgi_backend {
    server   unix:/run/php/php7.0-fpm.sock;
 }
 server {
    listen 80;
    server_name mage.dev;
    set $MAGE_ROOT /var/www/Magento2;
    set $MAGE_MODE developer;
</font>



<h2>3.MySQLのインストール・設定</h2>
<font color="red">・そのままapt-getでインストールしてはいけません。</font>
Magento2ではMySQLのバージョンが5.6.xと指定されているため、そのままの状態でapt-getを用いてインストールするとMySQL5.5が入ってしまい、エラーが出てしまいます。そこでパッケージリストを更新することで、より新しいバージョンをインストールしていきます。

<h3>・リポジトリの追加</h3>
<font color="green">$sudo wget http\://dev.mysql.com/get/mysql-apt-config_0.3.3-2ubuntu14.04_all.deb</font>
次にこのままのディレクトリで、
<font color="green">sudo dpkg -i mysql-apt-config_0.3.3-2ubuntu14.04_all.deb</font>
すると、以下の画面が表示されるので　Server → MySQL5.6 → Applyを選択

![3cadce9c-e78e-bb1c-c4db-cd83554e31c6.png](https://qiita-image-store.s3.amazonaws.com/0/97920/324b6816-3982-899c-c88a-183e066a987d.png)

<h3>・パッケージリストの更新</h3>
<font color="green">$sudo apt-get update</font>
<h3>・インストールされるパッケージの確認</h3>
<font color="green">$sudo apt-cache policy mysql-server</font>
コマンド入力後、以下のように表示されていれば大丈夫です。
mysql-server:
  Installed:(none)
  Candidate: 5.6.27-1ubuntu14.04
<h3>・インストール</h3>
<font color="green">$sudo apt-get install mysql-server</font>
これでMySQLのインストールが完了しました。

<h2>4.ブラウザからセットアップ画面にアクセス</h2>
PHP・Nginx・MySQLの設定が終わったら、一旦ブラウザからアクセスしてみたいと思います。
サーバーのURLにブラウザからアクセスしてみてください。


![スクリーンショット 2015-12-07 11.38.01.png](https://qiita-image-store.s3.amazonaws.com/0/97920/f0124e12-5770-cb56-fca8-3acb990f5596.png "スクリーンショット 2015-12-07 11.38.01.png")
権限が適切に与えられていないと上のようなエラー画面が表示されてしまいます。権限を適切に変更して、もう一度ブラウザからアクセスしてみてください。
![スクリーンショット 2015-12-07 11.45.27.png](https://qiita-image-store.s3.amazonaws.com/0/97920/49c8f38d-b415-3c8d-ca16-d49ab7905cf6.png "スクリーンショット 2015-12-07 11.45.27.png")

Magento2のセットップ画面が表示されていれば、問題ありません。
ブラウザを用いて、この画面からインストールを始めても良いのですが、今回はコマンドラインからインストールしていきます。
<h2>5.Magento2インストール(コマンドライン)</h2>
Magento2のインストールは、ブラウザとコマンドラインの二つの方法で行うことができます。当初、私はブラウザを用いたインストールを試みましたが、必ずどこかで止まってしまい、インストールを完了させることが出来ませんでした。
<font color="red">・コマンドラインからのインストールをオススメします</font>
まずはディレクトリをMagento2の実行ファイルmagentoがあるbinに移します。
$ cd /var/www/Magento2/bin
各種パラーメータを適宜入力してください。
./magento setup:install
--base-url=http://~~
--db-host=localhost
--db-name=magento
--db-user=root
--db-password=
--admin-firstname=
--admin-lastname=
--admin-email=---@---
--admin-user=admin
--admin-password=admin123
--language=en_US
--currency=USD
--timezone=America/Chicago
--cleanup-database
--sales-order-increment-prefix="ORD$"
--session-save=db
--use-rewrites=1
パラメーターの設定が終わったら、インストールを実行します。
インストール中に何度か止められるので、その都度エラーの指示にしたがって、足りないものを追加してあげてください。

<font  color="red">・PHP Fatal error:  Class 'Locale' not found</font>
PHPの拡張関数、Localeが利用できないようなので、php7.0-intlをインストールしてあげます。
<font color="green">$sudo apt-get install php7.0-intl</font>
インストールが終わりましたら、もう一度Magento2のインストールを試みます。

<font  color="red">・Database 'magento' does not exist or specified database server user does not have privileges to access this database.</font>
「magentoのデータベースが存在しない」と言われています。
事前にデータベースを作成しておく必要があったようです。MySQLに接続して、データベースを作成します。
$ mysql -u root -p
CREATE DATABASE magento;

再度インストールを実行します。完了までには少しばかり時間がかかると思います。

<font color="green">[SUCCESS]: Magento installation complete.
[SUCCESS]: Magento Admin URI: /admin
</font>
上記のように表示されたら完了です。adminのURIはしっかり覚えておきましょう。

<h2>6.ブラウザからフロントエンドにアクセス</h2>
インストールが完了したら、実際にブラウザからアクセスしてみます。
うまくフロントエンド画面が表示されていれば良いのですが、サーバーエラーが表示されることが時々あります。![スクリーンショット 2015-12-07 12.30.46.png](https://qiita-image-store.s3.amazonaws.com/0/97920/57a895cd-4140-aabb-551f-86379b9b633b.png "スクリーンショット 2015-12-07 12.30.46.png")
<font color="red">・Magento2/var以下に適切な権限を与えて下さい</font>
私の場合は、正しい権限が与えられておらず、キャッシュに書き込みができなくなっていました。




<h2>7.CSSを読み込ませる</h2>

<font color="red">・CSSが反映されていないことがある</font>

![スクリーンショット 2015-12-07 12.44.03.png](https://qiita-image-store.s3.amazonaws.com/0/97920/7ff9747e-318d-2417-67d3-8240579eb484.png)

ブラウザの表示が上の画像のようになっている場合はCSSが正しく読み込まれていない可能性が考えられます。
Magentoの実行ファイルを用いて、静的ファイルをデプロイしていきます。
<font color="green">./magento setup:static-content:deploy</font>
デプロイが終了したら、Nginxを再起動してもう一度アクセスしてみてください。
<font color="green">$sudo service nginx restart</font>
正常に表示されたら、これでMagento2の設定は完了です。 

<h2>まとめ</h2>
Magento2のインストールは大変難しい作業であると痛感しました。初心者がMagento2をインストールする際は時間の余裕を持って、エラーログをしっかり確認しながら慎重に進めていく必要があります。
ブラウザからのインストールでは、コケてもエラーログが表示されず、問題の箇所を特定することができなかったので、結局インストールできないままで終わってしまいました。
Magento2をインストールする際は、権限の問題など最低限のUNIXの知識は持っていないと厳しいようです。

2.0.2　インストールパラメーター
./magento setup:install --db-host="localhost" --db-name="magento" --db-user="" --db-password="" --language="ja_JP" --timezone="Asia/Tokyo" --currency="" --admin-user="" --admin-password="" --admin-email="" --admin-firstname="" --admin-lastname="" --cleanup-database --use-sample-data