Build the images first:
bash scripts/build-wp-image.shCreate at least one product configuration:
bash scripts/create-product.shdocker compose ps traefikdocker ps --filter "label=wpl.site"wpl logs traefik# Find what's using port 80
sudo lsof -i :80
# Stop the conflicting service, then restart
wpl restart# Check memory usage
free -h
# Add swap if needed
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# Or reduce container memory in .env
CONTAINER_MEMORY=128mUsually caused by incorrect siteurl or home values. Fix via WP-CLI:
wpl wp <subdomain> option update siteurl "http://<subdomain>.localhost"
wpl wp <subdomain> option update home "http://<subdomain>.localhost"Many VPS providers block ports 25, 465, and 587. Test connectivity:
timeout 5 bash -c 'cat < /dev/tcp/smtp.example.com/587'If blocked, switch to Brevo HTTP API which uses port 443 (always open).
SMTP_SECURE=false (uses STARTTLS upgrade)SMTP_SECURE=true (implicit TLS from the start)You're using HTTP challenge with Cloudflare proxy enabled. Either switch to DNS challenge or disable Cloudflare proxy (grey cloud).
dig yourdomain.comdocker compose logs traefiksudo ufw statusSet ENABLE_TLS=true in your .env and restart.
Let's Encrypt limits 50 certificates per registered domain per week. If hit, wait 7 days or use DNS challenge for a single wildcard cert.
Your user isn't an admin. Promote yourself:
wpl admin:promote [email protected]Set ADMIN_EMAIL in .env and restart, then register with that email. Or use the API_KEY from .env for direct API access.
| Method | Path | Auth | Description |
|---|---|---|---|
| POST | /api/auth/register | — | Register new user |
| POST | /api/auth/login | — | Login, returns JWT |
| GET | /api/auth/me | JWT | Current user info |
| GET | /api/products | JWT | List available products |
| POST | /api/sites | JWT | Launch a new site |
| GET | /api/sites | JWT | List user's sites |
| DELETE | /api/sites/:id | JWT | Delete a site |
| POST | /api/sites/:id/extend | JWT | Extend site expiry |
| POST | /api/sites/:id/clone | JWT | Clone a site |
| GET | /api/admin/sites | Admin | List all sites |
| GET | /api/admin/users | Admin | List all users |
| PUT | /api/admin/users/:id/role | Admin | Change user role |
| GET | /api/admin/stats | Admin | Dashboard statistics |
| GET | /api/admin/logs | Admin | Audit log |
| GET | /api/system/info | Admin/API Key | System info |
| GET | /api/system/health | — | Health check |