[OCI] AWSは個人利用には高すぎるのでWordPressを引っ越した話

はじめに

前回の記事でも書きましたが、OCIのAlways Freeを活用することで無料でWordPressをそこそこのスペックで構築することができます。

現在私が管理しているWordPressサーバーは3台あり、それぞれLightsailで実行していました。
この費用が大体1,500円/月ほどです。

今後も長くブログを運営していくのであれば、少しでも費用を抑えたいところですのでOCIへWordPress環境を移行することにしました。

構成図


構成としては上記の通りです。

◆AWS
・Route53でドメインの管理及び死活監視
・Route53でPrimary環境が停止した場合にSecondary環境へフェイルオーバー
・CloudFrontを経由してWordPressサーバーへアクセス
・ACMを使ってSSL証明書の発行
・CloudFront+S3のみで動作する予備のWordPress環境を用意

◆OCI
・コンピュートインスタンス上にWordPressサーバーを構築
・定期的にWordPress内の記事を静的HTMLファイルにコンバート
・静的HTMLファイルをAWSのS3へインポートして予備環境を同期する

OCI上で動作する単一のコンピュートインスタンスだけでは不安なので、CloudFront+S3のみで動作する静的なWordPress環境を予備に用意しています。
この構成ではRoute53とCloudFront、予備環境のS3及び各通信費用しか発生しません。

3つのWordPressを管理していても月額500円未満で済む想定になっています。

OCI側の環境準備


まずOCI側の準備ですが、今後も検証用としてOCIを利用することがあるはずなのでWordPress用のコンパートメントを区切っておきます。

コンパートメントとはOCIアカウントを論理的に仕切ることができるグループ分けのようなもので、用途に分けて区切っておくことで誤った操作を防いだりリソースの管理がしやすくなる特徴があります。


上記のようにWordPress用のコンパートメントを作成しました。


コンパートメントを作成した時点でデフォルトのVCNが作成されます。
※ VCNとはAWSのVPCと同じような機能です。

この中には1つのパブリックサブネットが含まれていたので、今回はこのまま利用します。


デフォルトのセキュリティリストでは80/443/22ポートを全て許可する設定が入っています。
このままでは侵入されるリスクもあるので、ポート番号22からのアクセスには制限を入れておきました。


作成したコンピュートインスタンスはARMアーキテクチャを採用しているVM.Standard.A1.Flexです。
採用したOSはOracleLinux8にしました。

今回は3つのWordPressサーバーを構築する予定なので、2vCPU/8GB構成を1台と1vCPU/8GB構成を2台作成しています。

これでOCI上での準備は完了です。

データ移行準備(Lightsail)

Amazon LightsailからOCI コンピュートインスタンスへデータを移行するにあたって、行うステップは以下の通りです。

1, Lightsail上でMySQLのdumpを作成
2, OCIコンピュートインスタンスのセットアップ
3, OCIコンピュートインスタンスからLightsailにsftp接続
4, LightsailからWordPress関連のファイルをOCIにダウンロード
5, MySQLのリストア
6, Apacheの設定ファイルを更新
7, Apacheサーバーの再起動

Lightsail上ではMySQLのdumpを作成しておきます。
ダウンロードはステップ4のタイミングで行えば良いので、作成したdumpファイルはそのままLightsail内に置きっぱなしで構いません。

# 引っ越し元(Lightsail)内でSQLのバックアップを作成する
$ sudo mysqldump --no-tablespaces -u[WordPressのDBユーザー名] -p[DBユーザーのパスワード] -hlocalhost [データベースの名前] > wordpress.sql

ちなみにWordPress内にBackWPupというプラグインを導入している場合は、WordPressの管理画面からワンプッシュでdumpを作成&ダウンロードすることも可能です。

OCIインスタンス側の準備

まずはコンピュートインスタンス上でWordPressが動作できるように環境を整えます。

# アップデート
$ sudo yum update -y

# 日本時間に変更
$ sudo timedatectl set-timezone Japan

# 防火壁の設定に80ポートの許可を追加
$ sudo firewall-cmd --permanent --add-port=80/tcp
$ sudo firewall-cmd --reload

# MySQLインストール
$ sudo yum install -y mysql mysql-server

# MySQLの自動起動設定
$ sudo systemctl enable mysqld
$ sudo systemctl start mysqld

