ジョートーTechなメモ

サーバとかAWS(Amazon Web Services)関係の設定などをメモ書きしていきます

Wordpress をCentOS6.5からAmazon Linuxに引越しする

CentOS6.5 / MySQL5.1 / PHP5.3.3 で稼働しているWordpressをEC2 Amazon Linux 環境(MySQL5.5 / PHP5.5)に移行します。

移行元からの移行データの準備

DBデータは、移行元MySQLから mysqldumpでエクスポートします。ファイル系は、Wordpress ディレクトリをそのままtarで固めます。
この2つのファイルをsftp等で移行先のEC2に持っていきます。

データベースは移行元と同じ情報(DB名、ユーザー名)で作成します。

$ mysql -u root -p
mysql> CREATE DATABASE [db_name] DEFAULT CHARACTER SET utf8;
mysql> GRANT ALL PRIVILEGES ON [db_name].* TO '[user]'@'localhost' IDENTIFIED BY '[user_pass]';

作った空のデータベースに移行元からのエクスポートファイルをインポートします。

mysql -u [user] -D [db_name] -p < [エクスポートファイル]

あっさりとデータが入りました。

MySQL5.1 から MySQL5.5 への移行の場合、いくつか仕様が変わっているようなのでいろいろ対処しなくてはいけないことがあるようです。

続きを読む

Route53にゾーンファイルをインポートする

 以前、以下の記事にてDNSをRoute53に移動したメモを書きました。

Amazon Route 53にドメインを移動 - ジョートーTechなメモ

 「Create Recordset」すると画面上、「Import Zone File」というボタンがあります。
Route53では、既存のDNSサーバのゾーンファイルをインポートできるようですので、やってみます。

f:id:xsato53:20140908195323j:plain

「Import Zone File」ボタンを押すと、右側のテキストボックスにゾーンファイルの内容をコピペして「Import」をクリックします。

すると、きちんとNSレコード、SOAレコード以外がインポートされます。(感動)

Route53に移行するので、ネームサーバのAレコードがある場合は削除しておきましょう。

あとは、前回の記事のようにレジストラのネームサーバを更新します。

AWS EC2にownCloud 7をインストール

EC2上に構築したAmazon Linux でのLAMP環境にownCloud7をインストールします。

ソースの取得

$ sudo wget --no-check-certificate https://download.owncloud.org/community/owncloud-7.0.2.tar.bz2
$ sudo tar jxvf owncloud-7.0.2.tar.bz2
$ ll
total 27096
drwxr-xr-x 12 nobody 65534 4096 Aug 26 10:18 owncloud
-rw-r--r-- 1 root root 27741618 Aug 26 10:22 owncloud-7.0.2.tar.bz2

$ sudo mv owncloud /var/www/
$ sudo chown -R apache:apache owncloud 

ownCloud は .htaccess が有効になっている必要があるため、httpd の設定で .htaccess を有効に設定します。 今回は /etc/httpd/conf.d/owncloud.conf を作成します。

$ cd /etc/httpd/conf.d/
$ sudo vi owncloud.conf
<Directory /var/www/owncloud>
Options All
AllowOverride All
</Directory> 

 また、ownCloud のバーチャルホストの設定も上記ファイルに記述します。以下を追記します。

<VirtualHost *:80>
    ServerAdmin webmaster@xxxx.com
    DocumentRoot /var/www/owncloud
    ServerName xxxx.com
    ErrorLog logs/strage.xxxx.com-error_log
    CustomLog logs/strage.xxxx.com-access_log combined env=!nolog
</VirtualHost> 

 #LOGの設定で「nolog」の定義は/etc/httpd/conf/httpd.conf に以下を記述します。
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)|(js)$" nolog
 

 ownCloud用のMySQLの設定

$ mysql -u root -p
mysql> CREATE DATABASE owncloud DEFAULT CHARACTER SET utf8;
mysql> GRANT ALL ON owncloud.* to 'owncloud'@'localhost' IDENTIFIED BY 'password';

ここで、AWSのコンソールから、固定IPとインスタンスの紐付けを行います。
「Elastic IPs」をクリックして「Allocate New Address」をクリックすると新しくGIPが与えられます。

与えられたGIPを選択して「Associate Address」をクリックしてownCloudをインストールしたEC2インスタンスに紐付けます。その後、DNSレコードを設定しておきます。

f:id:xsato53:20140908173650j:plain

apache再起動

sudo /etc/init.d/httpd restart

これで、URLにアクセスして管理者ID登録、MySQLの情報を入力してownCloudの設定をします。

