Operations & Management

Development Workflow

Dashboard Hot Reload

# Stop the dashboard container
docker compose stop dashboard

# Run the dashboard locally with hot reload
cd packages/dashboard
npm run dev
# Dashboard available at http://localhost:4000

API Changes

# Rebuild and restart the API service
docker compose build api
docker compose up -d api

Updating in Production

Quick Update

wpl update

This pulls the latest code, rebuilds API/dashboard/provisioner, and restarts services.

Manual Update

v2.5.0+: SHARED_DB_ROOT_PASSWORD must be set in .env. wpl update adds it automatically; with a manual git pull, add it yourself first or Compose will refuse to start.
git pull
docker compose build api dashboard provisioner
docker compose up -d

# If WordPress base image changed:
bash scripts/build-wp-image.sh

# If product configs changed:
bash scripts/build-wp-image.sh --product your-product

Admin Dashboard

The admin dashboard (Agency Mode) includes these tabs:

TabPurpose
OverviewStats, recent sites, activity log
AnalyticsUsage trends, product popularity, user activity
Bulk LaunchCreate up to 50 sites at once with custom prefix
ProductsCRUD for product templates
UsersRole management, promote/demote
SitesView and manage all sites across all users
LogsAudit log of all actions
FeaturesToggle modules (cloning, snapshots, custom domains, PHP config, webhooks, health monitoring, etc.)
BrandingCustomize logo, site title, card layout, color palettes
SystemVersion info, runtime stats, uptime, memory usage

Monitoring & Logs

# View all service logs
docker compose logs -f

# View specific service logs
docker compose logs -f api
wpl logs api

# List running demo containers
docker ps --filter "label=wpl.site"

# Check disk usage
docker system df

# Check memory usage
free -h

Backup

# Back up the data directory (contains SQLite DB and config)
cp -r ./data ./data-backup-$(date +%Y%m%d)
Note: Demo site containers are ephemeral by design. Back up the data/ directory for the management database, product configs, and persistent site data.

Resource Usage

  • ~100 MB RAM per WordPress container (WordPress + PHP + Apache + SQLite)
  • MySQL/MariaDB sites add no per-site database container — they share one server per engine, which starts on demand and stops when its last site is deleted
  • ~200 MB disk per container
  • A 4 GB server can handle 20-30 concurrent sites