Skip to main content
Arct Cloud provides the unmanaged Linux VPS for this deployment. WordPress is not preinstalled or managed by Arct Cloud. You are responsible for WordPress administration, plugins, themes, security, backups, email delivery, and updates. Arct Cloud does not provide WordPress application support.
Moving an existing site rather than starting a new one? See WordPress Migration, which builds on this stack.

Choose a Plan

WordPress does not publish a universal CPU, RAM, or disk minimum because resource use depends heavily on traffic, caching, themes, plugins, and media. Its official modern software baseline is PHP 8.3 or newer, MariaDB 10.11+ or MySQL 8.0+, and HTTPS. These are Arct deployment recommendations, not official WordPress hardware requirements. Monitor memory, CPU, database size, and media growth after launch.

Before You Begin

Prepare the following:
  • A fresh Ubuntu 24.04 server
  • A hostname such as www.example.com
  • An A record pointing the hostname to the server’s public IPv4 address
  • Docker Engine with the Docker Compose plugin, installed from Docker’s official Ubuntu repository
  • An external SMTP provider if the site must send reliable email
The stack below uses the Docker Official Image for WordPress with PHP 8.3 and Apache, MySQL 8.4, and Caddy 2. Only Caddy publishes web ports; WordPress and MySQL remain private on the Compose network.

Install WordPress

1

Deploy and Connect

2

Create the Project and Database Secret

Keep the secret file out of source control and never paste it into a support ticket.
3

Create the Compose File

Create /opt/wordpress/compose.yaml:
compose.yaml
The image tags follow supported stable channels while pinning the PHP, MySQL, and Caddy major or minor line. Review compatibility before changing any of them.
4

Configure the Domain and HTTPS

Generate a temporary setup password hash. The command prompts without echoing the password:
Create /opt/wordpress/Caddyfile, replace the example hostname, and replace REPLACE_WITH_HASH with the command output:
Caddyfile
Temporary Basic Authentication prevents another visitor from claiming the public WordPress installer. Caddy obtains and renews the TLS certificate automatically after DNS resolves and ports 80 and 443 are reachable. The official WordPress image recognizes the forwarded HTTPS scheme.
5

Start the Stack

MySQL can take a minute to initialize on the first start. Follow progress with sudo docker compose logs -f --tail=100 and press Ctrl+C after the services settle.
6

Complete the First Login Securely

Open https://www.example.com and complete the WordPress installer. Use a unique administrator username other than admin, a generated password, and a monitored email address.After signing in:
  • Install all offered core, theme, and plugin updates.
  • Remove unused plugins and themes.
  • Keep the built-in file editor disabled through WORDPRESS_CONFIG_EXTRA.
  • Enable two-factor authentication with a well-maintained plugin from the official WordPress plugin directory.
  • Configure authenticated SMTP and test password-reset email before inviting other users.
Remove the entire basic_auth block from Caddyfile, then validate and reload Caddy:
Confirm a new private-browser session reaches WordPress without the temporary setup prompt.
7

Verify the Deployment

Confirm the response uses HTTPS, no service is restarting, and the WordPress dashboard reports the expected site URL.

Firewall and Port Safety

Allow SSH before enabling UFW:
Port 443/udp is optional and enables HTTP/3 through Caddy. Do not publish MySQL port 3306 or the WordPress container’s port 80. Docker-published ports can bypass some UFW forwarding rules; this Compose file intentionally publishes only Caddy’s public ports.

Persistent Data and Secrets

The wordpress_data volume contains WordPress core files, uploads, themes, and plugins. The db_data volume contains the MySQL database. A recoverable backup requires both at the same point in time. The database password is stored in /opt/wordpress/secrets/db_password and mounted with Compose secrets. Keep /opt/wordpress, the backup set, and any copied configuration private. Do not add phpMyAdmin or expose the database merely for convenience.

Back Up and Restore

Create a maintenance window and back up both the database and WordPress files. Stopping Caddy prevents new public requests while the snapshot is created:
Copy the complete timestamped set to encrypted storage outside the VPS and keep several generations. The configuration archive contains the database password and must remain private; the image manifest records the exact images needed for a reproducible rollback. Test restoration on a separate deployment: restore the file archive into an empty WordPress volume, import the matching SQL dump into an empty database, then verify URLs, media, users, and plugins before changing DNS. Do not restore only the files or only the database. Follow the official WordPress backup guidance for retention and database-specific alternatives.

Update and Roll Back Safely

WordPress in the official image is self-managing inside its persistent volume. Apply WordPress core, plugin, and theme updates from the dashboard after creating a full backup. To update the PHP/Apache, MySQL, and Caddy container images within their pinned channels:
Read WordPress release notes and plugin compatibility information before major changes. Keep MySQL on its current major line unless you have reviewed the database vendor’s upgrade path. A safe rollback restores the matching pre-update database and files together and pins the Compose images to the digests recorded in that backup set; replacing only the container image cannot reverse a WordPress database migration.

Troubleshooting

Official Resources

WordPress Requirements

Current PHP, database, web server, and HTTPS requirements.

WordPress Docker Image

Official image tags, Compose example, secrets, and reverse-proxy behavior.

WordPress Documentation

Installation, administration, updates, and troubleshooting guidance.

WordPress Releases

Official release archive and version history.

WordPress Development Repository

Upstream development source, tests, and issue references.
WordPress is a trademark of the WordPress Foundation. Arct Cloud is an independent infrastructure provider and is not affiliated with, sponsored by, or endorsed by the WordPress Foundation or the WordPress project.