設定してから気付きましたが、データディレクトリをドキュメントルート下のままになってました。安全の為、/home 以下に移動します。

config/config.php を編集します。

  'datadirectory' => '/home/data',

data ディレクトリを/home以下にコピーします。

sudo cp -p data /home/

正常に動作することを確認して、ドキュメントルート下のdataを削除します。

ownCloudの管理画面より、外部ストレージ連携でS3との連携を設定しました。前のバージョン(AMI)ではエラー(原因はわからず)になり、つながりませんでしたが、ownCloud7では正常に接続できました。

f:id:xsato53:20140908180311j:plain

ownCloud7 ですが下記のようなエラーは今回の環境でも発生してます。

http://forum.owncloud.org/viewtopic.php?f=29&t=22537

https://forum.owncloud.org/viewtopic.php?f=17&t=20908

 

Amazon Linux にLAMP環境をインストール

EC2インスタンスにログインします。

f:id:xsato53:20140907212538j:plain

1.MySQLのインストール

MySQL Client のインストール

$ sudo yum install mysql
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main/latest | 2.1 kB 00:00
amzn-updates/latest | 2.3 kB 00:00

(略)

Installed:
mysql.noarch 0:5.5-1.6.amzn1

Dependency Installed:
mysql55.x86_64 0:5.5.38-1.0.amzn1 mysql55-common.x86_64 0:5.5.38-1.0.amzn1 mysql55-libs.x86_64 0:5.5.38-1.0.amzn1

Complete! 

 MySQL Server のインストール

$ sudo yum install mysql-server
Loaded plugins: priorities, update-motd, upgrade-helper

(略)

Installed:
mysql-server.noarch 0:5.5-1.6.amzn1

Dependency Installed:
mysql55-server.x86_64 0:5.5.38-1.0.amzn1 perl-Compress-Raw-Bzip2.x86_64 0:2.061-1.10.amzn1
perl-Compress-Raw-Zlib.x86_64 0:2.061-1.10.amzn1 perl-DBD-MySQL.x86_64 0:4.023-2.16.amzn1
perl-DBI.x86_64 0:1.627-1.7.amzn1 perl-Data-Dumper.x86_64 0:2.145-1.4.amzn1
perl-IO-Compress.noarch 0:2.061-1.1.11.amzn1 perl-Net-Daemon.noarch 0:0.48-4.4.amzn1
perl-PlRPC.noarch 0:0.2020-12.5.amzn1

Complete! 

 MySQL起動

 $ sudo /etc/init.d/mysqld start

Initializing MySQL database: Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h ip-172-31-3-179 password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

[ OK ]
Starting mysqld: [ OK ]

 MySQLバージョン確認

$ mysql

mysql> select VERSION(), CURRENT_DATE;
+-----------+--------------+
| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 5.5.38 | 2014-09-07 |
+-----------+--------------+
1 row in set (0.00 sec) 

 MySQLのrootパスワード設定や匿名ユーザ削除、テストデータベース削除等の初期設定

$ sudo mysql_secure_installation

設定したパスワードでログインできるか確認

mysql -u root -p 

 chkconfigで自動起動設定

$ sudo chkconfig mysqld on
$ chkconfig --list | grep mysql
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off

$ sudo chkconfig httpd on
$ chkconfig --list | grep httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off 

 2.PHPのインストール

$ sudo yum install php55

(略)

Installed:
php55.x86_64 0:5.5.14-1.75.amzn1

Dependency Installed:
apr.x86_64 0:1.5.0-2.11.amzn1 apr-util.x86_64 0:1.4.1-4.14.amzn1 httpd24.x86_64 0:2.4.10-1.59.amzn1
httpd24-tools.x86_64 0:2.4.10-1.59.amzn1 json-c.x86_64 0:0.11-4.5.amzn1 libzip.x86_64 0:0.10.1-1.3.amzn1
mailcap.noarch 0:2.1.31-2.7.amzn1 php-pear.noarch 1:1.9.4-20.15.amzn1 php55-cli.x86_64 0:5.5.14-1.75.amzn1
php55-common.x86_64 0:5.5.14-1.75.amzn1 php55-pecl-jsonc.x86_64 0:1.3.2-1.9.amzn1 php55-process.x86_64 0:5.5.14-1.75.amzn1
php55-xml.x86_64 0:5.5.14-1.75.amzn1

Complete!

$ php -v
PHP 5.5.14 (cli) (built: Jul 9 2014 21:40:15)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies 

 PHPモジュールのインストール

$ sudo yum install php55-mysqlnd
$ sudo yum install php55-mbstring
$ sudo yum install php55-gd php55-pdo
$ sudo yum install php55-xmlrpc 

