Once Pionia Shop works locally, this section covers how to run and ship it — from php pionia serve on port 8000 to RoadRunner workers, OPcache preload, and zero-downtime deploys for Pionia Shop.
You have a working Pionia Shop API (product, customer, order, wallet services) and need to operate it in dev and production — CLI commands, persistent workers, logs under storage/logs/, and deploy-time optimization without rewriting application code.
/stats metricsstorage/, environment/settings.iniflowchart LR Dev["php pionia serve :8000"] --> RR[php pionia runserver] RR --> Opt[php pionia optimize --production] Opt --> Ship[Deploy + restart workers] Ship --> Obs["Logs / stats / cache"]
Development uses a single-process PHP server. Production adds persistent workers, optional OPcache preload, shared cache stores, and observability — all configured in your app, not in framework vendor code.
| Task | Guide |
|---|---|
| CLI overview | Commands |
| Schema changes | Migrations |
| Warm microbenchmarks | Benchmarking |
| Persistent workers | RoadRunner |
| Deploy checklist | Production performance |
| Zero-downtime deploys | Maintenance mode |
| Task | Guide |
|---|---|
| Logs | Logging |
| Request metrics | Developer stats |
| Post-response jobs | Background work |
| Cache stores | Caching |
composer install --no-dev -o
php pionia migrate
php pionia optimize --production
php pionia runserver --detach
curl -s http://127.0.0.1:8000/api/v1/pingoptimize on every code change — use it at deploy time; local dev does not need preload or bootstrap caches.php pionia serve to match production — HTTP/1 only, no job queue; use RoadRunner for production-like testing.opcache.validate_timestamps=0 — stale bytecode until FPM/RR reload./stats open in production without STATS_TOKEN — see Developer stats.Daily CLI and make:* scaffolds.
php pionia bench microbenchmarks.
Persistent workers and Moonlight jobs.