Movable Type 6 を CentOS 7 にインストールする

# CentOS 7 に Movable Type 6 をインストール
**Movable Type 6** を **CentOS 7** にインストールする手順を解説する。

## システム要件
### 必須要件
[必要インストール環境と、ブラウザ動作環境 : Movable Type ドキュメント](https://www.movabletype.jp/documentation/system_requirements.html)

* Perl 5.8.1 以上（5.18.x を推奨 / Perl 5.22.x 以上は未検証のため推奨されない）
* Web サーバー
 * Apache HTTP Server 2.0 以上
 * Microsoft Internet Information Server 7.5 以上
 * nginx 1.2.0 以上（CGI もしくは PSGI 実行環境が別途必要）
* DB サーバー
 * MySQL バージョン 5.0 以上 (MySQL 5.7 で動作確認)
* Perl モジュール
 * CGI
 * Image::Size
 * File::Spec （バージョン0.8以上）
 * CGI::Cookie
 * LWP::UserAgent
 * DBI (バージョン1.21以上)
 * DBD::mysql

### オプション要件
[Movable Type のオプション機能を利用するための環境 : Movable Type 6 ドキュメント](https://www.movabletype.jp/documentation/mt6/installation/system-option.html)

|Perl モジュール|説明|
|---|---|
|Digest::SHA|パスワードのセキュリティを強固にする場合に必要|
|Plack|PSGI 環境下で mt.psgi を実行する場合に必要|
|CGI::PSGI|PSGI 環境下で mt.psgi を実行する場合に必要|
|CGI::Parse::PSGI|PSGI 環境下で mt.psgi を実行する場合に必要|
|XMLRPC::Transport::HTTP::Plack|PSGI 環境下で mt.psgi を実行する場合に必要|
|HTML::Entities|特殊な文字をエンコードする場合に必要|
|HTML::Parser|トラックバック機能や更新通知機能を利用する場合に必要|
|SOAP::Lite|XML-RPC による作業を行う場合に必要 （バージョン 0.5 以上）|
|File::Temp|ファイルのアップロードで上書きを行う場合に必要|
|Scalar::Util|再構築キューを利用する場合に必要|
|List::Util|再構築キューを利用する場合に必要|
|Image::Magick|画像のサムネイルを作成したり、CAPTCHAを利用する場合に必要<br>（または GD、Imager のいずれかの Perl モジュールか、NetPBMツール）|
|IPC::Run|Movable Type のイメージドライバとして NetPBM を利用する場合に必要|
|Storable|外部プラグインの利用の際に必要となる場合がある|
|Crypt::DSA|コメント投稿時のサインインを高速化したい場合に必要|
|Crypt::SSLeay|AOL や Yahoo! などの SSL を利用する OpenID のコメント投稿者を認証する場合に必要。または、Google Analytics を利用する場合に必要|
|Cache::File|Yahoo! Japan によるコメント投稿者の OpenID 認証を許可する場合に必要|
|MIME::Base64|コメントの認証機能を利用する場合やメール送信に SMTP を利用する場合に必要|
|XML::Atom|Atom API を利用する場合に必要|
|Cache::Memcached|Movable Type のキャッシング機能として memcached サーバーを利用する場合に必要|
|Archive::Tar|バックアップと復元で圧縮の機能を利用する場合に必要|
|IO::Compress::Gzip|バックアップと復元で圧縮の機能を利用する場合に必要|
|IO::Uncompress::Gunzip|バックアップと復元で圧縮の機能を利用する場合に必要|
|Archive::Zip|バックアップと復元で圧縮の機能を利用する場合に必要|
|XML::SAX|復元の機能を利用する場合に必要|
|Digest::SHA1|LiveJournal、OpenID でコメント投稿者を認証する場合に必要|
|Net::SMTP|メールの送信に SMTP を利用する場合に必要|
|Authen::SASL|CRAM-MD5、DIGEST-MD5 / LOGIN を SASL メカニズムとして利用する場合に必要|
|Net::SMTP::SSL|SMTP 認証に SSL を利用する場合に必要 (Movable Type 6.1.2 まで)|
|Net::SMTP::TLS|SMTP 認証に STARTTLS コマンドを利用する場合に必要 (Movable Type 6.1.2 まで)|
|IO::Socket::SSL|SMTP 認証に SSL / STARTTLS コマンドを利用する場合に必要。または、Google Analytics を利用する場合に必要|
|Net::SSLeay|SMTP 認証に SSL / STARTTLS コマンドを利用する場合に必要|
|Safe||
|Digest::MD5||
|Text::Balanced| (ブログ内検索で必要)|
|XML::Parser||
|Time::HiRes|run-periodic-tasks を実行するために必要|
|Mozilla::CA|Google Analytics を利用する場合に必要|
|XML::SAX::ExpatXS|バックアップデータの復元に必要（または、XML::SAX::Expat）|
|XML::LibXML::SAX|バックアップデータの復元に必要|

#### ダイナミックパブリッシング
PHP 5.3 以上。php-mysql モジュールが必要。
Web サーバーとして Apache を使用している場合 .htaccess ファイルが利用可能であることが必要。

## 構築環境例
* CentOS 7.3.1611 (1702)
* Apache 2.4.6 (base)
* Perl 5.16.3(base)
* MySQL 5.7.17 (mysql57-community)
* Movable Type 6.3.3

## Movable Type のダウンロード
### 個人無償版
[Movable Type 個人無償版ダウンロード : 各種お問合せ | シックス・アパート - CMSソフトウェア、サービスを提供](https://www.sixapart.jp/inquiry/movabletype/personal_download.html)
上記ページのフォームにメールアドレスを入力し、利用目的を選択して送信すると、ダウンロード URL が記載されたメールが自動で送られてくる。

### 開発者ライセンス
[開発者登録 | CMS プラットフォーム Movable Type](https://www.sixapart.jp/inquiry/movabletype/developer.html)
上記ページのフォームに各種情報を入力して送信すると、担当者による確認の後、メールで開発者用のライセンス番号が送られてくるので、[ユーザーサイト](https://mtuser.sixapart.jp/)にてライセンス番号を登録することで Movable Type をダウンロードできるようになる。

## インストール環境の構築
### Apache HTTP Server のインストール
```bash
yum install httpd
sed -i.org '/#AddHandler cgi-script/s/#//' /etc/httpd/conf/httpd.conf
systemctl start httpd && systemctl enable $_
```
CentOS 7 では Apache 2.4 がインストールされる。デフォルトでは `.cgi` が機能しないのでコメントアウトされている `AddHandler` の記述を有効にする。
その他の設定については [Apacheセキュリティ設定](http://qiita.com/bezeklik/items/1c4145652661cf5b2271) を参照のこと。

### ファイアーウォールの設定
```bash
firewall-cmd --permanent --add-service=http && firewall-cmd --reload
```
デフォルトでは80番ポートが空いていないので開けてやる必要がある。

### Memcached のインストール
```bash
yum install epel-release
yum install memcached "perl(Cache::Memcached)"
systemctl start memcached && systemctl enable $_
```

### MySQL Community Server のインストール
```bash
yum install https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
yum install mysql-community-server "perl(DBD::mysql)"
sed -i.org 's/\[mysqld\]/\[mysqld\]\ncharacter-set-server=utf8/' /etc/my.cnf
systemctl start mysqld && systemctl enable $_
```
CentOS 7 では MySQL が MariaDB に置き換えられているため、サポート環境の MySQL を利用するには別途公式の MySQL Yum Repository を追加してインストールする必要がある。

#### MySQL の root パスワード変更
```bash
grep "temporary password" /var/log/mysqld.log | awk '{print $11}'
mysql_secure_installation --use-default
```
MySQL 5.7 ではインストール時に root ユーザーに初期パスワードが設定されているので mysqld.log ファイルで確認する。
`mysql_secure_installation` コマンドで root ユーザーのパスワード変更と各種セキュリティ対応を処理する。

#### データベースと DB ユーザーの作成
```bash
cat << "_EOQ_" | mysql -u root -p
CREATE DATABASE `mt` CHARACTER SET 'utf8';
CREATE USER 'mt_user'@'localhost' IDENTIFIED BY 'P@ssw0rd';
GRANT ALL ON mt.* TO 'mt_user'@'localhost';
_EOQ_
```

## Movable Type のインストール
### Movable Type の展開
[Movable Type の設置 (Linux、BSD、Mac OS X) : Movable Type 6 ドキュメント](https://www.movabletype.jp/documentation/mt6/installation/linux.html)

```bash
yum install unzip
unzip MT-6.3.3.zip
mv MT-6.3.3 /var/www/cgi-bin/mt
restorecon -R /var/www/cgi-bin
ln -s /var/www/cgi-bin/mt/mt-static /var/www/html/
chcon -t httpd_sys_content_rw_t /var/www/{html,cgi-bin/{mt,mt/mt-static/support}}
chown apache. /var/www/{html,cgi-bin/{mt,mt/mt-static/support}}
```
ここでは[公式ドキュメント](http://www.movabletype.jp/documentation/mt6/installation/linux.html)を参考に Movable Type 本体のプログラム（「アプリケーションディレクトリ」）は `/var/www/cgi-bin` 配下に配置している。ブラウザからのアクセスは Apache の `httpd.conf` のデフォルトのエイリアス設定により `/cgi-bin/mt/mt.cgi` となる。
「スタティックディレクトリ」はシンボリックリンクを作成しているので注意されたい。

また SELinux がデフォルトで有効になっているため、コンテキストと所有権を変更する必要がある。

## Perlモジュールの追加
`/cgi-bin/mt/mt-check.cgi` にアクセスするとモジュールのインストール状況を確認できる。
なお、このチェックスクリプトはインストール後に `mt-config.cgi` が生成されると機能しなくなる。

### 事実上必須のモジュール
```bash
yum install "perl(Image::Magick)" "perl(Digest::MD5)" "perl(Mozilla::CA)"
```
`Digest::MD5` がインストールされていないと Markdown プラグインの影響で再構築が出来ない。
`Mozilla::CA` がインストールされていないと「SSL 証明書の検証ができません。」というエラーメッセージがダッシュボードに表示される。

### インストールされていないモジュール
```
Archive::Zip       バックアップと復元で圧縮の機能を利用する場合に必要
Archive::Tar       バックアップと復元で圧縮の機能を利用する場合に必要
XML::LibXML::SAX   バックアップデータの復元に必要
XML::SAX::Expat    バックアップデータの復元に必要
XML::SAX::ExpatXS  バックアップデータの復元に必要
```
```
IPC::Run           MTのイメージドライバとしてNetPBMを利用する場合に必要
GD                 アップロードした画像のサムネイルを作成する場合に必要
Image::Magick      アップロードした画像のサムネイルを作成する場合に必要
Imager             アップロードした画像のサムネイルを作成する場合に必要
```
```
IO::Socket::SSL    SMTP認証にSSLまたは、STARTTLSコマンドを利用する場合、または Google Analytics を利用する場合に必要
Net::SSLeay        SMTP認証にSSLまたは、STARTTLSコマンドを利用する場合に必要
Net::SMTP::SSL     SMTP認証にSSLを利用する場合に必要
Net::SMTP::TLS     SMTP認証にSTARTTLSコマンドを利用する場合に必要
```
```
CGI::PSGI          PSGI環境下でmt.psgiを実行する場合に必要
CGI::Parse::PSGI   PSGI環境下でmt.psgiを実行する場合に必要
Plack              PSGI環境下でmt.psgiを実行する場合に必要
XMLRPC::Transport::HTTP::Plack PSGI環境下でmt.psgiを実行する場合に必要
```
```
Cache::Memcached   キャッシング機能としてmemcachedを利用する場合に必要
Cache::File        Yahoo! Japanによるコメント投稿者のOpenID認証を許可する場合に必要
Authen::SASL       CRAM-MD5、DIGEST-MD5又はLOGINをSASLメカニズムとして利用する場合に必要
Crypt::SSLeay      SSLを利用するOpenIDのコメント投稿者を認証する場合、または Google Analytics を利用するために必要
Crypt::DSA         コメント投稿時のサインインが高速になる
Digest::MD5        Markdown形式を利用するために必要
Digest::SHA        パスワードの高度な保護のために必要
Digest::SHA1       LiveJournal、あるいはOpenIDでコメント投稿者を認証するために必要
Mozilla::CA        Google Analytics を利用する場合に必要
HTML::Parser       トラックバック機能や更新通知機能を利用する場合に必要
HTML::Entities     特殊な文字をエンコードするときに必要だが、構成ファイルにNoHTMLEntitiesを設定すればこの機能を無効化可能
XML::Atom          Atom APIを利用する場合に必要
XML::Parser        アクションストリームを利用するために必要
YAML::Syck         YAML::Tinyよりも、軽量で高速に動作
```
これまでの手順だと Movable Type で要求される上記のライブラリーがインストールされていない。

### Yum リポジトリーの追加と CPAN のインストール
```bash
yum install perl-CPAN "perl(Module::Build)"
```
ここでは原則的に `yum` コマンドでの管理を優先している。
`yum` リポジトリーのライブラリーの方がバージョンが古い場合が多いが、コンパイル済みのためインストールが早く済む。

### バックアップ関連ライブラリー
```bash
yum install "perl(Archive::Zip)" "perl(Archive::Tar)" "perl(XML::LibXML::SAX)"
```
```bash
yum install expat-devel "perl(ExtUtils::MakeMaker)" "perl(Test::Simple)" "perl(XML::Parser)"
cpan XML::SAX::Expat XML::SAX::ExpatXS
```
`Archive::Zip` `Archive::Tar` `XML::LibXML::SAX` は `yum` からインストールできる。
`XML::SAX::ExpatXS` は `expat-devel` がインストールされていないとコンパイルでこける。
### 画像関連ライブラリー
```bash
yum install "perl(Image::Magick)"
yum install "perl(IPC::Run)"
yum install "perl(GD)"
cpan Imager
```
いずれかひとつをインストールすれば良いと思われる。
`GD` は依存関係が少なく、`ImageMagick` は高機能である。
### SMTP認証関連ライブラリー
```bash
$ yum install "perl(IO::Socket::SSL)" "perl(Net::SSLeay)" "perl(Net::SMTP::SSL)"
```
```bash
$ yum install "perl(Digest::HMAC)"
$ cpan Net::SMTP::TLS
```
### PSGI関連ライブラリー
```bash
$ yum install "perl(CGI::Parse::PSGI)" "perl(Plack)"
```
```bash
$ yum install "perl(CGI)"
$ cpan CGI::PSGI
$ yum install "perl(SOAP::Transport::HTTP)" "perl(XMLRPC::Transport::HTTP)"
$ cpan XMLRPC::Transport::HTTP::Plack
```
### その他ライブラリー
```bash
yum install "perl(Cache::Memcached)"
yum install "perl(Authen::SASL)"
yum install "perl(Crypt::SSLeay)"
yum install "perl(Crypt::DSA)"
yum install "perl(Digest::MD5)"
yum install "perl(Digest::SHA)"
yum install "perl(Digest::SHA1)"
yum install "perl(Mozilla::CA)"
yum install "perl(HTML::Parser)"
yum install "perl(HTML::Entities)"
yum install "perl(XML::Parser)"
yum install "perl(YAML::Syck)"
```
```bash
$ yum install "perl(Heap::Fibonacci)" "perl(File::NFSLock)" "perl(IO::String)" "perl(DB_File)"
$ cpan Cache::File
$ cpan XML::Atom
```