ここで、PHP5.5から以下のようになったので、「php55-mysqlnd」をインストールした。

php-mysql」が廃止されて「php-mysqlnd」に置き換わった
php-mysqlnd」でmysql_connect()系関数を使用した際、MySQLの古いパスワードフォーマット(16バイト)を使うとDBに接続できない 

以下参考:http://ezic-feed.w.ezic.info/3182.html

php.ini の設定

upload_max_filesize = 1280M
post_max_size = 1536M
memory_limit = 2048M

3.その他設定

ライブラリ等のインストール

$ sudo yum install libzip libzip-devel zlib-devel libaio
$ sudo yum install pcre pcre-devel
$ sudo yum install mysql55-devel.x86_64

 システム時刻をJSTに設定

sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime

4.AMI・スナップショットの取得

ここまで構築した環境のスナップショットを取ります。

AWS管理コンソールに入り、サービスのEC2を選択、左メニューの「Instances」をクリックします。
Snapshotを取りたいインスタンスを選択し、「Actions」から「Create Image」を選びます。(一応、インスタンスは停止しておいた方がいいかもです)

f:id:xsato53:20140908131747j:plain

Image Name と Discriptiion を記述して「Create Image」をクリックします。

f:id:xsato53:20140908132740j:plain

これで、左メニューの「IMAGS」-「AMIs」と「ELASTIC BLOCK STORE」-「Snapshot」にそれぞれ、AMIとSnapshot が作成されます。

スナップショットからのインスタンス復元はまた別途。

補足:

AMIとスナップショットの違いについては下記で解説されています。簡単に言うと以下のようです。

ナップショット = 「EBS ボリュームの中のデータ」を特定のタイミングで取得しS3に保存したもの
AMI = 「EBS ボリュームの中のデータ(スナップショット) とインスタンスを構成する管理情報」を含む起動テンプレート

AWS Solutions Architect ブログ: AWSトレーニングでよくいただくご質問シリーズ - 第一回 Amazon Machine Image (AMI) とスナップショットの違い

 

あと、このサイトの解説がInstance/Volume/Snapshot/AMIの関係が判りやすいです。AWSで下記の4つの概念の関係を明確に教えていただけないでしょ… - 人力検索はてな

また、上記の手順で行った「Create Image」でAMIとSnapshotが同時にできる理由についてはこのサイトの補足にある下記説明が判りやすいです。

> あとはEBS root Instanceをバックアップとるときに、Create Image(EBS AMI)する方法とSnapshotを取る方法と2通りあってこれもまた混乱します。(どう使い分ければいいのか等)

この部分は回答していませんでしたが、ついでに説明しておきますね。
簡単に言うと CreateImage=CreateSnapshot+CreateAmi なだけです。

先に述べたとおり AMI はHDDを構成を記述した設定セットです。
既存のInstanceと同じAMIを作りたい場合は、まずルートボリュームのSnapshotを取り、そのSnapshotをルートデバイスに紐付けたAMIを作るという手順になります。
CreateImage はその決まりきった手順を一発で行なってくれるだけのものです。

CreateImageのメリットは操作が簡単でお手軽なことです。
対してCreateSnapshotとCreateAmiを別に行うことのメリットは柔軟なバックアップや起動構成を自分で管理できるということです。 

 

今回のownCloudインストールを踏まえたLAMP環境構築には下記サイトを参考にさせて頂きました。

ownCloud Server 7 を既存の LAMP 環境にインストールする手順 | WEB ARCH LABO

ownCloud Server 7 を CentOS/RHEL 6 に yum インストールする手順 | WEB ARCH LABO

ownCloud の Server Edition をインストール | BGT

【完全版】 自前Dropboxの「ownCloud」インストール手順。 簡単構築してプライベートクラウドを楽しもう! | 田舎に住みたいエンジニアの日記

Amazon EC2インスタンスの作成

ownCloud 7 がリリースされていたので、新たにEC2のインスタンスを立ててインストールします。

初回EC2インスタンス作成時は記録してなかったので、改めてAmazon EC2インスタンスの作成と題して記録します。

まずは、EC2のコンソールからRegionがAsia Pacific(Tokyo)になっているのを確認して

「Launch Instance」をクリックします。インスタンス生成ウィザードが始まります。

f:id:xsato53:20140907190930j:plain

AMIを選びます。今回は「Amazon Linux AMI(HVM) 64bit」を選びます。

f:id:xsato53:20140907191122j:plain

