ひょんなことから、AWS(Amazon Web Service)がアカウント作成から12ヶ月間は無料で使える(厳密には、一部の機能が無料)ことを知ったので、独自ドメイン(できれば複数ドメイン)でWordPressを立ち上げてみようと思い立った。
私のような、なんちゃってエンジニアの人間に、共用のレンサバよりは複雑そうなAWSが使いこなせるのか。不安半分期待半分でスタート。
1.まずはアカウントを作成
何はなくとも、まずはアカウント作成。
AWSのサイト上にわかりやすく説明されているので、そちらに従えば簡単に作成完了する。
必要なものとしては、認証に使用する電話番号とクレジットカード情報。
2.続いてAWSの中のEC2で「インスタンス」なるものを作成
基本的に、AWSは英語の説明が多く、例え日本語で書かれていても、翻訳調で頭に入ってきにくい。
そこで、ネット上の先人たちの記録を十二分に活用させてもらうことにした。
インスタンスの作成は『わずか5分!? AWSのEC2でクラウドなウェブサーバーを構築してみた』を参考にさせていただき、インスタンスを起動するところまでは問題なくクリア。
ここで、はたと、EC2とS3のどちらがWPサイトを構築するのに適しているのか悩む
というのも、「AWS WordPress」などのワードで検索していると、『wordpressをAmazon S3で運用する方法』や『WordPressをStaticPress+Amazon S3+Vagrantでセキュリティ万全にする方法』といったサイトを目にしたからだ。
ただ、上の2サイトの記述をみても、S3ではphpは動かないことは明らかなため、やはり当初の目標通りEC2でWPサイト構築を目指す。
3.SSHでアクセス
私は普段WindowsのPCからputtyを使っているのだが、2.で作った拡張子が.pemのKeyPairsをprivate keyに指定しても接続できない。。。
困って検索していたら、AWS上に日本語で丁寧な説明があった。
(⇒PuTTY を使用して Windows コンピュータから Amazon EC2 インスタンスに接続する)
こちらに従ってputtyGenをPCにインストールして.pemファイルから.ppkファイルを作成し、それをprivate keyに指定することで、無事SSH接続することができた。
[adsense]
4.Apacheをインストール&起動するも、なぜかWebでアクセスできない
●Apacheをインストール
# yum install httpd
●Apacheを起動
# /etc/init.d/httpd start
もしくは
# service httpd start
ここまでは、問題なし。
しかし、EC2の管理画面に表示されるデフォルトのURL(例 http://ec2-54-152-136-28.us-east-2.compute.amazonaws.com)にアクセスできない。
調べた結果、2.の設定で80番ポートの設定をするのが抜けていたのが原因だった。
EC2のコンソールで、NETWORKING & SECURITY の項目の下にある Security Groups を選択し、default じゃないほうのグループを選択。下部の Inbound タブを選択するとおそらく22番ポートしか設定されていないと思うので、Edit ボタンを押し、Add Rule ボタンを押し、[HTTP] [80] を設定することで設定完了。
これで無事、awsドメインのページにアクセスできるようになった。
5.httpd.conf を編集
セキュリティの強化、そして.htaccessを使えるようにするために(WordPressのパーマリンクをデフォルトから変える場合は必須)/etc/httpd/conf/httpd.conf を編集。
●クライアントに送るサーバー情報を最小限にする
ServerTokens Prod
※Prod の代わりに ProductOnly でも同じ。
● Options を FollowSymLinks から None に変更してオプションを無効にする。
<Directory /> Options None AllowOverride None </Directory>
● <Directory “/var/www/html”>の下の Options の Indexes を削除してドキュメントルートのファイル一覧を表示させない。また、AllowOverride を None から All に変えて.htaccessの使用を許す。
Options FollowSymLinks
AllowOverride All
●エラーページにApacheのバージョン情報を表示させない。
ServerSignature Off
httpd.conf を編集後、反映させるためにはapacheの再起動が必要なことをお忘れなく。
6.サーバー起動時にApacheが自動起動するように設定
現在の状態を確認にするには
# chkconfig –-list httpd
最初は以下のようになっている。
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
そこで
# chkconfig httpd on
とすると
# chkconfig –-list httpd httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
のように変わる。
なお、0~6は以下のランラベルを表す。
0 : シャットダウンに向かう状態
1 : シングルユーザモード
2 : 使用されない
3 : 標準的な状態
4 : 使用されない
5 : GUIでログインする状態
6 : 再起動に向かう状態
7.phpをインストール
# yum install php
ためしにphpの簡単なコードを書いたファイルをアップしたら問題なく動いた。
また、デフォルトの設定で、html内でphpを書くことができる仕様になっていた。
必要に応じてphp.iniを編集すると。
8.独自ドメインを設定
この設定に関しては、『Elastic IP アドレスの設定と Route 53 から独自ドメインの割当』のサイトの手順に従った。
たいした問題ではないが、Elastic IPを取得して設定すると、それまでとIPが変わるため、amazonドメイン&sshのサーバー名も変わってしまうことに一応注意。
また、レコードセットの指定の仕方だが、サブドメインを一切使わない場合は
上のサイトに書いてある通り、
Name: example.com
Type: A – IPv4 address
Alias: No
TTL: 300
Value: サーバーのIPアドレス
Routing Policy: Simple
でOK。
WWWありと、WWWなしのみ設定したいなら、以下のレコードも追加する。
Name: www.example.com
Type: A – IPv4 address
Alias: Yes
Alias Target: example.com.
Routing Policy: Simple
9.マルチドメインを設定
作業は2つある。
まずは、Route 53 のマネージメントコンソールで、[Hosted Zones] ⇒ [Create Hosted Zones] でドメインを追加。
続いて、サーバー上の httd.conf の最後に、以下の記述を追加する。
NameVirtualHost *:80 <VirtualHost *:80> ServerName firstdomain.com # 最初に設定したドメイン DocumentRoot "/var/www/html" # デフォルトのドキュメントルート </VirtualHost> <VirtualHost *:80> ServerName newdomain.com # 新たに追加するドメイン DocumentRoot "/var/www/html" # 追加ドメインのドキュメントルート </VirtualHost>
3つ目以降のドメインを追加する場合は、
<VirtualHost *:80> ServerName newdomain.com # 新たに追加するドメイン DocumentRoot "/var/www/html" # 追加ドメインのドキュメントルート </VirtualHost>
を足していけば良い(はず。未確認)。
10.php-mysqlをインストール
phpからmysqlをさわるために必要な拡張モジュール「php-mysql」をインストール。
# yum install php-mysql
これを入れずに、WordPressをインストールしようとすると、「お使いのサーバーのPHPではWordPressに必要なMySQL拡張を利用できないようです。」というエラーメッセージが表示されるので注意。
11.mysqlをインストール&起動
●mysqlをインストール
# yum install mysql-server
●mysqlを起動
# /etc/rc.d/init.d/mysqld start
もしくは
# service mysqld start
12.mysqlの設定(データベースの作成、ユーザーの作成、権限付与)
AWSのオフィシャルチュートリアル『Amazon EC2 を使った WordPress ブログのホスティング』に従えばOK。
13.WordPress のインストール
これは、他のレンタルサーバーと何ら変わりはない。
以上で設定完了である。
わたしの場合、8.の php-mysql をインストールする工程を抜かしたままWPのインストールに進みエラーが発生。
その後、php-mysql をインストールしたものの解決されず焦ったが、Apache を再起動することで問題は解決した。
設定を変えても問題が発生する時など、Apacheを再起動させてみるといいかもしれない。
必要に応じて phpMyAdmin のインストール&設定
標準のリポジトリのままでは、おなじみの yum を使って phpMyAdmin をインストールすることができないため、「RPMForge」のリポジトリを導入する。
# cd /usr/local/src # wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm # rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
そうした上で、リポジトリに「rpmforge」を指定してphpMyAdmin をインストール。
# yum -y --enablerepo=rpmforge install phpmyadmin
続いて、設定。
phpMyAdmin の config ファイル(/usr/share/phpmyadmin/config.inc.php)を編集。
$cfg[‘blowfish_secret’] = ’何でも構わないのでここにランダムな文字列を入力’
さらに「/etc/httpd/conf.d/phpmyadmin.conf」も編集。
元は 127.0.0.1 からのみアクセス可能となっているところ、自分がアクセスするホスト・IPなどを指定する。
<Directory "/usr/share/phpmyadmin"> AllowOverride all Order Deny,Allow Deny from all Allow from 【自分のホストor IP address】 </Directory>
ホスト・IPが指定できない場合は、セキュリティ的に避けたいが以下のように全開放せざるをえない。
<Directory "/usr/share/phpmyadmin"> AllowOverride all Order Allow,Deny Allow from all </Directory>
以上!