WordPress2024年1月11日WordPressブログを運営している方はレンタルサーバやEC2などでホストしていると思います。これらには利用料金がかかったり脆弱性があったりと何かと懸念点があります。そこでAWSのS3の静的ホスティング機能を使ってWordpressをホストする方法があるので紹介します。独自ドメインも使用できます。目次S3でWordpressをホストするメリットとデメリットEC2やレンタルサーバでWordpressをホストした場合とS3でホストした場合で比較したメリットデメリットを紹介します。△(サーバスペックによる。◎(CloudFrontというCDNで対策も可能。◎(どんな攻撃をされても管理コンソールに侵入されることはない。コメント欄や問い合わせ欄はメールや他SNSなどのものを使用する必要がある。ランニングコストと表示速度とセキュリティに圧倒的なメリットがある。頻繁にブログを更新する場合は静的ファイルの出力、S3への配置が必要なので少々不便かもしれない。手軽にブログを更新できるが、素人だと脆弱性をつかれた攻撃にさらされる可能性がある。安いサーバのプランだとスペックが低いので表示速度がネック。同時アクセスが多いとDBサーバが落ちるので復旧が必要。S3でWordpressをホストする作業の流れ本手順では記事執筆にEC2を使用する流れで記載します。EC2にWordpressを導入する際には以下記事をご参照ください。シェルスクリプトの勉強のついでにEC2(AmazonLinux2)にWordPressを一発インストールするスクリプトを作成してみました。スクリプトの解説と実行方法を記載します。...また、S3オリジンに対してCloudFrontを設定してSSL化(Httpsで接続できるように)しておきます。手順を以下記事で紹介しています。S3で静的WEBホスティングを行い、それをCloudFrontからアクセスできるようにする手順を紹介します。マネジメントコンソールにログイ...以下の手順はWordPressの執筆環境があり、CloudFront-S3の設定ができていることを前提に記載します。前提条件が整っていない方は上記2つの記事を参考に環境を整えてください。記事を執筆するWordPressが動く環境がある方はそちらでも問題ないです。EC2を使用するのであれば記事を執筆していない期間は停止しておけば料金がかからないので便利です。ストレージ(EBS)も毎回スナップショット→復元を行えばランニングコストは0になります。STEPEC2にSSHログインしてDBのIPアドレスを変更するEC2は起動するたびにIPアドレスが変更されます。WordPressはページを動的生成している関係上、サイトURLとHOMEの設定を変更する必要があります。この設定はWordpressの管理画面からも行えるのですが、上記のサイトURLが異なっていると管理画面にすらログインができないのでSSHから直接DBの値を書き換えます。STEPWordPress管理コンソールにログインして記事を執筆する普段通り記事の執筆を行います。記事を静的ファイルのHTMLにしてくれるプラグインがあるので使用します。これを実行すると作業ディレクトリにHTMLファイルが出力します。Staticを使用してみたところ、画像も作業ディレクトリにコピーしてくれるのですが、中には壊れてしまっているものがあったので手動で上書きコピーします。Staticで出力されるHTMLファイルに記載されているリンク(画像や記事内のリンク)はSTEP2で設定したHOMEのアドレスがルートとなっています。これからS3にアップロードするのでS3のドメインに変更します。(CloudFront経由でアクセスする場合はCloudFrontのドメイン、独自ドメインを設定する場合は独自ドメインで書き換えます。)STEPS3に記事をアップロードS3に記事(HTMLファイル)や画像をアップロードします。syncコマンドを使用することで今回修正した差分だけアップロードできるのでS3のPUT料金も抑えることができます。(かかって数円程度かと。)構成を絵にするとこんな感じです。記事を執筆するためのEC2を起動WordPressが入ったEC2を起動するだけです。マネジメントコンソールから対象のEC2を選択して起動します。EBSをスナップショットにしている方は復元してEC2にアタッチします。WordPressの執筆環境がある方はそちらを使用すればOKです。手順が良くわからない方は以下をご参照ください。シェルスクリプトの勉強のついでにEC2(AmazonLinux2)にWordPressを一発インストールするスクリプトを作成してみました。スクリプトの解説と実行方法を記載します。EC2にSSHログインしてDBのIPアドレスを変更するEC2にSSHログインします。筆者はTeratermを使用しています。やり方がわからない方は以下の記事をご参照ください。AWSでEC2インスタンスを作成してTeratermでSSH接続する方法を記載します。EC2ではセキュリティグループの設定を正しく行わないとインスタンスへの接続ができなくなるの...SSHログインしたら以下コマンドを流してDBにログインします。[初期設定時のDB名]筆者が紹介したWordPressインストールのスクリプトをそのまま実行した場合、[初期設定時のDB名]はdb01になるかと思います。パスワードを聞かれるので入力してログインします。以下のコマンドを実行してサイトURLとHOMEの設定を変更します。option_name='home';EC2のパブリックIPはマネジメントコンソールから確認できます。プライベートIPではなく、パブリックIPなので間違えないようにしてください!ちなみに、ワードプレス設定の以下の項目をDBから直接変更したような感じです。http://[EC2のパブリックIP]にアクセスしてサイトにアクセスできればOKです。接続できない場合はEC2のセキュリティグループでHTTP接続(80番ポート)を許可していることを確認してください。アクセスしてWordPress管理コンソールにログインします。いつも通り記事を執筆してください。Staticを検索してインストール・有効化を行ってください。Staticがサイドメニューに表示されます。Staticの設定を行います。相対パスを選択して保存します。他はデフォルトのままでOKです。設定出来たら「静的ファイルを生成する」を押下します。記事のボリューム次第では時間がかかるかもしれません。完了するとログに完了と出ます。前ステップで実施した静的ファイル生成でも画像はコピーされているのですが、筆者が動作確認した中ではコピーされていないものや壊れているものがあったので手動コピーをしておきます。WordPressをホストしているサーバ(EC2など)にSSHログインします。Staticが吐き出したファイルが格納されているディレクトリに移動します。/var/www/html/wp-content/plugins/simply-static/static-files/ここでlsコマンドを実行して以下のようなファイルがあることを確認します。数字の部分はランダムのようです。simply-static-1-1685286436ない場合は、前ステップの静的ファイル生成が失敗していたり、設定で出力先ディレクトリが変更されていると思うので確認してみてください。Staticが出力した画像ファイル(や動画ファイル)を削除します。数字部分はご自身の生成されたディレクトリの番号に書き換えてください。/var/www/html/wp-content/plugins/simply-static/static-files/simply-static-1-1685286436/wp-content/uploads/*そして以下コマンドを実行してWordPress執筆時にアップロードした画像ファイルなどをコピーします。Staticで出力されるHTMLファイルに記載されているリンク(画像や記事内のリンク)はSTEP2で設定したHOMEのアドレスがルートとなっています。今回、最終的なドメインはCloudFrontからのアクセスになるのでCloudFrontのドメインに変更しておきます。CloudFrontに独自ドメインを設定している場合、そのドメインに変更します。以下コマンドを実行して生成されたHTMLがあるディレクトリに移動します。再三になりますが、数字部分はご自身のものに書き換えてください。/var/www/html/wp-content/plugins/simply-static/static-files/simply-static-1-1685626347そして以下コマンドを実行してサーバのIPアドレスをCloudFrontのドメインに書き換えます。\;また、CloudFront経由だとhttps接続になるので以下コマンドでhttp://の部分をhttps://に書き換えます。\;以上で静的ファイルの準備は完了です。configureコマンドを実行してアクセスキーを設定する、もしくはEC2にロールを割り当てるなどしてS3へのPUTアクセスができるようにしておきます。ここではS3アクセスのための権限の設定方法は割愛します。対象バケットへのフルアクセス権限があると良いと思います。以下コマンドを実行して対象バケットが表示されればちゃんと設定できています。(厳密にはPUT権限があるかはわかりませんが。ls以下コマンドを実行して静的HTMLが格納されているディレクトリに移動します。数字部分は書き換えてください。/var/www/html/wp-content/plugins/simply-static/static-files/simply-static-1-1685626347そして以下コマンドを実行してS3に静的ファイルを一式コピーします。s3://[バケット名]/ログが出力されてS3にファイルがコピーされるはずです。以降、記事を更新する場合は差分アップロードになるので初回ほどは時間がかからず、S3のPUT料金も低減されるはずです。CloudFrontのエンドポイントにアクセスするとWordPressで作成したブログが表示されているかと思います。PR当ブログはWordPressテーマSWELLを使用しています。シンプル美と機能性両立を両立させた、圧巻のWordPressテーマ関連記事AWSにおけるDBバックアップ...AWSとAzureの主要サービ...[AWSコード生成AI]Cod...EC2をApacheでSSL(...[初心者向け]NginxでEC...【AWS】SNSでスマホにSM...【AWS】former2をCl...[AWS]ACMがドメインのW...syoシステムエンジニアAWSを中心としたクラウド案件に携わっています。IoTシステムのバックエンド開発、Datadogを用いた監視開発など経験があります。IT資格マニアでいろいろ取得しています。理系の大学院を卒業IT企業に就職AWSのシステム導入のプロジェクトを担当ランキングランキングに参加しています。クリックして応援いただけると嬉しいです。Practitionerとは?勉強方法と教材紹介AWSにおけるDBバックアップの設計に関するホワイトペーパーの要約と解説ランキングランキングに参加しています。クリックして応援いただけると嬉しいです。