Skip to content

Template

Self-host WordPress on a server you own.

The site builder and blog, with its plugins and themes, backed by MySQL. It installs as an ordinary app that deploys, backs up and rolls back like yours.

At a glance

Image
wordpress:7.1.2-php8.4-apache
Port
80, behind kamal-proxy
Health check
/wp-includes/images/blank.gif
Volumes
content
Accessory
mysql:8.4.11
Singleton
no

What the install does

  • Adds a MySQL accessory and points WordPress at it by container name, never published off the machine
  • Generates the eight keys and salts WordPress signs sessions with, so a deploy no longer signs everybody out
  • Aliases the database password to the accessory's own, so there is one value to keep rather than two to keep matching
  • Raises PHP's upload limits to 64 MB, since the 2 MB default refuses most theme and plugin zips
  • Registers the wp-content volume for backup, separately from the database

Installing does not deploy. Point an A record for the domain at the server, then press Deploy.

Before you start

  • 01

    A registered server and a ready runner.

  • 02

    A hostname, if you have one. WordPress writes its site address into the database the moment its installer runs, so pointing the domain first is less work than changing it after.

  • 03

    Somewhere off the machine for backups. Two things hold state here -- the database and wp-content -- and they are backed up separately.

FAQ

Questions about WordPress.

Read the WordPress guide
How do I upgrade WordPress?

Change the image tag on the app and deploy. Core comes out of the pinned image on every boot, so the tag is the version that runs. Don't upgrade from the dashboard: wp-config.php is rewritten at each boot, so an update made there is undone by the next deploy.

Can I still install plugins and themes from the dashboard?

Yes. Those live in the wp-content volume, which survives a redeploy, so they update from the dashboard as usual. Only core is pinned to the image.

Where is the database?

A MySQL accessory on the same machine, reached by its container name on the kamal network and never published outside it. Its dumps are backed up like any accessory's.

Does WordPress send email?

Not out of the box. The image sends through PHP's mail(), which is not configured in the container, so use an SMTP plugin with a relay or your mail provider's submission port.

Do I need a plugin for HTTPS?

No. TLS is kamal-proxy's, and the image already trusts its X-Forwarded-Proto, so WordPress builds https links behind it without a wp-config change.

Run your own WordPress.

Connect a server, install WordPress, and deploy when the domain points at it.

Sign-ups are paused while the app is in maintenance.