PRODUCTION-ORIENTED

Docker stack for WordPress hosting.

Minimal, secure, and easy to manage. WordPress + WooCommerce with Caddy, MariaDB, bounded logs, resource checks, and a clean path to BTCPay Server.

Secure by defaultminimal public perimeter
One-command deployDocker + UFW + HTTPS
Easy managementCompose + helpers
Lightweightbuilt for modest VPS

WHAT'S INSIDE

Small stack. Clear responsibilities.

W

WordPress

Current WordPress + Apache/PHP application layer.

DB

MariaDB

Persistent LTS database on a private Docker network.

A

phpMyAdmin

Optional admin profile, disabled by default and localhost-only.

C

Caddy

Automatic HTTPS, HTTP/3, compression, and reverse proxy.

QUICK START

From a clean VPS to WordPress.

The installer prepares Docker when needed, creates private credentials, preserves the active SSH port while configuring UFW, starts the stack, and enables the resource status helper.

terminal
git clone https://github.com/spreywin/sprey-wp-stack.git
cd sprey-wp-stack
sudo ./install.sh example.com admin@example.com

✓ Stack is running

OPERATIONS

See what the VPS is doing before the disk disappears.

Disk

Filesystem usage and inode pressure.

Memory

RAM, swap, uptime, and system load.

Containers

CPU, memory, network, and block I/O snapshot.

Docker storage

Images, containers, volumes, and build cache usage.

status
./status.sh

docker system df -v

LOG SAFETY

Container logs are bounded by default.

01

Local driver

Docker's local logging driver prevents uncontrolled default log growth.

02

10 MB per file

Each container log file is capped at 10 MB.

03

Three files

Rotation keeps at most three files per container.

PAYMENTS & RESILIENCE

WooCommerce, BTCPay and Cloudflare stay loosely coupled.

BTCPay Server remains separate from the WordPress stack. WooCommerce connects through the current BTCPay integration. The live Sprey payment service is available at pay.sprey.win ↗. A Cloudflare Worker provides request-time failover from the primary WordPress VPS to the static sprey-outage.pages.dev notice on network errors, timeout, or selected 5xx responses. It retries primary on every new request; it is not a periodic health monitor or a WooCommerce replacement.

DOCUMENTATION

Need help or want to contribute?

Use the canonical Sprey Docs portal for guides and architecture, or open the source repository on GitHub.