Skip to main content

Overview

WordPress is the open-source content management system for websites and blogs. This template deploys Apache with PHP, a bundled MariaDB database, and a shared volume holding WordPress core, plugins, themes and the media library. The administrator account is created before the site accepts its first request. WordPress runs in exactly one location of your GVC, and wordpress.replicas adds interchangeable replicas that share the same volume and database.
This template deploys into an existing GVC that you already have — it does not create or manage a GVC. The location you set must already be one of that GVC’s locations; if it is not, WordPress starts nothing in the GVC.

What Gets Created

Your administrator, database and root password secrets are not created by the template — see Prerequisites.

Prerequisites

Three secrets must exist before you install, and the GVC should have one location (see the last step). Secrets are org-level, so no --gvc flag is involved, and their values never pass through Helm values.
1

Create the administrator secret

A dictionary secret with username, password and email. WordPress creates its administrator account from it on first boot.
Set admin.secretName to this name.
2

Create the database credentials secret

A dictionary secret the bundled MariaDB initializes with and WordPress connects with:
Set mariadb.credentialsSecretName to this name. Secret names are org-wide, so give each release its own secrets.
3

Create the MariaDB root password secret

An opaque secret holding the MariaDB root password. WordPress never reads it.
Set mariadb.rootPasswordSecretName to this name.
4

Use a GVC with one location

WordPress runs only in the location named by location, which must already be a location of your GVC. The bundled MariaDB starts in every location of the GVC, and each extra location would hold its own separate database. A fresh install on a GVC with more than one location is refused; do not add or remove GVC locations under a live release.
Create all three secrets before installing. Installing without one reports success, but the deployment never becomes ready and cpln logs stays empty; status.versions[].message from the command below names the missing secret:
Creating the secret afterwards does not unblock the deployment. Run cpln workload force-redeployment on RELEASE_NAME-maria and on RELEASE_NAME-wordpress; see Troubleshooting.
Scheduled database backups need a bucket and a cloud account first; see Backing Up.

Installation

Once your three secrets exist, install from the marketplace registry, pointing the keys at them and location at a location of your GVC:
Other ways to install and manage the template:

UI

Browse, install, and manage templates visually

CLI

Manage templates from your terminal

Terraform

Declare templates in your Terraform configurations

Pulumi

Declare templates in your Pulumi programs

Configuration

Location

Use a bare location name such as aws-us-east-1.

WordPress

PHP Limits

Administrator Account

Content Storage

Access

With workload-list, include RELEASE_NAME-wordpress in the list. none isolates WordPress only together with publicAccess.enabled: false.

MariaDB

Every knob of the mariadb template is available under mariadb, including the phpMyAdmin console (mariadb.phpMyAdmin.enabled: true). mariadb.internalAccess.type may not be none, and a workload-list must include RELEASE_NAME-wordpress.

Connecting

Verify the site through a tunnel:
The response must be ok. The first boot seeds the content volume and runs the installer, so the workload takes several minutes to become ready.

First Run

The administrator account already exists from your administrator secret; sign in at /wp-admin. Set wordpress.siteUrl to your own domain once DNS points at the endpoint. With publicAccess.enabled: false, reach the site through a tunnel. WordPress builds every link from its site URL, so set wordpress.siteUrl to the tunnel address (http://localhost:8080), run cpln helm upgrade, open the tunnel above and browse http://localhost:8080/wp-admin/. Set wordpress.siteUrl back to "" (or your custom domain) before turning the public endpoint on again.

Operations

Backing Up

Database backups are off by default. Enable mariadb.backup.enabled: true and choose a provider of aws or gcp; the bucket, cloud account and IAM setup are described in Backing Up, and the backup block above uses the same keys. A backup is a database dump: it does not include the media library, and the template takes no snapshot of the content volume. Keep your own copy of wp-content/uploads, because uninstalling the release deletes the volume.

Restoring a Backup

Restore steps for the database belong to the underlying template: Restoring a Backup. Restoring the media library is manual; copy your own copy of wp-content/uploads back onto the content volume.

Resetting the Administrator Password

The administrator secret is read on first boot only. To reset the password, run this in the container; user 1 is the administrator created at install:

Changing the Database Password

The database secrets are read when MariaDB first initializes. Run ALTER USER in MariaDB first, then update the secret and redeploy both workloads:

Updating WordPress

Changing wordpress.image does not update WordPress core: the image seeds the content volume only while it is empty, and afterwards a new image changes PHP and Apache only. Update core, plugins and themes from the dashboard.

Scaling and Availability

wordpress.replicas: 2 or more keeps the site up while a WordPress replica restarts, because every replica mounts the same volume and database. The bundled MariaDB is a single instance and bounds availability: the site is down while it restarts. With one replica, a change that restarts the workload, such as wordpress.siteUrl or publicAccess.enabled, briefly takes the site down.

Troubleshooting

Symptom: cpln helm install reported success, cpln logs returns nothing, and cpln workload get-deployments RELEASE_NAME-wordpress --gvc GVC_NAME -o yaml shows The secret SECRET_NAME no longer exists. Workload updates are paused until the secret is added or the reference to the secret removed. under status.versions[].message. Cause: A prerequisite secret does not exist. The message names the missing one. Fix: Create it (see Prerequisites), then run cpln workload force-redeployment RELEASE_NAME-maria --gvc GVC_NAME and cpln workload force-redeployment RELEASE_NAME-wordpress --gvc GVC_NAME.
Symptom: The deployment message reads This workload location is deactivated because maxScale is set to 0. Cause: location is not one of the GVC’s locations. The default is aws-us-east-1. Fix: Set location to a location your GVC already has, and run cpln helm upgrade.
Symptom: WordPress reports success but no email is delivered. Cause: The container has no mail transport. Fix: Install an SMTP plugin from the dashboard.
Symptom: cpln helm install fails with a message beginning wordpress:, such as wordpress: `location` is required or wordpress: wordpress.replicas must be at least 1. Cause: A required value is missing or invalid. Fix: Set the value the message names and install again.

Important Notes

  • Install into a single-location GVC and set location to that location; do not add or remove GVC locations under a live release.
  • A location the GVC does not have runs nothing; set it to one the GVC lists.
  • The media library is not backed up and uninstalling deletes it; keep your own copy of wp-content/uploads.
  • wordpress.siteTitle, wordpress.tablePrefix and the three secrets apply on first boot only; change the title in Settings > General.
  • Outbound email does not work until you install an SMTP plugin.
  • A firewall change after changing publicAccess.enabled or internalAccess takes from 30 seconds to a few minutes to apply.

External References

WordPress Documentation

Official user documentation

Advanced Administration Handbook

Security, performance and server configuration

wp-config.php Reference

Every setting WordPress reads

Official WordPress Docker Image

Image variants and environment variables