WordPressをAmazon S3 + CloudFront構成で月額200円で運用

2019-12-04
amazon%20awswordpresscmsdocker
    

目次

概要

AmazonS3 + CloudFront を用いて WordPressを静的サイト化して、ハイパフォーマンスなサイトを構成する方法の紹介です。 実はこのブログ https://tech-blog.s-yoshiki.com もS3 + CloudFront 構成で運用しており、月額のAWS使用料が200円少々で運用できています。 ここでは具体的に利用しているサービスや構成の設定、プラグインを紹介します。

システム全体の概要

システムをざっくり説明すると、WordPressのサイトを全て静的化し、AmazonS3上に配置しています。S3に加えてCloudFrontも組み合わせて利用し、HTTPSとCDN化を実現しています。

SSL証明書にはAWS Certificate Managerを利用しています。

WordPressのシステム自体はローカル環境のDocker上に構築し、記事を書いたら静的化処理を行いS3にアップロードしています。

この構成のメリット・デメリット

この構成のメリット・デメリットには次のようなものがあると思います。

  • Amazon S3を利用するのでコストが低い
  • サイトを静的化するのでパフォーマンスが高い
  • 動的システムではないので脆弱性や攻撃に強い
  • WordPressの静的化プラグインの挙動が安定していない
  • 静的サイトで一部プラグインが利用できなくなる
  • サーバサイドによる動的処理ができない
  • HTML出力〜デプロイに多少時間がかかる

AWSの構成

静的コンテンツを配置するs3バケットを用意します。またCloudFrontのディストリビューションを作成します。

構築方法については以下の記事で紹介しています。

https://tech-blog.s-yoshiki.com/2019/08/1486/

静的ページを作成するWordPressプラグイン

WP2Static

静的コンテンツの作成はWP2Staticを利用しました。このプラグイン導入時にStaticPressやsimply staticなどを検討しましたが、開発の活発度やレビューからWP2Staticを利用することにしました。 250MB程度のコンテンツを作成するのに10分程度かかります。

WP Offload Media Lite

WP Offload Media LiteはWordPressにアップロードした画像・動画などのコンテンツをS3にアップロードして管理する事ができるプラグインです。これによりローカル環境でコンテンツなどを管理しなくても良くなります。

WordPress on Docker環境

WordPressはDocker上で動かしています。imageはwordpressとmysql(どちらもDockerHubで提供されているもの )を利用しています。 環境は次のような構成となっています。

ディレクトリ構成

wordpress
├── docker-compose.yml
├── html # /var/www/html以下をマウント
└── mysql # mysqlデータ領域をマウントして永続化

docker-compose.yml

version: "3.5"
services:
  wordpress:
    image: wordpress:latest
    volumes:
      - "./html:/var/www/html"
    ports:
      - 80:80
    links:
      - wordpress-db
    environment:
      WORDPRESS_DB_HOST: wordpress-db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress_user
      WORDPRESS_DB_PASSWORD: wordpress_pass

  wordpress-db:
    image: mysql:5.7
    volumes:
      - "./mysql/data:/var/lib/mysql"
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: XXXXXXXXXXX
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress_user
      MYSQL_PASSWORD: wordpress_pass

まとめ

Amazon S3 + CloudFront の構成で WordPressを運用する方法を紹介しました。この方法のポイントはサイトを静的化するのでパフォーマンスに優れており脆弱性や攻撃にも強いという特徴があります。ただし、WordPressを静的化するためのプラグインが安定していないことや、HTML出力するのに多少時間がかかるという欠点があると思います。 コストパフォーマンスの観点で見たらかなり優れている方法だと思うので、是非お勧めしたいと思います。

    

関連記事

Node.js で作成した REST API を Docker化
Node.jsでREST APIを作成 コンテナ化 コンテナ化定義 コンテナ化作業 参考 Node.js で作成した REST API を Docker化した際のメモです。 Node.jsでREST APIを作成 まずはNode.js…

AWS Amplify で コンテナベースのデプロイを行い REST API を構築
検証した環境 やってみる 初期準備 パイプラインを確認 終了処理 参考 AWS Amplify で コンテナベースのデプロイを行い REST API を構築した際のメモです。 検証した環境 amplify 5.1.…

CentOS6(Docker)でyum update できなくなった
エラー内容 対応 CentOS6.10 で yum update しようとしたところエラーが出てアップデートできなかったので対応した時の記録 エラー内容 以下のようなエラーが出ました。 対応 を以下のように変更したところ解決しました。

PostfixでメールリレーしてMailHogで受信する開発用Dockerコンテナの構築
環境 Dockerイメージ作成 コンテナの起動 telnetで送信テスト phpで送信テスト Postfixのリレーを介して送信されたメールをMailHog(開発用SMTPサーバ)でキャッチするDocker開発環境を構築した際のメモです。 環境 Docker…

