A deploy double: a reference app in plain PHP — no framework — that exists to be deployed and checked. It uses MySQL and one cron job, and serves a deploy report at /.well-known/deploy-report so anyone can verify a deploy of it from outside.
Read-only mirror. This app is developed in the
deploydoubles/doublesmonorepo underdoubles/php-mysql/. Open issues and pull requests there.
Everything is declared in double.json:
| Runtime | PHP 8.3+ with pdo_mysql |
| Services | MySQL |
| Processes | web (document root public/, every path through public/index.php); cron: php vendor/bin/deploy-report-run every minute from the app root (crontab) |
| Environment | APP_ENV; the database as a URL (DATABASE_URL) or discrete variables (DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD) — as real variables or in a .env file in the app root |
| Build | composer install --no-dev --optimize-autoloader |
storage/ must be persistent, shared by the web process and the cron job, and kept across releases: double.json lists it in persistent_paths. Set it up as the platform's persistent or shared storage — for example a persistent path in Strackt's Runtime settings, or shared_dirs in Deployer.
npx deploydoubles verify https://your-deploy.example --commit <deployed sha> --jsonThe report serves the full tier publicly (committed in deploy-report.php), so no token is needed. Exit 0 means every check passed on the commit you deployed.
From the monorepo root:
(cd verifier && npm ci && npm run build)
scripts/conformance.sh php-mysqldocker-compose.yml builds from the monorepo root; docker/Dockerfile also builds on its own from this directory (docker build -f docker/Dockerfile .).
Jan Peter Wiersma.