次に「Instance Type」を選択します。今回は「t2.micro」を選択します。
選択をしたら、画面下部の「Next:Configure Instance Details」をクリック。

f:id:xsato53:20140907191521j:plain

Shutdown BehaviorをStop にします。
EC2では、一旦Terminate(終了)したインスタンスは二度と元に戻せません。
ここをTerminateにしておくと、サーバをshutdownした際にインスタンスがTerminate状態に入ってデータが消滅してしまいます。
よって、ここは安全の為「Stop」にしておきます。

f:id:xsato53:20140907192919j:plain

 「Next: Add Storage」をクリックすると、ストレージ設定の画面になります。今回は、EBSに6GB与えます。→ 起動するときに最低でも8GB必要とのことでエラーになりました。8GBに設定しなおして起動しました。

f:id:xsato53:20140907193628j:plain

「Next: Tag Instance」をクリックします。

f:id:xsato53:20140907205630j:plain

tag はなんでも判りやすいものを付ければいいようですが、自分はサーバ名とか乗っけるサービス名とか付けてみました。

「Next: Configure Security Group」をクリックして次へ進みます。

f:id:xsato53:20140907205910j:plainセキュリティグループは、今回は事前に作成済みのものを適用(Select an existing security group)しました。
「Review and Launch」ボタンを押して設定内容を確認して「Launch」をクリックします。
Key Paire については、既に作成済のものを使います。新規に作成する場合は他のサイトなどで手順を確認して下さい。

f:id:xsato53:20140907210452j:plain

「Launch Instance」で起動します。

次は、起動したインスタンスSSHでログインして設定を行います。

EC2インスタンス一覧で作成したインスタンスが立ち上がったら、「Public DNS:」欄に表示されているアドレスにTeraTermでアクセスします。

ユーザは ec2-user で インスタンス作成時にダウンロードしたプライベート鍵を使用してログインします。(パスワードログインはできません)

ログインすると下記の画面がでます。

f:id:xsato53:20140907212538j:plain

一応、「sudo yum update」しておきます。

 

 

Amazon Route 53にドメインを移動

現在、いくつかのドメインを管理していますが、自前のBINDだったり、お名前.com のDNSだったり、ムームーDNSだったりでバラバラなので、Amazon Route 53 に集約しようと思っています。

とりあえず、失敗の影響の少なそうなドメインをお名前.comのDNSから移行してみます。

今回は以下のサイトを参考にしました。

【試してみた】Amazon Route 53にドメインを移動してみた。 | Pocketstudio.jp log3

1.Hosted Zoneの作成

Amazon Route 53 のコンソール。「DNS Management」をクリックします。

f:id:xsato53:20140905233429j:plain

次に「Create Hosted Zone」をクリックします。

f:id:xsato53:20140905234235j:plain

f:id:xsato53:20140905234444j:plain

ドメイン名を入れます。

f:id:xsato53:20140905234739j:plain

「Create Hosted Zone」ボタンを押すとHosted Zone が作成され、一覧にドメイン名が表示されます。

f:id:xsato53:20140905235510j:plain

 

2.DNSレコードの作成

「Go to recordset」ボタンを押してDNSレコードの一覧画面に遷移し、「Create Recordset」お名前.com のDNS設定を見ながら、各DNSレコードを入力していきます。
“Routing Policy:”は、DNSルーティングのポリシー指定になります。“Simple”に設定します。
気を付けないといけないのは、こういったGUIDNSレコード設定のサービスだとフルドメイン名の最後はピリオドを付けなくてもいい場合がありますが、Route53ではピリオド付けないといけません。

MX レコードの場合は、[優先度] [メールサーバ名]で値を入力します。複数メールサーバがある場合はまとめて複数行で入力できます。

例:10 mailserver.example.com

  20 mailserver2.example.com.

 SPFレコード等のTXTレコードは、ダブルクォーテーションマークでくくるのを忘れずに。こちらも複数行入力できます。

以上でDNSレコードの設定は終了です。

3.ネームサーバの登録

レジストラで ネームサーバの変更登録を行います。
自動作成されたNSレコードに設定されているネームサーバ情報を、レジストラに登録します。
以下は、お名前.com の管理画面

f:id:xsato53:20140906003452j:plain

これで、全て完了です。

dig でRoute53のネームサーバを引いてみると下記のようにNSレコードが更新されていることが確認できます。

f:id:xsato53:20140906004716j:plain

あとは、TTLの切れる頃にdigで引いてみましょう。

-------------------------------------------------------

後日のdigの結果

$ dig xxx.xxx.xxx.com soa

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> xxx.xxx.xxx.com soa
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27851
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;xxx.xxx.xxx.com. IN SOA

