Amazon EC2は新規登録者に無料枠というのを設けてまして、新たに利用する方はマイクロインスタンスっていう一番安いプランがほぼ無料で使えます。しかもS3とか他のサービスも諸々おまけが付いてます。
今回はそれを使って、EC2でWordPressを立ち上げましょうって話と、マイクロインスタンスだから出来る限りリソース使わないように、でも複数のサイト運営したいよねっていう欲張りな要望にも応えた内容で書いてみました。基本的には、をかもと先生の記事を大いに参考にしてます。
一つのサーバーでfoo.example.com, bar.example.comの2つのWordPressサイトを運用することを考えています。2つ以上でも構いません。
Amazon Web Serviceの契約
ここはすでにおわちゃった作業なので省略します。。。
こちらからサインアップしてください。
契約にはクレジットカード必須です。ログインアカウント作って、連絡先登録します。電話を使った身元確認があります。でも完全に自動化されたシステムなので待ち時間はないです。どういうものかというと、Web上で登録作業をして電話番号を入力すると、画面上に番号が出てきます。それと同時にその電話番号に電話がかかってきます。自動音声ガイダンスにしたがって画面上の番号を電話からプッシュすることで行われます。機械音声なので非コミュの人も安心して下さい。
インスタンスの起動
契約が完了したら、AWS Management Consoleからインスタンスを起動します。Management Consoleでほとんどの作業が行えるので楽チンです。(以前はコマンドがメインでした。)インスタンスというのは仮想サーバーみたいなものです。
リージョンを東京にして「Launch Instance」から、インスタンスを起動してみます。リージョンとは仮想サーバーの物理的な位置です。日本からなら東京に合ったほうが速いです。別に東京でなくても構いません。
Create a new instanceの画面では、Quicklaunchを選択して起動する構成を選びます。
ログインするための鍵ペアを作成します。適当に名前をつけてDownloadします。ここでダウンロードするのは秘密鍵です。これがなければログインできなくなるので大切にしてください。起動するOSのイメージは今回はAmazon Linuxの32bit版を選びます。Amazon Linuxはすべてのリージョンで利用可能なので一番確実に用意可能です。32bitでないと無料枠にならないのでご注意を。
Continueを押して継続します。
確認画面です。Typeがt1.microになっているのを確認してください。もしなっていなかったら、Edit detailsでt1.microにしてください。これがマイクロインスタンスという意味です。違うのにすると無料枠じゃなくなります。
Launchで起動します。
左側のメニューからInstancesを選択すると、インスタンスの一覧が見られます。おそらく今起動したインスタンスもすぐにrunnningという緑色のステータスになっているはずです。もしまだ起動していなければ少し待てばこの状態になります。仮想サーバーを立ち上げる事ができました。
固定IPの取得
起動したサーバーはpublicなIPアドレスを持っていますが、これは再起動したりすると変わる可能性があります。(特に障害時)固定IPを確保して割り当てます。固定IPは確保してインスタンスに割り当てた状態であれば無料なのですが、確保だけしてインスタンスに割り当てないでキープだけしておくと課金対象になるので注意してください。私はインスタンスを停止して課金を止めたつもりが、このIPだけが確保されっぱなしになってわずかに課金されたことがあります。
左側のメニューから、Elastic IPsを選択し、「Allocate New Address」からIPアドレスを確保します。EIP used inはEC2を選択します。
確保したIPアドレスを、先ほどのインスタンスに紐付けます。IPアドレスを選択し、「Associate Address」から先ほどのインスタンスIDを選んで紐付け完了です。
すぐにこのIPアドレスで接続可能になります。
ドメインに対してこのIPアドレスを関連付けておきましょう。今回は一つのサーバーでfoo.example.com, bar.example.comの2つのWordPressサイトを運用することを考えていますので、両方のドメインのAレコードでこのIPアドレスを設定します。反映が待ち遠しい間、hostsファイルにでも書いて作業します。
セキュリティグループの設定
EC2内で動作するサーバーは、セキュリティグループというグループ単位でファイアウォールのような設定ができます。デフォルトではsshしか通らないようになっていますので、httpを通すように設定します。
Security Groupsから、自分のインスタンスに設定されているSecurity Groupを選んで(quick-launchなど)Inboundの設定にポート80を追加します。
「Apply Rule Changes」を押して反映させます。
サーバー側の設定
インスタンスの設定が終わったので、サーバにsshでログインして作業します。sshでログインするためには、先ほど作成しダウンロードしたKey-Pairが必要になります。
Amazon Linuxのデフォルトのユーザーはec2-userです。公開鍵認証でのみログイン可能です。鍵ファイルのパーミッションを適切に設定してからログインします。
Windowsの場合は、puttyを使う人も多いと思います。その場合は*.pemファイルをppkファイルに変換して使用してください。参考
$ chmod go-rw ec2-www.pem
$ ssh -i ec2-wwww.pem ec2-user@foo.example.com
The authenticity of host '***********' can't be established.
RSA key fingerprint is *************.
Are you sure you want to continue connecting (yes/no)? yes
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
まずは、最初にアップデートして最新の状態にしておきます。
$ sudo yum update
nginx、php,mysqlなどを、もろもろインストールします。
$ sudo yum install nginx spawn-fcgi php-cgi php-mysql mysql-server
$ sudo /etc/init.d/nginx start
ここでnginxで既定のサイトが見られることをブラウザで確認しました。セキュリティグループの設定で80ポートが開放されていることのチェックになります。
このへんからもうrootで作業しました。
nginxのhtmlフォルダをコピーして、foo用のwordpressフォルダを作ります。あとでbar用のも作成します。
# cd /usr/share/nginx
# cp -R html foo
# cd foo
# wget http://ja.wordpress.org/wordpress-3.3.1-ja.tar.gz
# tar xvzf wordpress-3.3.1-ja.tar.gz
# mv wordpress/* .
# rm index.html
# chown -R nginx.nginx .
fastcgiを設定します。これはなんで起動スクリプトが入ってこないの?
起動スクリプトはこれを。https://gist.github.com/1575105
# chmod a+x /etc/rc.d/init.d/php-fastcgi
# chkconfig --add php-fastcgi
# chkconfig php-fastcgi on
# /etc/init.d/php-fastcgi start
nginxの設定。/etc/nginx/nginx.confの内容を以下のように。
https://gist.github.com/1575092
foo.exmaple.comと、bar.example.comの2つのホストについて記述してます。まだフォルダはfooしか作ってないですが。
ここまでやったら、ブラウザでアクセスしてWordPressの初期設定が起動することを確認します。
データベースの設定はまだしてないので、そこで保留してデータベースを設定します。
wordpressユーザを作成し、データベースwordpress_fooとwordpress_barを作成します。ユーザーはわけませんでした。
# /etc/init.d/mysqld start
mysqladmin -u root password '自分のパスワード'
mysql -u root -p mysql
grant all on *.* to wordpress@localhost identified by 'wordpressユーザ用のパスワード';
mysql> create database wordpress_foo default character set utf8;
mysql> create database wordpress_bar default character set utf8;
WordPressの初期設定インストール画面にもどって、データベースの設定をします。データーベース名を「wordpress_foo」にします。あとは作成したとおり。
これでfooサイトが出来上がりました。
もう一つのwordpressサイトbarは、fooサイトをまるごとコピーし、オーナー変更、wp-config.phpを削除してから、bar.example.comでブラウザでアクセスして再度インストールし直します。これで別フォルダ、別データベースでbar.example.comが動作します。
# cd /usr/share/nginx
# cp -R foo bar
# chown -R nginx.nginx bar
# rm bar/wp-config.php
お疲れ様でした!
EC2のマイクロインスタンスは、新規加入者は1年間ほぼ無料で使えますが(転送量などにも課金があるので大量データの配信などで無料枠を超えると課金があります。)1年後はどうするのか?
それ以降はリザーブドインスタンスという年間契約割引を使うことで、10数ドルぐらいまでの料金になります。最初のオンデマンドインスタンスは時間単位の契約ですが、前払い年間契約することで割引がされるオプションです。
この契約で2年目以降もさくらのvps相当の価格で使用できると思います。
10日でおぼえる WordPress 入門教室 [WordPress 3.x対応]
「EC2のMicroインスタンス + nginx + fastcgi + wordpressで複数サイトの運用!しかも新規は1年無料!」への1件のフィードバック