WordPressをKamalでVPSにデプロイ
はじめに
少し前にRailsとPostgreSQLで構成しているアプリをKamalでVPSにデプロイしました。
この他にWordPressをクラウドの仮想マシンで運用している環境があるのですが、計算資源が少ないためか動作が不安定だったので、Kamalを利用してVPSにデプロイすることにしました。
上記の記事の「VPSのセットアップ」から「GitHub Container Registryのセットアップ」まではできている環境で、WordPressのデプロイをしていきます。
Kamalのデプロイ情報を設定
まずはディレクトリを作成して、Kamalの初期化をします。
kamal init
.kamal/github.key
にGitHub Container RegistryのPersonal Access Tokenを保存して、.kamal/mysql.key
にMySQLのパスワードを保存しています。
WORDPRESS_DB_PASSWORD=$(cat .kamal/mysql.key)
MYSQL_PASSWORD=$(cat .kamal/mysql.key)
KAMAL_REGISTRY_PASSWORD=$(cat .kamal/github.key)
config/deploy.yml
を以下のように編集します。<>
で囲われている部分は環境に応じて変更してください。この例ではMySQL 9.4を指定していますが、作業する時点での最適なバージョンを指定してください。
service: <YOUR_APPNAME>
image: ghcr.io/<YOUR_GITHUB_USERNAME>/<YOUR_APPNAME>
registry:
server: ghcr.io
username: <YOUR_GITHUB_USERNAME>
password:
- KAMAL_REGISTRY_PASSWORD
servers:
web:
hosts:
- <VPS_IP_ADDRESS>
proxy:
ssl: true
app_port: 80
host: <YOUR_APP_HOST_AND_DOMAIN>
healthcheck:
path: /up.php
builder:
arch: amd64
env:
secret:
- WORDPRESS_DB_PASSWORD
clear:
WORDPRESS_DB_HOST: <YOUR_APPNAME>-db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: <YOUR_APPNAME>
volumes:
- "<YOUR_APPNAME>_storage:/var/www/html"
accessories:
db:
image: mysql:9.4
host: <VPS_IP_ADDRESS>
env:
clear:
MYSQL_DATABASE: wordpress
MYSQL_USER: <YOUR_APPNAME>
MYSQL_RANDOM_ROOT_PASSWORD: "1"
secret:
- MYSQL_PASSWORD
directories:
- data:/var/lib/mysql
ヘルスチェックの対応
以下の記事の通りにヘルスチェックの対応をしていきます。
<?php
header("Content-Type: application/json");
http_response_code(200);
echo json_encode(["healthy" => true]);
exit;
アップロードのサイズ上限を変更
今回はWordPressのデータ移行にAll-in-One WP Migrationを利用しました。デフォルトだとアップロードのサイズ上限が2MBとなっているので、バックアップファイルのサイズに応じてアップロードできるサイズを指定しておきます。
post_max_size = 512M
upload_max_filesize = 512M
Dockerfileの作成
Dockerfileを作成します。2025年9月時点ではwordpress:latest
だとPHPのバージョンが8.2で、WordPressをインストールした後のダッシュボード画面でPHP 8.3にするように表示されるので、この例ではwordpress:php8.3-apache
を指定しています。作業する時点での最適なPHPのバージョンを指定してください。
また、up.php
とupload.ini
を適切な場所にコピーするようにします。
FROM wordpress:php8.3-apache
COPY up.php /var/www/html/up.php
COPY upload.ini /usr/local/etc/php/conf.d/
EXPOSE 80
デプロイ
ここまでの準備ができたら、Kamalのコマンドを実行してデプロイします。
kamal setup
デプロイが完了するとWordPressのセットアップ画面にアクセスできるようになります。
おわりに
WordPressをスケーラブルなクラウドのコンテナで動作させるのは面倒だったのですが、VPSにKamalでデプロイするのは簡単でよかったです。
Discussion