📑

WordPressをKamalでVPSにデプロイ

に公開

はじめに

少し前にRailsとPostgreSQLで構成しているアプリをKamalでVPSにデプロイしました。

https://zenn.dev/kaorumori/articles/6e34284ea51961

この他に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のパスワードを保存しています。

.kamal/secret
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を指定していますが、作業する時点での最適なバージョンを指定してください。

config/deploy.yml
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

ヘルスチェックの対応

以下の記事の通りにヘルスチェックの対応をしていきます。

https://qiita.com/turnturn/items/975b6c5f2fbafbdb085c

up.php
<?php
header("Content-Type: application/json");
http_response_code(200);
echo json_encode(["healthy" => true]);
exit;

アップロードのサイズ上限を変更

今回はWordPressのデータ移行にAll-in-One WP Migrationを利用しました。デフォルトだとアップロードのサイズ上限が2MBとなっているので、バックアップファイルのサイズに応じてアップロードできるサイズを指定しておきます。

upload.ini
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.phpupload.iniを適切な場所にコピーするようにします。

Dockerfile
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