GitLab.com のコンテナレジストリで1つのプロジェクトに複数のDockerイメージをpushする
手順 GitLab.com のコンテナレジストリで1つのプロジェクトに複数のDockerイメージをpushする方法についてのメモです。 手順 まず、gitlab.comにて適当なリポジトリを…

Amplify CLI のインストール
Amplify CLI のインストール Amplify CLI の設定 バックエンド環境作成 Amplify CLI のインストールから設定まで Amplify CLI をインストール 設定 Amplify アプリを初期化 Amplify CLI…

AWS Amplify に Next.js (SSG) で作ったアプリをデプロイする
はじめに 操作 Next.js (React) アプリの作成、Gitへのプッシュ AWS Amplifyでプロジェクト作成 参考にしたサイト この記事では、React / Next.js アプリケーションを作成し、AWS Amplify…

Amazon S3 と ローカルファイルのチェックサムの比較
s3apiでEtagを取得 検証 マルチアップロード時の注意点 Amazon S3 の Etagを使ってファイルの整合性チェックをする。 s3apiでEtagを取得 S3 APIを利用するとEtagを取得します。この値はmd5のハッシュ値になります。 検証 MD…

GitHub Actions で Gatsby をビルドし Amazon S3 にデプロイする
GitHub Actions について あらかじめ準備しておくもの AWS IAM ユーザを環境変数にセットする workflowの記述 ビルド バッジを利用する 終わりに 参考にしたところ Gatsbyで作った静的サイトを、GitHub Actions…

WordPressやめます Gatsbyに移行しました
これまでのWordPress運用 なぜWordPressを捨てるのか? なぜGatsbyを利用するのか? gatsbyについて WordPressから記事の救出 移行対象記事の抽出 記事の置換 Gatsbyテーマの作成 Gatsby…

最新の投稿

[Mac]ipコマンドの導入[iproute2mac]
iproute2macについて 導入 homebrewで導入 直接インストール 確認 サポートコマンド を導入して、macOSでipコマンドを導入した際のメモ iproute2macについて brona/iproute2mac: CLI wrapper for…

AutotoolsでconfigureやMakefileの作成
はじめに Autotools 環境 準備 ツール類のインストール ソースコードの作成 configure.ac と Makefile.am configure Makeの生成 その他 makeオプション autoreconf について Perlの場合 リンク はじめに C…

RPMパッケージ作成 Dockerを利用して
はじめに RPMパッケージ step1.環境構築からRPMパッケージングまで 事前準備 ワークスペースの作成 プログラム配置 specファイル rpmbuild インストール リンク はじめに Dockerを利用してRPM開発環境を用意し、実際にRPM…

RPMのspecファイルで利用するマクロ・変数
はじめに マクロ一覧 基本情報系 Body項目 コメント 参考文献 はじめに RPM(Fedora/CentOS系)を作成する際に利用するspecファイルで利用できるマクロについて調べた際のメモです。 マクロ一覧 基本情報系 パッケージの名前を定義します。これはspec…

CentOS8/RHEL8でのRPM管理における検討事項
初めに 前提 rpm rpm yum dnf コマンド リポジトリ リポジトリとライフサイクル AppStream Compatibility Level について AppStreamのサポート期間 Yum v3 -> Yum v4 リンク 初めに CentOS8/RHEL…

homebrewでnodejsインストール&任意のバージョン利用
初めに homebrewインストール nodejsの検索 インストール nodejsの利用 初めに homebrewでサクッとnodejsのインストールを行なった際のメモです。 環境はMacを対象としていますが、Linux…

tracerouteコマンドでネットワークの経路を洗い出す
tracerouteの用途 tracerouteの原理 IPヘッダのTTL コマンドを実行してみる 参考文献 tracerouteコマンドでネットワークの経路を洗い出した際の操作をメモしました。 環境はmacで実施しています。 また、traceroute…

[Vue]フロントエンド機能のみでダウンロードを実装する[JS]
実装 ポイント ソース デモ 参考サイト フロントエンドのみ(=サーバサイドがダウンロードさせない) でダウンロードを行う機能を実装した時のメモです。 Vueを利用して実装していますが、ここで記載しているコードはVueに依存した機能ではなく、ピュアなJSのAPI…

Node.js で作成した REST API を Docker化
Node.jsでREST APIを作成 コンテナ化 コンテナ化定義 コンテナ化作業 参考 Node.js で作成した REST API を Docker化した際のメモです。 Node.jsでREST APIを作成 まずはNode.js…

JavaScriptで優先度付きキューを実装する
優先度付きキューについて ソース 参考 JavaScriptで優先度付きキュー (プライオリティキュー) を実装する 優先度付きキューについて 具体的には次のような機能があります。 キューに対して要素を優先度付きで追加 (push…

Tags

Dates

s-yoshiki
s-yoshiki
githubtwitterqiita
ただの備忘録です。
JS/TS/node.js/PHP/AWS/OpenCV/CentOS
※このブログの内容は個人の見解であり、所属する組織等の見解ではありません。
© 2022   404 motivation not found