;; ANSWER SECTION:
xxx.xxx.xxx.com. 900 IN SOA ns-1005.awsdns-61.net. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

;; AUTHORITY SECTION:
xxx.xxx.xxx.com. 3325 IN NS ns-155.awsdns-19.com.
xxx.xxx.xxx.com. 3325 IN NS ns-1642.awsdns-13.co.uk.
xxx.xxx.xxx.com. 3325 IN NS ns-1299.awsdns-34.org.
xxx.xxx.xxx.com. 3325 IN NS ns-1005.awsdns-61.net.

;; ADDITIONAL SECTION:
ns-155.awsdns-19.com. 2418 IN A 205.251.192.155
ns-1005.awsdns-61.net. 1707 IN A 205.251.195.237
ns-1299.awsdns-34.org. 2222 IN A 205.251.197.19
ns-1642.awsdns-13.co.uk. 3326 IN A 205.251.198.106

;; Query time: 19 msec
;; SERVER: 180.222.191.15#53(180.222.191.15)
;; WHEN: Sun Sep 7 15:04:25 2014
;; MSG SIZE rcvd: 301

 Route53 は、Serial は 1 から始まるんですね。

AWS EC2にownCloudをインストールして S3に接続(とりあえず解決編)

前回の記事でEC2にインストールしたownCloud からS3に接続ができなかったので、直接EC2からS3へマウントできないか試したいと思います。

EC2からS3のバケットをファイルシステムとしてマウントできる仕組みの「s3fs」をインストールします。

今回は下記のサイトを参考にしています。

s3fsを使ってEC2からS3をマウントしたときにうまくいかなくて調べた事まとめ | Developers.IO

s3fsのインストール

$ sudo yum update

$ sudo yum -y install gcc-c++ fuse fuse-devel libcurl-devel libxml2-devel openssl-devel
$ curl -O http://s3fs.googlecode.com/files/s3fs-1.74.tar.gz
$ tar xzf s3fs-1.74.tar.gz
$ cd s3fs-1.74
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
$ find /usr/local -type f
/usr/local/bin/s3fs
/usr/local/share/man/man1/s3fs.1

設定・マウント 

まず、アクセスキーとシークレットアクセスキーを設定します。キーを設定する方法は4つあるようですが、今回は/etc/passwd-s3fs にパスワードファイルを作成する方式にします。

$ sudo echo "{Access Key ID}:{Secret Access Key}" | sudo tee -a /etc/passwd-s3fs
$ sudo chmod 640 /etc/passwd-s3fs

{Access Key ID}と{Secret Access Key}は、別途IAMで作成したユーザー情報です。

次に、ownCloud のユーザで共有フォルダを作成しておきます。(ここでは「share」)以下では、share をS3にマウントします。

f:id:xsato53:20140905205641j:plain

ownCloud からマウントしたS3バケットにアクセスするので、マウントの際 apache ユーザに権限を与えないといけませんので、apacheのuidとgidを調べます。

$ id apache
uid=48(apache) gid=48(apache) groups=48(apache)

apacheに権限を与える形でS3のバケットにマウントします。

 $ sudo ls -ld /home/data/{ownCloud User}/files/share
drwxr-xr-x 2 apache apache 4096 Sep 5 11:41 /home/data/{ownCloud User}/files/share
$ sudo /usr/local/bin/s3fs {bucket_name} /home/data/{ownCloud User}/files/share -o rw,allow_other,use_cache=/tmp,uid=48,gid=48
$ sudo ls -ld /home/data/{ownCloud User}/files/share
drwxrwxrwx 1 apache apache 0 Jan 1 1970 /home/data/{ownCloud User}/files/share

{ownCloud User}はownCloudのユーザID、{bucket_name}はEC2からマウントしたいバケット名です。

確認

マウントの確認

$ sudo df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.8G 3.4G 4.4G 44% /
devtmpfs 281M 12K 281M 1% /dev
tmpfs 297M 0 297M 0% /dev/shm
s3fs 256T 0 256T 0% /home/data/{ownCloud User}/files/share

マウントされています。(256Tってすごいですね)

ownCloud からファイルをアップロードしてみます。

f:id:xsato53:20140905210543j:plain

S3のマネジメントコンソールから確認

f:id:xsato53:20140905210615j:plain

これで、ownCloudからS3のバケットにアップされていることが確認できました。

ownCloud の管理画面からうなく接続できない原因は解りませんでしたが、とりあえず共有フォルダ固定ですが、容量無制限のストレージサービスを独自ドメインで立てることができました。