INTER-Mediatorをレンタルサーバに組み込む（さくらのレンタルサーバ）

#はじめに
INTER-Mediatorをハンズオンが終わると、いよいよ、独自アプリを開発したくなってくる。INTER-Mediatorフレークワークを使う為には、Webサーバとデータベースが必要。オンプレミスサーバで構築しても良いが、ここでは、てっとり早く安価にはじめる為、レンタルサーバを使ったINTER-Mediator運用環境を設定する。

#さくらのレンタルサーバ
レンタルサーバは、さくらインターネットのレンタルサーバで行います。レンタルサーバのグレードは、『スタンダード』を使用します。
さくらのレンタルサーバ: https://www.sakura.ne.jp

さくらのレンタルサーバの特徴(2018/01/28現在)
 - 2週間のお試し期間がある
 - MySQLが使える(スタンダード: 5OOMB)
 - Shellアクセスできる
 - 安価(515円/月〜）


 

#前提条件
##INTER-Mediatorの理解
もし、INTER-Mediatorがわからない方は、ぜひとも、『[INTER-Mediatorをはじめよう](http://inter-mediator.info/ja/for-novices/index.html)』について学習してください。学習しやすいようにバーチャルマシンやビデオチュートリアルも用意してあります。


##さくらのレンタルサーバ
さくらのレンタルサーバ、スタンダード以上の契約があること。とりあえず試したい方は、2週間のお試しを利用するのも手です。



#セットアップ方針
##INTER-Mediatorのインストール
GitHubのリポジトリの最新版をインストールします。（リリース版にする場合は、INTER-Meidator本家の『[ダウンロードとインストール](http://inter-mediator.info/ja/for-novices/deploy.html)』を参考にしてください。）

##MySQL
さくらのレンタルサーバ（スタンダード）のMySQLには、次の条件があります。
- 文字コードをutf8するのに少々問題がある
- MySQLのデータベースサイズはそんなに大きくない（スタンダード500MB)
- MySQLのサンプルデータを読み込んで、サンプルプログラムでセットアップ確認します。

##セキュリティについて
INTER-Mediatorのパッケージには、サンプルプログラムも含まれています。また、動作確認の為にも一旦サンプルが動作するようデータベースも設定します。不用意に第三者にアクセスされないようにパスワードによるアクセス制限することにします。


#おおまかな流れ
1. さくらのレンタルサーバを契約する
2. INTER-Mediatorのディレクトリにアクセス制限をかける
2. INTER-Mediatorをダウンロードして展開する
3. データベース(MySQL)を準備する
4. データベースのデータをMySQLに読み込む
5. INTER-Mediatorのデータベース接続設定を変更する
5. サンプルの動作確認をする
6. さくら特有の問題を解決する



#手順
##さくらのレンタルサーバを契約する
スタンダード以上のさくらのレンタルサーバ契約をする。契約が初めての方は、次のオフィシャルの情報を参考にしてください。
さくらのサポート情報: [レンタルサーバを借りてみよう](https://help.sakura.ad.jp/hc/ja/articles/20610656)


次の情報を基準に話を進めます。
名前は、契約時の名前と読み替えてください。

|項目|名前|
|:-:|:-:|
|初期ドメイン|名前.sakura.ne.jp|
|展開ディレクトリ|/home/名前/www/im/|
|MySQL DB名|名前\_test\_db|
|MySQL DB文字コード|UTF8mb4|


## INTER-Mediatorのディレクトリにアクセス制限をかける

+ sshでさくらのレンタルサーバのディレクリにアクセス

```
$ ssh 名前@名前.sakura.ne.jp
```

+ 展開するディレクトリを作成
ログイン直後のカレントディレクトリは、『/home/名前』なので、cdでwwwに移動して、imディレクトリを作成

```
% cd www
% mkdir im
```

+ ファイルマネージャーでアクセス制限
ファイルマネジャーにログインして、『/home/名前/www/im』ディレクトリにアクセス制限を設定します。

オフィシャルヘルプ: 『[【レンタルサーバ】ファイルマネージャーでアクセス制限をする](https://help.sakura.ad.jp/hc/ja/articles/206207041)』



##GitHubからINTER-Mediatorをダウンロードする

+ カレントディレクトリをimにして、GitHubからINTER-Mediatorをダウンロード。

```
% cd im
% git clone https://github.com/INTER-Mediator/INTER-Mediator.git
```

##MySQLデータベースを作成する

+ さくらインターネットサーバコントロールパネルで、『データベース』の設定をクリックして、『データベースの新規作成』をする。

オフィシャルヘルプ: 『[【レンタルサーバ】データベースの作成・追加・削除](https://help.sakura.ad.jp/hc/ja/articles/206053952)』

|項目|名前|
|:-:|:-:|
|データベース バージョン|MySQL 5.7|
|データベース |名前|
|データベース名|名前\_test\_db|
|接続用パスワード|*******|
|データベース 文字コード|UTF-8(utf8mb4)|

作成後、データベースサーバが決定する。

|項目|名前|備考|
|:-:|:-:|:-:|
|データベース サーバ|mysqlNNN.db.sakura.ne.jp|NNNは番号|



##データベースのデータをMySQLに読み込む
展開したINTER-Mediatorの中『sample_schema_mysql.txt』というファイルがあり、Sampleアプリのデータが入っている。さくらのMySQL用に変更して読み込む

+ 『sample_schema_mysql.txt』をコピーする

```
cd ./INTER-Mediator/dist-docs
cp sample_schema_mysql.txt sample_schema_mysql_for_sakura.txt
```

+ 『sample_schema_mysql_for_sakura.txt』のL19からL30までコメントアウトする

```
/*
# DROP USER 'web'@'localhost';
CREATE USER 'web'@'localhost' IDENTIFIED BY 'password';
# GRANT USAGE ON *.* TO 'web'@'localhost' IDENTIFIED BY 'password';

# Grant to All operations for all objects with web account
GRANT SELECT, INSERT, DELETE, UPDATE ON TABLE test_db.* TO 'web'@'localhost';

DROP DATABASE IF EXISTS test_db;
CREATE DATABASE test_db
        CHARACTER SET utf8mb4
        COLLATE utf8mb4_unicode_ci;
USE test_db;
*/
```

+ データベースに読み込む（カレントディレクトが『im』とする）

```
% mysql -u 名前 -p -h mysqlNNN.db.sakura.ne.jp -D hatena_test_db --default-character-set=utf8mb4 < INTER-Mediator/dist-docs/sample_schema_mysql_for_sakura.txt
```

##INTER-Mediatorのデータベース接続設定を変更する
展開したINTER-Mediatorの中『params.php』というファイルがあり、設定を次の通り変更する。

|変数名|既存値|設定値|
|:-:|:-:|:-:|
|$dbUser|web|アカウントの名前|
|$dbPassword|password|データベースパスワード|
|$dbDSN|mysql:unix_socket=/tmp/mysql.sock;dbname=test_db;charset=utf8|mysql:host=mysqlNNN.db.sakura.ne.jp;dbname=名前_test_db;charset=utf8mb4|

##サンプルの動作確認をする
『Any Kinds of Samples』の『Search Page』にアクセスして動作を確認する。



##さくら特有の問題を解決する
文字コードに問題がある場合は、次のコードを追加する。

例：『Any Kinds of Samples』の『Search Page』の場合
Samples/Sample_search/include_MySQL.phpのファイルのL25以下に次のコードを追加する


```
'script' => array(
                array(
                    "db-operation"=>"load",
                    "situation"=>"pre",
                    "definition"=>"SET NAMES utf8mb4"
                ),
            ),
```