上記で以前用意した環境に、 WordPressを載せるためにLAMP環境(Apache Webサーバ、PHP、MySQL)を構築する。Webサーバ1台で作っていたので、同サーバ上にMySQLも構築してしまいます。DBだけでも別途MultiのRDS(MySQL)で作ればSPOFも減るので少し可用性は上がるけど、そもそも個人使用なのでそこまで考慮してません。 今回作業前に、Webサーバーのインスタンスだけ少し変更して、small -> microにしてます。
参考: チュートリアル: Amazon Linux AMI を使用して LAMP ウェブサーバーをインストールする - Amazon Elastic Compute Cloud
- AWS EC2のサーバ基本設定をする。
- LAMPなWebサーバを構築する。
AWS EC2のサーバ基本設定をする。
- タイムゾーンをUTCからJSTに変更する。
$ sudo cp -i /usr/share/zoneinfo/Japan /etc/localtime 2016年 1月 24日 日曜日 23:06:23 JST
- 日本語設定に変更する。
$ sudo vi /etc/sysconfig/i18n LANG=ja_JP.UTF-8
- Amazon Linuxのデフォルトのセキュリティ設定を確認する。
Amazon Linuxでは、ファイアーウォールなどセキュリティ設定は、
基本にSecurityGroups側で行うもののため、SELinux、iptablesはデフォルトで無効化されている。
- SELinuxが無効化されていることを確認する。
$ getenforce Disabled
- iptablesも無効化されていることを確認する。
(chkconfig上は自動起動するようになっている)
$ sudo /etc/init.d/iptables status iptables: ファイアウォールが稼働していません。 $ chkconfig iptables --list iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
- SELinuxが無効化されていることを確認する。
- スワップ(swap)ファイルを作成する。
Webサーバ用のEC2インスタンスタイプをsmallからmicroにしたことでswap領域がなくなっているので、そのままでいると out of memoryとか発生してしまうから自分でswap領域を準備する。
※small, mediumだと予めmkswapされた900MBの領域が付いてくる。
medium以上のときにエフェメラルディスクに作る場合の参考に インスタンスストアスワップボリューム - Amazon Elastic Compute Cloud
ddコマンドでスワップファイルを作成する。$ free total used free shared buffers cached Mem: 1019452 979684 39768 140 141440 619392 -/+ buffers/cache: 218852 800600 Swap: 0 0 0 $ sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
- 作成したスワップファイルのパーミッションを644から600に変更する。
(swapon実行時に、警告メッセージ「swapon: /swapfile: 安全でない権限 0644 を持ちます。 0600 がお勧めです」が表示されるため)
$ sudo chmod 600 /swapfile
- スワップ(swap)領域を作成する。
$ sudo mkswap /swapfile
- スワップ(swap)領域を有効化する。
$ sudo swapon /swapfile $ sudo swapon -s Filename Type Size Used Priority /swapfile file 2097148 0 -1 $ free total used free shared buffers cached Mem: 1019452 983180 36272 140 141440 621184 -/+ buffers/cache: 220556 798896 Swap: 2097148 0 2097148
- スワップ(swap)領域の自動マウント設定をする。
$ sudo cp -p /etc/fstab /etc/fstab.org $ sudo vi /etc/fstab # LABEL=/ / ext4 defaults,noatime 1 1 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /swapfile swap swap defaults 0 0
- スワップ(swap)領域が自動マウントされるかを確認する。
マネジメントコンソールから再起動を実行することで、
再起動完了後にswap領域が自動マウントされているか確認する。
$ free total used free shared buffers cached Mem: 1019452 124152 895300 60 8128 69068 -/+ buffers/cache: 46956 972496 Swap: 2097148 0 2097148
- すべてのソフトウェアパッケージを最新の状態にする。
$ sudo yum update -y
Apache Webサーバを構築する。
- ミドルウェア関連の準備として、まずはApache Webサーバーをインストールする。
$ sudo yum install -y httpd24
- Apacheを起動する。
$ sudo service httpd start Starting httpd: [ OK ]
- サーバー起動時にApacheも起動するよう自動起動設定する。
$ sudo chkconfig httpd on $ chkconfig --list httpd httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
- Apachの設定をする。
$ sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org $ sudo vi /etc/httpd/conf/httpd.conf #ServerName www.example.com:80 ServerName tehepero-ron.com:80 #DocumentRoot "/var/www/html" DocumentRoot "/var/www/wordpress"
- 確認用兼ELBヘルスチェック用のファイルを準備する。
$ sudo mkdir /var/www/wordpress $ sudo vi /var/www/wordpress/.healthchk ##Health check page##
- ec2-userが wordpress ディレクトリ以下の操作ができるように権限を設定する。
- www グループをインスタンスに追加する。
$ sudo groupadd www
- ec2-userを www グループに追加する。
$ sudo usermod -a -G www ec2-user
- 追加した状態を確認するには一度ログアウトしてから、再ログインしメンバーシップを確認する。
$ exit $ ssh wp1weba $ groups ec2-user wheel www
- /var/www 以下のグループ所有権を www グループに変更する。
$ sudo chown -R root:www /var/www
- /var/www 以下のディレクトリとファイルの権限を変更する。将来のサブディレクトリにもグループ ID を設定するようにしておく。
$ sudo chmod 2775 /var/www $ find /var/www -type d -exec sudo chmod 2775 {} + $ find /var/www -type f -exec sudo chmod 0664 {} +
- リスタートして、設定を反映させる。
$ sudo service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ]
- www グループをインスタンスに追加する。
- 外部からのアクセスはELB用のSubnetを経由する構成にしているので、AWS Management Console上のEC2メニューのロードバランサーからELBを作成する。
- 「ロードバランサーの定義」で、以下を入力する。
ロードバランサー名:「elb-wp1」 ロードバランサーを作成する場所:「vpc-wp1」 リスナーの設定:「http/80/http/80」 (ロードバランサーとインスタンスのプロトコルとポート)
- 「サブネットの選択」で、以下サブネットを選択する。
「sn-wp1-elb-a」 「sn-wp1-elb-b」
- 「セキュリティグループの割り当て」で、既存のセキュリティグループから以下を選択する。
「sg_elb_web」
- 「ヘルスチェックの設定」で、以下を入力する。
pingプロトコル:「HTTP」 Pingポート:「80」 pingパス: 「/.helthchk」 応答タイムアウト:「5」 ヘルスチェック間隔:「10」 非正常のしきい値:「2」 正常のしきい値:「3」
- 「EC2インスタンスの追加」で、以下インスタンスをチェックする。
「wp1-web-a」
- 「タグの追加」では特に入力はせず、「確認と作成」に移動し問題なければ「作成」する。
- 「ロードバランサーの定義」で、以下を入力する。
- インスタンスを選択し「wp1-web-a」のステータスが InServiceになっていることを確認する。InServiceになるのに少し時間がかかるの少し待ちます。
-
「ロードバランサー」メニューの画面下のタブから「説明」を選択し、DNS名(elb-wp1-xxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com)を確認する。そのDNS名を使いWebサーバまでの接続確認をする。
http://elb-wp1-xxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com/.healthchk 「Health check page」が表示されることを確認する。
PHPのインストールと設定をする。
- phpをインストールする。
$ sudo yum install -y php56 php56-mysqlnd
- PHPのタイムゾーンを日本に変更する。
$ sudo cp /etc/php.ini /etc/php.ini.org $ sudo vi /etc/php.ini [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone ;date.timezone = date.timezone = 'Asia/Tokyo'
- LAMP Webサーバが動作するか、ApacheドキュメントルートにシンプルなPHPファイルを作成する。
$ sudo echo "<?php phpinfo(); ?>" > /var/www/wordpress/phpinfo.php
-
.healthchkで確認した時と同様にWebサーバにアクセスして表示を確認する。
http://elb-wp1-xxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com/phpinfo.php
- セキュリティ上、知られない方がいいので、確認後すぐにPHPファイルを削除する。
$ /var/www/wordpress/phpinfo.php
MySQLのインストールと設定をする。
- mysqlをインストールする。
$ sudo yum install -y mysql55-server
- mysqlの文字コードをutf8に設定する。
$ sudo cp /etc/my.cnf /etc/my.cnf.org $ sudo vi /etc/my.cnf [mysqld] character-set-server = utf8 skip-character-set-client-handshake
- MySQLサーバーを起動する。
$ sudo service mysqld start
- MySQL初期設定(mysql_secure_installation)を実行する。
- root アカウントのパスワードを入力する。
$ sudo mysql_secure_installation Enter current password for root (enter for none):「」 Set root password? [Y/n] y New password:「準備したパスワード」 Re-enter new password:「準備したパスワード」 Password updated successfully! Reloading privilege tables.. ... Success!
- 匿名ユーザーアカウントを削除する。
Remove anonymous users? [Y/n] y ... Success!
- rootログインを無効にする。
Disallow root login remotely? [Y/n] y ... Success!
- テストデータベースを削除する。
Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success!
- 権限テーブルを再ロードし変更を保存する。
Reload privilege tables now? [Y/n] y ... Success!
- root アカウントのパスワードを入力する。
- サーバー起動時にMySQLも自動起動するよう設定する。
$ sudo chkconfig mysqld on $ chkconfig --list mysqld mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
- 設定がutf8になっているか確認する。
$ mysql -u root -p mysql> show variables like "chara%"; +--------------------------+----------------------------+ | 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/ | +--------------------------+----------------------------+
以上でEC2上にLAMPなWebサーバー環境が構築できました。