2009-02-11 22:30:04
Canonical公認AMIはとりあえず置いておいて、前にApache2をインストールして動作確認したところからの続きである。
PHP5、MySQLをインストールする。
apt-get install php5-cli
apt-get install libapache2-mod-php5
apt-get install mysql-server
*rootのパスワード設定を求める画面が出てくるので入力
apt-get install php5-mysql
/etc/mysql/my.cnfに以下の2行を追加。
[mysqld]
default-character-set = utf8
skip-character-set-client-handshake
/etc/php5/apache2/php.iniを少し修正。
magic_quotes_gpc Off
mbstring.language Japanese
以下略
一通り設定したら、apacheの設定更新を
/etc/init.d/apache2 reload
とやって反映させる。
pythonとrubyは入っていたので、python-mySQLdb libapache2-mod-pythonだけ追加しておく。あと、phpmyadminもインストール。
MySQLの名前もパスワードもないユーザを削除し、新たに一人ユーザを追加して、ログインできることを確認する。これで、MySQLは大丈夫だと思ったら、文字化けで苦しむ。
結局
# /etc/init.d/mysql reloadでは駄目で、
# /etc/init.d/mysql restartとして初めて設定が反映されるのだ。これで6時間くらい無駄にした。
下のようになっていれば、日本語が文字化けせずにUTF8で統一できる。
mysql> show variables like "char%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)ここまでは、Amazon EC2とは全然関係なくて、通常のUbuntuの使い始めの設定なのだ。でもこれが済まないと先に進めないので仕方がない。
さて、Amazon Elastic Block Store (EBS)にMySQLのデータベースを置いて、インスタンスが停止されてもデータが消えないようにしてみよう。Running MySQL on Amazon EC2 with Elastic Block Storeに書いてあるとおりにやればいいだけだが。ときおり、日本語のサイト、たとえば「shibataismの日記:Amazon Elastic Block Store(EBS)でmysqlを動かしてみたよ」なども参考にしながら。
まず、instance id(i-xxx001z2というような記号)とzone(例えばus-east-1a)を控えておく。次に、SSHでログインして、xfsprogsをインストールする。一旦ローカルシステムに戻って、
$ ec2-create-volume -z us-east-1a -s 1というコマンドでEBS volumeを作る。最後の1という数字が1GBの容量のものを作るという意味である。後で増やせるらしいが、やり方は知らない。volume id(vol-VVVV1111のようなもの)を確認して(EC2 consoleでも確認できる)、
$ ec2-attach-volume -d /dev/sdh -i i-IIII1111 vol-VVVV1111とやって、volumeとinstanceの対応付けを行う。ここで、EC2のシステムに戻って、
# mkfs.xfs /dev/sdh # echo "/dev/sdh /vol xfs noatime 0 0" >> /etc/fstab # mkdir /vol # mount /volというようにしてマウントする。すると突然、SSH でアクセスできなくなる。 httpdサーバもページを提示しなくなる。全く無反応なのだが、EC2 consoleではインスタンスは稼働中との表示が出ている。どうしたらいんだ? 助けを求めてネット上を彷徨うが、解らない。今までの苦労が水の泡になるのだろうか。また一からやり直しなんだろうか。目の前が真っ暗になり、全人類に向かって呪いの言葉を発してみたりしても気分は晴れない。
何度か再起動したら、また突然繋がるようになった。よかった。
一旦MySQLを止めて(/etc/init.d/mysql stop)、訳も解らないまま、
mkdir /vol/lib /vol/log mv /var/lib/mysql /vol/lib/ mv /var/log/mysql /vol/log/ test -f /vol/log/mysql/mysql-bin.index && perl -pi -e 's%/var/log/%/vol/log/%' /vol/log/mysql/mysql-bin.indexとやってみる。次に、
cat > /etc/mysql/conf.d/mysql-ec2.cnf <とすればいいらしい。これで、大丈夫なのか。今ひとつ自信がないのだが、動いているようなので、多分いいのだろう。 最後にIPアドレスについて。インスタンスを起動すると、例えば、ec2-67-202-1-180.compute-1.amazonaws.comというようなPublic DNSが与えられるが、これが即ちURLである。IPアドレスは最初のec2-以下の4つの数値で示されている。これでアクセスできるけれども、覚えづらいし、インスタンスを一度止めると、再度起こしてきたときにはまた別の値が与えられる。私はnakano.no-ip.orgでアクセスできればそれでいいので、
# apt-get install noip2として、IPアドレスをNo-IPに知らせるアプリケーションをインストールする。インストール途中で、No-ipのIDやパスワードを訊かれ、続いて設定条件も訊かれるので答えていけば、設定完了と同時に起動する。これでnakano.no-ip.orgでアクセスできるようになった。これが読めているというのがその証拠である。このとき、引っ越しなどで前に同じURLで設定していた自宅サーバでもある場合は(私のことだ)、自宅サーバのnoip2を停止しておかないと混乱するので忘れないように気をつけなければならない。AMIやEBSのスナップショットの保存などについてはまた後ほど。