🆓
2025-01-31
2025-02-02
約12488字
目次
1. はじめに
1.1. 背景 / なぜ Cloud Run + GCS + Supabase なのか
1.2. この記事で実現すること
1.3. 前提
2. 全体アーキテクチャの概要
2.1. Cloud Run で WordPress の Dockerコンテナをサーバーレス実行
2.2. Supabase (PostgreSQL) で WordPress のDBを管理
2.3. GCS (Google Cloud Storage) にメディアファイルを保管
2.4. リクエストフロー: Cloud Run (WordPress) → PG4WP → Supabase DB, メディアは GCS から配信
3. Supabase の設定
3.1. Supabase プロジェクトの作成
3.2. PostgreSQL の初期状態
3.3. 接続情報確認
4. GCS と WP-Stateless の設定
4.1. GCS バケット作成
4.2. サービスアカウント作成 (JSONキーの取得)
4.3. WP-Stateless プラグインの概要
5. Dockerfile での構築ポイント
Dockerfile の各ステップ解説
最終的な Dockerfile
ビルドと実行のイメージ
6. Cloud Run にデプロイ
7. WordPress のセットアップ
8. 運用のポイント
9. まとめ
WordPress を運用する場合、一般的にEC2やGoogle Compute Engineなどに構築していました。(僕は昔、さくらVPSにホスティングしていました。)
しかし、近年はサーバーレスやマネージドサービスを活用することで、インフラ管理コストを大幅に削減できるようになっています。本記事で取り上げる構成では、以下のようなメリットがあります。
こうした理由から、「Cloud Run + GCS + Supabase」という構成で WordPress を動かすと、安価かつ拡張性の高いサーバレス運用を実現できます。
本記事では、以下のような構成の WordPress 環境を Dockerfile を用いて構築し、最終的に Cloud Run 上にデプロイします。
これにより、ローカルマシン上の Dockerfile 作成 → Artifact Registry へのプッシュ → Cloud Run デプロイ という一連の手順がわかります。
この構成を進めるには、以下の前提条件を満たしていることを想定しています。
以上の前提をもとに、本記事では 「Cloud Run + GCS + Supabase」 という構成で WordPress を動かす までの流れを詳しく解説していきます。
まず、本記事の中心となるのが Google Cloud Run です。
この部分では WordPress + Apache + PHP + プラグイン を含んだ Docker イメージをビルドし、Cloud Run にアップロードして稼働させます。
Supabase は、ホスティングされた PostgreSQL を主軸としたフルスタックプラットフォームです。
WordPress は記事内でアップロードする画像やファイルを wp-content/uploads
に保存する設計です。しかし Cloud Run のファイルストレージは揮発性 なので、再起動やスケールアウト時にアップロードファイルが消えてしまう問題があります。 これを解決するために GCS (Google Cloud Storage) を採用します。
最終的な動きは以下のようになります:
このように、アプリロジック と 静的ファイルストレージ、DB を切り分けた構成により、サーバーレスかつ低コストで安定した WordPress 運用が可能になります。
まずは Supabase のサイトにアクセスし、新規アカウントを作成します。
プロジェクトの作成が完了すると、Supabase のダッシュボードにアクセスできます。そこには PostgreSQL の接続情報(ホスト名、ポート、ユーザ、データベース名)が記載されています。
メモ: 以下のような形式の接続情報を控えておきましょう。
新規プロジェクトでは、postgres
というスーパーユーザーが設定されており、データベース名も postgres
になっている場合が多いです。
wp-config.php
(または本記事で使う環境変数 WORDPRESS_DB_***
) で、このユーザ名・パスワード・DB名を指定すれば接続可能です。なお、別ユーザ を作成したい場合は、Supabase ダッシュボード上の SQL エディタなどを使って以下のようなコマンドを実行して作成します。
CREATE USER wpuser WITH PASSWORD 'password';
CREATE DATABASE wpdb;
GRANT ALL PRIVILEGES ON DATABASE wpdb TO wpuser;
ただし最初はシンプルにデフォルト (postgres
ユーザ / DB) を利用する方がトラブルが少なくおすすめです。
最終的に、Cloud Run にデプロイした WordPress がこの PostgreSQL に接続するため、以下の情報を必ずメモしておきます。
db.xxxxx.supabase.co
5432
(PostgreSQLの標準ポート)postgres
(または作成した独自のDB名)postgres
などCloud Run にデプロイする際、環境変数 (WORDPRESS_DB_HOST
, WORDPRESS_DB_USER
, WORDPRESS_DB_PASSWORD
, WORDPRESS_DB_NAME
) へそれぞれ割り当てることで、本番環境でも WordPress が正常に動作します。
まずは Google Cloud Storage (GCS) でメディア保存用のバケットを作ります。
my-wordpress-bucket
) とリージョンを指定続いて、GCSのBucketをパブリックアクセス可能な設定を入れます。
このデフォルトの状態では、アップロードしたファイルは認証されたユーザーのみがアクセス可能です。任意のユーザーが閲覧できるようにするには、バケットの IAM & ポリシー設定 を変更します。
allUsers
を入力これにより、GCS にアップロードされたすべてのオブジェクトが パブリックに閲覧可能 になります。
これで WordPress のメディアがアップロードされる先 となる GCS バケットが用意できました。
WP-Stateless で GCS にファイルをアップロードするには、書き込み権限を持ったサービスアカウントを用意する必要があります。
wp-stateless-uploader
などの分かりやすい名前Storage Object Admin
(または Storage Admin
) を選択WP-Stateless がこの JSON キーを使って GCS バケットに対して読み書き を行います。キーを紛失したり公開リポジトリに入れないよう注意しましょう。
WP-Stateless は、WordPress のメディアライブラリを Google Cloud Storage に同期/移動するためのプラグインです。
後ほど解説する Dockerfile では、このプラグインを自動でダウンロード&配置し、コンテナビルド時点で組み込む形を採用します。
ここでは Dockerfile を作成する際の重要なポイントを解説します。また、最後に全体のDockerfileも掲載します。 この Dockerfile をビルドすれば、WordPress + PostgreSQL接続 (PG4WP) + WP-Stateless + オリジナルテーマ をすべて含んだイメージを作成し、Cloud Run 上で動かせるようになります。
latest
にすると WordPress バージョンが変わり続ける可能性があるため、安定運用なら固定を推奨pdo_pgsql
/ pgsql
を有効化db.php
を wp-content/
直下に置き、WordPress がこれを優先的に読み込む仕組みにするwp-content/plugins/wp-stateless
に配置my-theme/
を同梱$PORT=8080
にトラフィックを送るため、Apache 側も 8080 で listenEXPOSE 8080
により、そのポートを公開EXPOSE 80
はオプション扱いだが残していても問題なしこれで WordPress + PostgreSQL + WP-Stateless + カスタムテーマ を一体化したコンテナイメージがビルド可能になります。
## (例) PHP 8.x + Apache 版の公式イメージをベースにする
FROM wordpress:6.5.3-php8.2-apache
## 必要な PHP 拡張をインストール
RUN -eux; \
apt-get update && apt-get install -y \
libpq-dev \
&& docker-php-ext-install pdo_pgsql pgsql \
&& rm -rf /var/lib/apt/lists/*
## WordPress を置くディレクトリ
WORKDIR /var/www/html
## PG4WP のプラグインをコピー
## (PG4WP 一式をあらかじめローカルに用意しておく)
COPY pg4wp /var/www/html/wp-content/plugins/pg4wp
## db.php-dist を db.php にリネームして wp-content/ の直下に配置
RUN /var/www/html/wp-content/plugins/pg4wp/db.php \
/var/www/html/wp-content/db.php
## unzip をインストール (WP-Stateless zip解凍用)
RUN apt-get update && apt-get install -y unzip \
&& -rf /var/lib/apt/lists/*
## WP-Stateless プラグインをダウンロードして配置
RUN -eux; \
curl -o /tmp/wp-stateless.zip \
&& unzip /tmp/wp-stateless.zip -d /tmp \
&& /tmp/wp-stateless /var/www/html/wp-content/plugins/wp-stateless \
&& -rf /tmp/wp-stateless*
## カスタムテーマをコピー
## (ローカルに解凍済みの "my-theme/" フォルダ)
COPY my-theme/ wp-content/themes/my-theme/
## ファイル所有権を調整
RUN -R www-data:www-data /var/www/html
## ApacheのListenポートを8080に変更 (Cloud Runは8080を使う)
RUN sed -i /etc/apache2/ports.conf \
&& sed -i /etc/apache2/sites-available/000-default.conf
## Cloud Runでよく使う8080をEXPOSE
EXPOSE 8080
## (オプション) ポート80も一応EXPOSEしておく
EXPOSE 80
## コンテナ起動時にApacheを起動
CMD []
## Dockerfile があるディレクトリへ
docker build -t my-wp-image .
## ローカルでテストするなら:
docker run -d -p 8080:80 my-wp-image
## (Cloud Run では後ほど --port=8080 に合わせる)
http://localhost:8080
にアクセスし、WordPress の初期インストール画面が表示されればOKgcloud run deploy
を実行します。このように Dockerfile によって、WordPress のコアからプラグイン・テーマ、さらに PostgreSQL 対応や GCS 連携までを一括して構築できるのが大きなメリットです。
--allow-unauthenticated
を付けると一般公開され、誰でもアクセスできるURLとなりますmy-wordpress-bucket
my-gcp-project
){ ... }
) を貼り付けhttps://wordpress-supabase-abc123.run.app
)にアクセスすると、WordPress のインストール画面が表示されます。今回紹介したように、
という構成を組み合わせると、ほぼ無料 かつ サーバレス な WordPress 環境を実現できます。Dockerfile さえ整えてしまえば、再ビルドや再デプロイも容易で、バックエンドの管理コストを大きく削減可能です。
今後の拡張としては、独自ドメイン / HTTPS 設定 や Cloud CDN、CI/CD パイプライン の導入などがあります。まずはこの構成でサイトを構築し、アクセス数が増えても安心してスケールできる WordPress 運用をぜひお試しください。
©︎ 2025 - Yard