Vagrant+Movable Type+AWS S3を使って月額10円～でサイトを運用する　～導入編～

# 目次
* 導入編
* [サンドボックス編](http://qiita.com/histori/items/28f97e5e0d8d96979d8b)
* [コマンドラインから配信編](http://qiita.com/histori/items/981268f475044cc42561)


#概要
パソコン上に作成した仮想マシンに自動インストールした静的出力型のCMSから生成したコンテンツをAWS S3にアップロードする

#特徴
* だれでも簡単に、CMSを使ったサイト運用環境を手に入れられる
* CMSサーバと公開サーバを分けることでコストを最小化出来る
* ターミナルソフト、FTPソフトどちらも不要

#潔さ
* 石ころを積み重ねたセキュリティ（PCの紛失盗難だけには注意）
* 原石を磨かない美意識（user名、database名等は初期設定のまま）

#動作環境
* Windows/Mac（Windows環境しか動作確認していません）
* VirtualBoxインストール済
* Vagrantインストール済

#用意するもの
* Movable Typeのソフトウェア（商用ソフトなのでライセンスは遵守する）
* AWSアカウント

#手順

##仮想マシンの作成

自分のパソコンの任意の場所に「MT」というフォルダを作成する。
>例：C:\Users\username\MT

コマンドプロンプトを立ち上げて「MT」フォルダに移動する
`$ cd MT`
仮想マシンを立ち上げる
`$ vagrant init chef/centos-6.5`

`$ vagrant up`

※仮想マシンの立ち上げ時にSSHが通らない場合は[こちら](http://qiita.com/histori/items/3c487a86fa65626c7a02)を参照

##自動インストールに必要なファイルの設置
「MT」フォルダ内に次の3つのファイルを設置する

* MovableTypeのZIPファイル
* provision.sh（下記、provision.sh内の内容をすべてコピーして、メモ帳等のテキストエディタに貼り付けて、ファイル名「provision.sh」で保存）

```shell:provision.sh
#!/bin/sh
sudo yum install -y unzip

# Perl
sudo yum -y install perl
sudo yum -y install perl-CGI

# Apache
sudo yum -y install httpd
echo "AddHandler cgi-script .cgi .pl" >> /etc/httpd/conf/httpd.conf

# MySQL
sudo yum -y install mysql-server
mysql -u root mysql -e "GRANT ALL PRIVILEGES ON *.* TO root@'%';"
echo "[client]" >> /etc/my.cnf
echo "default-character-set = utf8" >> /etc/my.cnf
echo "[mysqld]" >> /etc/my.cnf
echo "character-set-server = utf8" >> /etc/my.cnf

# Perl Module
sudo yum -y install netpbm*
sudo yum -y install perl-YAML
sudo yum -y install cpan
yes '' | cpan -i CGI
yes '' | cpan -i Image::Size
yes '' | cpan -i IPC::Run
yes '' | cpan -i File::Spec
yes '' | cpan -i CGI::Cookie
yes '' | cpan -i LWP::UserAgent
yes '' | cpan -i DBI
yes '' | cpan -i DBD::mysql

# Movable Type
sudo mkdir /var/www/cgi-bin/mt
unzip /vagrant/MT-*.zip
sudo cp -r /home/vagrant/MT-*/mt-static/ /var/www/html/
sudo cp -r /home/vagrant/MT-*/* /var/www/cgi-bin/mt/
sudo cp -r /home/vagrant/MT-*/*/ /var/www/cgi-bin/mt/
sudo rm -rf /home/vagrant/MT-*/
sudo cp /vagrant/mt-config.cgi /var/www/cgi-bin/mt
sudo chmod 755 /var/www/cgi-bin/mt/*.cgi
sudo chmod 777 /var/www/html/
sudo chmod 777 /var/www/html/mt-static/support/

# iptables
service iptables stop
chkconfig iptables off

# service
sudo chkconfig mysqld on
sudo chkconfig httpd on

# timezone
cp /usr/share/zoneinfo/Japan /etc/localtime
echo "TZ=Japan" >> /etc/sysconfig/httpd
echo "export TZ" >> /etc/sysconfig/httpd

# daemon restart
/etc/init.d/httpd restart
/etc/init.d/mysqld restart
```

* mt-config.cgi

```txt:mt-config.cgi
Movable Type Configuration File
##
## This file defines system-wide
## settings for Movable Type. In
## total, there are over a hundred
## options, but only those
## critical for everyone are listed
## below.
##
## Information on all others can be
## found at:
##  http://www.movabletype.jp/documentation/config

#======== REQUIRED SETTINGS ==========

CGIPath        /cgi-bin/mt/
StaticWebPath  /mt-static/
StaticFilePath /var/www/html/mt-static

#======== DATABASE SETTINGS ==========

ObjectDriver DBI::mysql
Database test
DBHost localhost

#======== MAIL =======================
EmailAddressMain noreply@example.com
MailTransfer sendmail
SendMailPath /usr/lib/sendmail

DefaultLanguage ja

ImageDriver NetPBM

```

>例：
>C:\Users\username\MT\MT-6_1_2.zip
>C:\Users\username\MT\provision.sh
>C:\Users\username\MT\mt-config.cgi

###パソコン／仮想マシン間の共有フォルダを作成する
「MT」フォルダ内に「www」フォルダを作成し、更にその下に「html」フォルダを作る

* フォルダ名：\www\html

> 例：C:\Users\username\MT\www\html

仮想マシン起動時に、自動的に「MT」フォルダ内に生成された「Vagrantfile」をメモ帳等で開き以下をend行の前に追記する

```rb:Vagrantfile
Vagrant.configure(2) do |config|

 config.vm.network "private_network", ip: "192.168.33.10"
 config.vm.synced_folder "../MT/www/html", "/var/www/html"
 config.vm.provision :shell, :path => "provision.sh"
end
```

仮想マシンを再起動する
`$ vagrant reload`

##プロビジョニングの開始
MovableTypeほかライブラリの自動インストールを始める
`$ vagrant provision`

～10分以上掛かるので、鼻くそほじりながら待つ～

インストールが終わる

##MovableTypeの初期設定とサイトの構築
[管理画面](http://192.168.33.10/cgi-bin/mt/mt.cgi)にアクセスする
`http://192.168.33.10/cgi-bin/mt/mt.cgi`
「アカウントの作成」画面が表示されるので適当なアカウントを作成しログインする

とりあえずテキトー記事を1つ投稿して、再構築ボタンをクリックする

##AWS S3にアップロード
「MT」フォルダの\www\html\フォルダ以下のファイル及びフォルダをS3の管理画面からアップロードする
> 例：C:\Users\username\MT\www\html\index.htmlほか

アップロード方法は[Amazon S3 での静的ウェブサイトのホスティング](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/WebsiteHosting.html)で確認する
S3でホスティング？って人は[月額10円～でレンタルサーバーを始める方法] (https://aws.amazon.com/jp/s3-hosting/)を確認する

S3側の表示で404,403エラーが出る場合は、[こちら](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/HostingWebsiteOnS3Setup.html)を参照

仮想マシンをシャットダウンする
`$ vagrant halt`

##後日、サイトを更新する
コマンドプロンプトから
`$ cd MT`
`$ vagrant up`
仮想マシンが立ち上がってから[管理画面](http://192.168.33.10/cgi-bin/mt/mt.cgi)にアクセスする