見出し
はじめに
前回の記事でも書きましたが、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への乗り換えも考えてみてはいかがでしょうか。
コメントを残す