systemsdk/docker-nginx-php-laravel
A ready-to-use Docker environment for Laravel development, bundling Nginx, PHP-FPM, MySQL, Redis, and common tooling. Spin up isolated, reproducible stacks with configurable PHP versions and simple Docker Compose commands for local development and CI.
Framing correction. This is not a Composer package in the sense the supplied artifacts assume. systemsdk/docker-nginx-php-laravel is a Docker Compose reference environment — Nginx, PHP-FPM, MySQL, Redis, MailHog, Xdebug, queue and cron workers — distributed as a repository. Nothing enters the application's dependency graph. Adoption is a copy/fork/submodule, which means the team takes ownership of a small infrastructure codebase rather than consuming a versioned, upgradable artifact. Every downstream conclusion follows from that distinction.
Input defect to flag. The provided assessment-tpm.md and assessment-laravel_dev.md describe a service-provider/facade library (composer require, vendor:publish, illuminate/* constraints, config:cache gotchas). None of that is applicable here. Those artifacts should be discarded for this decision, and the composite score (20.8) should be read as a generic-library rubric applied to an infrastructure repo — not as evidence about this package's quality.
Architecture fit. Strong for Laravel teams without dedicated DevOps headcount who want a production-shaped local stack (Nginx + PHP-FPM rather than artisan serve), with queue/cron/MailHog pre-wired. Weak where the org already standardizes on Laravel Sail or a platform team's container baseline — running two local-stack standards is a real, recurring cost. The bundle's differentiators over Sail are multi-PHP-version support, MailHog, and supervisor-managed workers; confirm you actually need them before choosing third-party over first-party.
Integration feasibility. High for local dev and CI; medium for an existing app. The work is reconciliation, not installation: exact PHP minor and extension set (intl, bcmath, gd/imagick, pdo_mysql, zip), MySQL major version versus production, Node/asset-build toolchain, UID/GID mapping for bind mounts, and host architecture (Apple Silicon vs amd64) for any image not published multi-arch. Budget 1–3 engineer-days for a pilot plus CI wiring; assume 5+ if the app carries anything unusual (Oracle/SQL Server drivers, Imagick, FFmpeg, Octane).
Technical risk. Medium, and ownership-shaped rather than code-shaped.
nginx:, php:*-fpm, and mysql: tags float, dev environments silently drift and CVE remediation belongs to nobody; if pinned, someone must own a bump cadence.php.ini, opcache settings, worker topology, and DB minor will surface at release time, not during development.Key questions.
Stack fit. Assumes Docker Engine/Desktop + Compose v2 on every developer machine and on CI runners (DinD or socket-mounted). The Laravel app lives in an app directory bind-mounted into the PHP-FPM container; Nginx serves it. No application code changes. Fits teams of roughly 3–20 Laravel engineers without a platform function far better than hand-rolled per-machine setups.
Migration path.
php artisan test passes in-container.php -v, php -m, composer check-platform-reqs) against the current app requirements; add missing extensions to the Dockerfile, never to individual machines..env.example into the app repo tracked against an upstream remote (or a submodule). Never a bare copy without provenance.Compatibility. Verify PHP/Laravel bounds, MySQL major, host architecture, and port collisions — 3306, 6379, and 8025 are common local offenders and should be parameterized through .env. Split Xdebug behind a separate Compose profile; left on, it costs 2–5× in request latency and generates "this stack is slow" reports.
Sequencing. Do this before a hiring wave or onboarding cohort, where the ROI concentrates. Do not run it concurrently with a framework upgrade or any change that moves the PHP version — you will be debugging two variables at once. Pin a specific upstream tag; never track main. Defer until in-flight build or deploy tooling changes land.
Rollback. Trivial and complete. There is no runtime dependency: remove the vendored directory, revert CI config, and developers fall back to their prior local setup.
Maintenance. The dominant cost, and recurring. Three streams: base-image bumps for CVEs (monthly minimum; quarterly is negligence), upstream rebases (roughly once per upstream release), and drift control when engineers customize their own compose files. Assign one named owner and maintain a "how we diverge from upstream" file in-repo. Steady state: 2–4 hours/month plus a half-day per upstream merge.
Support. Net positive on onboarding — measure hours-to-first-successful-artisan-run for new hires before and after. Net negative in that the team now owns infrastructure questions it previously outsourced to "whatever was installed." Expect recurring tickets on volume permissions, port conflicts, and "it's slow" (almost always Xdebug or filesystem-mount settings). Mitigate by writing the troubleshooting section during the pilot, while the failures are fresh.
Scaling. As a dev environment it scales linearly with headcount at near-zero marginal cost; the real constraint is laptop RAM (MySQL + Redis + MailHog + Xdebug runs ~2–3 GB). Ship a lightweight profile. As a production mechanism it does not scale at all — single host, no orchestration, no horizontal worker scaling. That is a different project.
Failure modes, ranked.
storage/ and bootstrap/cache write failures are the classic symptom. Set UID/GID via .env on day one.Ramp-up. Roughly half a day for a Laravel developer already fluent in Docker; one to two days for those who are not — and those people need real pairing help, not a README. Total pilot cost: 2–4 engineer-days including CI, documentation, and full validation of one repo. Do not roll out org-wide on the strength of a single successful local boot.
Recommendation. Adopt as a dev + CI environment template, piloted on one repo and vendored with tracked upstream provenance, contingent on the image-publishing, PHP-matrix, and ownership answers above. Do not adopt as a production deployment mechanism. Run a short written comparison against Laravel Sail before standardizing, and discard the two pre-supplied assessment artifacts — they evaluate a different kind of artifact and should not inform this decision.
How can I help you explore Laravel packages today?