# 雑にDB作成(元のサーバーの設定と同じにしておくと後々楽)
$ create database [WordPress用のDB名];
$ create user [WordPress用のDBユーザー名]@localhost  identified by '[DBユーザーのパスワード]';
$ grant all privileges on [WordPress用のDB名].* to [WordPress用のDBユーザー名]@localhost;

# Apacheインストール
$ sudo yum install httpd -y
$ sudo systemctl enable httpd
$ sudo systemctl start httpd

# PHPのインストール
$ sudo yum install php php-fpm php-mysqlnd php-mbstring php-json php-xml -y

本来ならDockerで環境を用意して実行するのが楽なのですが、ARM上で使った試しがなかったので直接インストールしてしまいました。
時間があれば後できちんとdocker-composeを書きます。

OracleLinuxの特徴としてデフォルトでfirewallが起動しています。
そのためOCIのセキュリティリストでポート番号を許可しただけでは疎通ができないことに注意が必要です。

OCIインスタンスへデータ移行

OCIのコンピュートインスタンスへLightsailのSSHアクセスキーをアップロードして、コンピュートインスタンスからLightsailへsftpで接続します。

ここで必要なものは以下の2つです。
・LightsailのWebサーバーが参照しているWordPressファイル群
・事前に作成したMySQLのdumpファイル

# 旧サーバーからファイルをダウンロードする
$ sftp -i [Lightsailのアクセスキー] [Lightsailのアクセスユーザー]@[LightsailのIP]

# Webサーバーが参照しているwordpressディレクトリの場所を探してgetしてくる
# 以下はBitnamiの例。wordpressディレクトリ直下のhtdocsだけ持ってきても良い
> get -r /opt/bitnami/apps/wordpress

こんな感じでgetしてきます。

OCIコンピュートインスタンス内にダウンロードしてきたwordpressファイル群は、Apacheが参照するための場所に配置しておいてください。
例えば/var/www/wordpressなど。

ダウンロードしたMySQLのdumpファイルを新環境へリストアします。

# 新サーバーでMySQLのリストア
$ mysql -u[DBユーザー名] -p[DBユーザーのパスワード] [DBの名前] < wordpress.sql

上記コマンドが成功したら、実際にデータベースへアクセスしてリストアが完了しているか確認します。

問題なさそうですね。

Apacheの設定

OCIコンピュートインスタンスへWordPressのファイル群をダウンロードしましたが、Apacheが街頭のファイル群を参照するためにはhttpd.confファイルを編集する必要があります。

OracleLinux8でyumを使ってApacheをインストールした場合は、デフォルトで以下のパスにhttpd.confが配置されます。
/etc/httpd/conf/httpd.conf

ここで編集するべきポイントは3つです。
・index.htmlではなくindex.phpファイルも参照できるようにする
・WordPressファイル群へのパスを通す
・必要に応じてアクセスの制御を行う


WordPressはPHPで動作しているのでindex.phpを認識できるようにします。


デフォルトでは/var/wwwがドキュメントルートに指定されていますが、wordpressファイル群のindex.phpが配置されている場所をルートに変更し直しました。

ドキュメントルートについてはWordPress側の設定もあるので、環境に応じた対応を行なってください。


私のブログではCloudFrontからのアクセスだった場合にHTTPSとして認識するように設定しているため、上記のような設定も追加しました。
CLOUD_FRONT_ACCESSヘッダーは私が個人的に設定しているオリジナルのヘッダーですので、このまま真似しても意味ないので注意です。

設定完了後、Apacheを再起動しました。

動作確認


OCIコンピュートインスタンスのパブリックIPアドレスをブラウザで開いて、問題なく表示されていることが確認できました。

この後、CloudFrontのオリジンをLightsailからコンピュートインスタンスへ差し替えて対応完了です。

おわりに

今まで利用していたLightsailインスタンスは1vCPU/1GBメモリしかなく、1台あたり$5.0/monthも掛かっていました。

今回はスペックも大幅にアップした上に、永年無料で利用することができます。

OCI自体はまだまだ他のIaaSと比較しても機能面で不安がありますが、コストパフォーマンスの良さはトップなので乗り換えをしてよかったです。

個人利用でサーバーを持っている方、AWSのリッチな機能が必要ないのであればOCIへの乗り換えも考えてみてはいかがでしょうか。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)