Ubuntu16.04 + nginx でMovableType7.0.α.2を動かすまで

#### はじめに
* Ubuntu16.04 + nginx で MovableType7.0.α.2 を動かすまで。

* 以前、自前のブログ記事で [Ubuntu14.04 + nginx でMT6.2.2を動かすまで](http://ptna.hateblo.jp/entry/2016/01/27/Ubuntu14_04_%2B_nginx_%E3%81%A7MT6_2_2%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99%E3%81%BE%E3%81%A7) というのを書いたので、その流れをそのまま踏襲します。
* なるべく、慣れない方がこの記事だけで最後まで完遂できるようにします。他記事へ飛ばないといけなくなるようにはしないようにします。

* 何はともあれ、 *apt-get update* と *apt-get upgrade* は実行しておいてください。
* ディレクトリの構成などは、あくまで一例ですので、それぞれの環境に置き換えて実行していってください。
* Ubuntuは立ち上げたばかりくらいの想定です。
* 別に Ubuntu に限らず他の Linux ディストリビューションでも問題ないかと思います。

#諸々のインストール
## 各種環境/ver.まとめ
* MovableType 7.0.α.2
* Ubuntu 16.04
* MySQL 5.7.20
* nginx 1.10.3
* Perl 5.22.1


## nginx のインストール

``` sh
apt-get install nginx
```

## MTのインストール
### ダウンロード
アルファ版なので以下よりダウンロード。
ダウンロードした zip ファイルは解凍してください。

[Movable Type BETA](https://www.movabletype.jp/beta/)


### アップロード先のディレクトリを作成
* /var/www/mt/MT-7.0a2/mt
* /var/www/mt/MT-7.0a2/mt-static
* /var/www/mt/MT-7.0a2/hogehoge (サイト用ディレクトリ)
とか。

今回、あくまでアルファ版のインストールをおこなう、ということで、それ用に切ってます（ちょいと冗長）

### アップロード
作成したディレクトリに、解凍したものをアップロード。

* /mt-static/ の中身　→　/var/www/mt/MT-7.0a2/mt-static
* /mt-static/ 以外のもの全て　→　/var/www/mt/MT-7.0a2/mt


## MySQLのインストール

``` sh
apt-get install mysql-server
```

MySQL をインストールすると latin1 になってしまっているので、 UTF8 にしなくてはなりません。
また、ユーザも root 以外で作成しておきましょう。

参照
[Ubuntu で MySQL](http://qiita.com/kojionilk/items/bdace886c3664d75c5f7)

### UTF8にする

/etc/mysql/mysql.cnf に以下を追記してから、 MySQL を再起動。

```
[mysqld]
character-set-server=utf8
skip-character-set-client-handshake
default-storage-engine=INNODB

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8
```

### root以外のユーザ作成

username, password は適当に置き換えてください。

```
GRANT ALL PRIVILEGES ON *.* TO username@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
```



## perl のインストール

``` sh
aptitude -y install perl
```

nginx の場合、 apache より cgi 動かすまでの道のりが長くて大変なのですが。
まあ、サクサクといきましょう。 


## fcgiwrap のインストール

``` sh
apt-get install fcgiwrap
cp /usr/share/doc/fcgiwrap/examples/nginx.conf /etc/nginx/fcgiwrap.conf
```

*/etc/nginx/sites-available/default* に、以下を追記してー、

``` nginx
# fast cgi support
include /etc/nginx/fcgiwrap.conf;
```

*/etc/nginx/fcgiwrap.conf* の中身を以下に書き換えー、

``` nginx
location ~ \.cgi(/|$) {
  gzip off;
  fastcgi_index index.cgi;
  fastcgi_split_path_info ^(.+?\.cgi)(/.*)$;
  if (!-e $document_root$fastcgi_script_name) {
    return 404;
  }
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include /etc/nginx/fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param PATH_INFO $fastcgi_path_info;
  fastcgi_param PATH_TRANSLATED $fastcgi_path_info;
  fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
```

fcgiwrap の起動（ nginx の再起動もやっておいた方が吉かもです）

``` sh
/etc/init.d/fcgiwrap start
```

なお、fcgiwrap 再起動の時は　*restart*　、停止の時は　*stop*　で。
MT + fcgiwrap の環境って、ストレートにやっても動いてくれませんで、 403 forbidden 無間地獄に堕とされますから、 fcgiwrap.conf の中身を上のように書き換えないとならず。
このあたりについては、公式と以下記事を参照に。

* [FCGI Wrap](https://www.nginx.com/resources/wiki/start/topics/examples/fcgiwrap/)
* [Movable Type DataAPIをDebian Wheezyで動かす（nginx + fcgiwrap) - uehatsu's tech blog](https://uehatsu.info/tech/archives/2015/11/run-movable-type-dataapi-on-debian-wheezy-with-nginx-and-fcgiwrap.html)

PSGI の方が動かしやすそうかもしれませんが、何となくそれほどの根拠もなく fcgiwrap の方がイイ感じのような……(根拠ある情報があるようでしたら欲しいです)


# 諸々の設定
## nginxの設定
*/etc/nginx/nginx.conf* をいじりましょう。
nginxのconfまわりの設定次第なのですが、デフォルトのままでしたら、 */etc/nginx/sites-available/default* なども。
rootディレクトリを */var/www* とかに設定しつつ。
VirtualHost も一緒に設定する場合、たとえば以下のようにするなど。

``` nginx
server {
  listen 80 default_server;
  server_name hogehoge.piano.or.jp;

  root /var/www;
  index index.html index.htm;

  location / {
    try_files $uri $uri/ =404;
  }

  # fast cgi support
  include /etc/nginx/fcgiwrap.conf;
}
```

SSL の場合は 443 についての記述も入れつつで。

ちなみに、 MT7 のブログ設定において、サブドメインを利用する、というやり方もとれなくはないのですが、個人的には、 nginx の conf に設定をまとめておいた方が、後々のメンテナンス性が高くなって幸せ感が高まるんじゃないかと思います。


## MySQL の設定
MT データベース作成。

``` sql
create database mt character set utf8;
grant all on mt.* to hogehogeuser@localhost identified by 'foobarpassword';
```

## MT ディレクトリのパーミッション設定

```sh
cd /var/www/mt/MT-7.0a2/mt
chmod 755 *.cgi

cd /var/www/mt/MT-7.0a2/mt-static/
chmod 777 support

cd /var/www/mt/MT-7.0a2/
chmod 777 hogehoge
```

詳しくは本家 MT サイトへどうぞ。
[Movable Type の設置 (Linux、BSD、Mac OS X)](http://www.movabletype.jp/documentation/mt6/installation/linux.html)

#### ぼやき
パーミッション設定いじってると、何か、「あー、 cgi じゃー」っていう気分になりませんか。


# MTの構築
*http\://hogehoge/mt/MT-7.0a2/mt/* にアクセスして、サインインボタンからおこなう。
あとは、ブラウザ上で必要な項目を順々に入力していけば、めでたく MT 管理画面に到着します。

お疲れ様でした！　準備完了です。

apache より高速サクサクな再構築が楽しめます。


### 構築前後における諸注意
#### Got an error: Can't locate DBI.pm と怒られたら
perl のライブラリ群を入れておかないと、

> Got an error: Can't locate DBI.pm

などと怒られるかもしれないので、怒られたら、

```
aptitude install libimage-size-perl libfile-spec-perl libdbi-perl libdbd-mysql-perl libhtml-parser-perl libwww-perl libsoap-lite-perl libfile-temp-perl libimage-magick-perl libstorable-perl libcrypt-openssl-dsa-perl libmime-base64-perl libxml-atom-perl libarchive-tar-perl libarchive-zip-perl libio-compress-perl
```

を実行して、諸々インストールしておきます。

参考：
[Debian(Ubuntu) で PerlモジュールをインストールしたいときはCPANを使わなくても良い](https://server-setting.info/debian/perl-module-install-apt.html)


#### オプションのモジュールが見つかりません と怒られたら
必要と思われるものをピックアップしてインストールしていきましょう。
実際、構築時に怒られた項目としては、以下の通りでした。
いずれも、絶対に必要か、というと、そんなこともなさそうですね（サムネイル画像自動生成くらいか？）

```
IPC::Run
MTのイメージドライバとしてNetPBMを利用する場合に必要となります。

Plack
PSGI環境下でmt.psgiを実行する場合に必要となります。

Crypt::SSLeay
Crypt::SSLeayはAOLやYahoo!などのSSLを利用するOpenIDのコメント投稿者を認証する場合、または Google Analytics を利用するために必要となります。

Cache::Memcached
キャッシング機能としてmemcachedを利用する場合に必要となります。

Digest::SHA1
LiveJournal、あるいはOpenIDでコメント投稿者を認証するために必要になります。

XMLRPC::Transport::HTTP::Plack
PSGI環境下でmt.psgiを実行する場合に必要となります。

Cache::File
Yahoo! Japanによるコメント投稿者のOpenID認証を許可する場合に必要となります。

Mozilla::CA
このモジュールは、Google Analytics などで SSL 証明書の検証に必要です。

GD
アップロードした画像のサムネイルを作成する場合に必要となります。

Crypt::DSA
コメント投稿時のサインインが高速になります。

CGI::PSGI
PSGI環境下でmt.psgiを実行する場合に必要となります。

CGI::Parse::PSGI
PSGI環境下でmt.psgiを実行する場合に必要となります。

YAML::Syck
のインストールは必須ではありません。YAML::Tinyよりも、軽量で高速に動作します。

Imager
アップロードした画像のサムネイルを作成する場合に必要となります。

XML::SAX::ExpatXS
XML::SAX::ExpatXSのインストールは必須ではありません。バックアップデータの復元に必要となります。
```

#### ​mt-config.cgi について怒られたら
/var/www/mt/MT-7.0a2/mt/​mt-config.cgi-original となっていて、肝心の mt-config.cgi が存在しない場合は、ファイル名を変更してあげてください。
自分で作って置いても構いません。


#### 管理画面が表示された後になって、ページ URL が開かない場合
* 正しいパスにファイルが生成されているか確認
* 設定 > 全般 > 公開パス > 「サイトURL」と「サイトパス」の設定を確認（ nginx での conf の設定と合っているか）