rebelinblue/deployer
Rebelinblue Deployer is a Laravel package for simple, zero-downtime deployments. Configure servers and release steps, publish atomic releases, and roll back safely using Artisan commands—without complex deployment tooling.
What the artifact actually is. Unchanged in kind: rebelinblue/deployer remains a self-hosted Laravel web application — a deployment management UI (projects → environments → servers → deployments) that pushes code over SSH and records history. The 0-dependents figure still holds: nothing composer requires it; you run it. The TPM decision remains "operate a service" or "harvest a reference architecture," not "adopt a library."
What release 0.0.47 changes about that judgement. Two things, one materially positive, one materially cautionary.
Positive: the prior assessment's central risk — "archived upstream, no maintainer, no CVE response" — is now contradicted by evidence. A release landed, it credits an external contributor (@emielmolenaar), and the fixes are the kind that only come from people actually running the thing in production: passphrase-protected SSL keys, ~ path resolution, full-path symlink targets for shared folders, and error output logging for failed processes. That is a live deployment footprint, not a museum piece. The key-custody story also improves slightly: passphrase-protected private keys are now usable, which allows a stronger key-hygiene posture than plaintext-on-disk keys.
Cautionary: the release is versioned 0.0.47 and ships, under an "Important" banner, a destructive-on-first-deploy filesystem migration. On the first deploy of an existing project the shared folder structure is recreated, existing shared folders are backed up, and files are attempted to be migrated — with the release notes themselves telling you to take your own backup and manually verify placement afterwards. That is a schema migration for a filesystem that holds storage/, uploads, and .env files. Pre-1.0 versioning plus a patch-level bump carrying data-migration semantics means: no API stability guarantee, and release notes are the only changelog contract you get.
Architecture fit. Unchanged. Good fit for many small-to-medium PHP/Laravel apps on VM/bare-metal targets wanting push-button, auditable deploys with per-environment config and rollback. Poor fit where the platform strategy is pipeline-as-code (GitHub Actions, GitLab CI) or immutable containers — this remains SSH-and-symlink oriented and would become a parallel, unaudited deployment path.
Integration feasibility. Unchanged, marginally improved. Outward integration (git webhooks, Slack, arbitrary shell steps) is fine. Inward integration is still absent: no stable public API contract, no embeddable component, an auth layer that predates modern SSO/MFA expectations. The 0.0.47 enhancements improve operability (path handling, error visibility), not integrability. Practical posture remains "run it as an isolated internal service behind an authenticating reverse proxy."
Technical risk — revised.
| Risk | Severity | Note |
|---|---|---|
| Pre-1.0 versioning, no changelog/API contract | High | 0.0.47 demonstrates a patch bump can carry a filesystem migration; you cannot infer blast radius from the version number |
| Shared-folder restructure on first deploy | High | Backup-then-best-effort-migrate of storage/uploads/.env; silent data misplacement is the failure mode, not a crash |
| Laravel/Symfony of that era are EOL | High | Unchanged — 0.0.47 fixes application bugs, not the framework floor. Known framework-level vulnerabilities persist; PHP 8.x still not clean |
| Stores SSH private keys to production servers | Medium-High | Downgraded slightly: passphrase-protected keys now supported. Key custody, rotation, APP_KEY blast radius still must be threat-modeled |
| Upstream abandonment | Medium (was High) | One release is evidence of life, not of a support commitment. No published security policy or CVE process observed — ask for one |
| Auth surface (older Laravel auth, limited MFA) | Medium | Unchanged; SSO proxy or network isolation still required |
| Silent behavioral drift in git/SSH tooling | Medium | Partially mitigated: failed-process output is now logged, and path handling is more correct. Host-key algorithm support remains unverified |
MIT license continues to remove legal friction for forking.
Key questions to resolve before any commitment.
Stack fit. Treat it as an appliance. Pinned container set: PHP 7.1/7.2, MySQL 5.7, Redis for queues, Node 8 for the one-time asset build, nginx + supervisor + scheduler cron. Pin the Composer lockfile, vendor built assets, and now pin the application release explicitly (0.0.47) rather than tracking master — the version number will not warn you about the next migration. Front with an SSO-terminating proxy and restrict egress to specific target hosts.
Migration path — three options, ranked (unchanged, with revised weighting):
Compatibility. Two additions to the existing checklist. First, validate the shared-folder migration on a restored copy of a real project before touching anything live, and diff the resulting directory tree. Second, confirm the host's OpenSSH accepts the key types and host-key algorithms the bundled SSH library negotiates — the ~ and full-path fixes suggest path assumptions have been drifting against modern environments, so assume other assumptions have too.
Sequencing.
Maintenance. Still the heaviest line item, but the shape changed. A live upstream means dependency vulnerabilities may get fixed rather than becoming purely our tickets — a real reduction in standing burden, contingent on the cadence being real. Against that, pre-1.0 releases can carry filesystem migrations under a patch version, so every upgrade now needs a changelog read and a backup-verify step, not a blind git pull. The framework-upgrade project (auth, queue, frontend) is unchanged and still effectively a rewrite. Add the standard Laravel operational surface: queue workers, scheduler, storage permissions, log rotation, DB backups.
Support. Was "zero vendor support, zero active community." Now: a small contributor base, at least one recent external patch, still no vendor and no published security policy. Internal ownership remains mandatory — named engineer, runbook, on-call slot — because the tool holds production SSH keys. Single-owner risk persists.
Scaling. Unchanged. Web tier scales horizontally; queue workers are the throughput lever and bound deployment concurrency alongside per-project locking. MySQL is the eventual bottleneck (deployment logs and step output grow fast — plan retention and archival; 0.0.47's verbose failed-process logging slightly increases that growth). SSH fan-out is fine at tens of hosts, not thousands. Comfortable for a mid-size org, poor for a large one.
Failure modes to instrument for.
.env, uploads, and storage can land wrong. Mandatory pre-deploy backup plus post-deploy verification checklist.APP_KEY plus DB dump yields every target's SSH key. Passphrase-protected keys now reduce the value of a stolen key file, which makes adopting them a prerequisite rather than an option. Rotation runbook and per-environment key scoping still required.Ramp-up. One to two engineers, roughly two to four weeks to genuine productivity with existing Laravel familiarity. Add a few days specifically for the release-directory/shared-folder model and the 0.0.47 migration procedure — it is now a documented operational step, not just an architectural concept. Required knowledge: Laravel queue/scheduler operation, SSH key lifecycle management including passphrase handling, and the symlink-release deploy model.
Bottom line for the TPM: the risk profile improved but the adoption decision did not flip. Upstream is alive and the key-handling story is better; the framework floor is still EOL, the versioning still gives no safety signal, and the latest release ships a filesystem migration under a patch number. Default remains option 1 (reference-only) — now with a better reference. Permit option 2 with a named owner, a written support expectation from upstream, a security sign-off on credential handling, and an explicit upgrade budget. If adopting, pin 0.0.47 and treat the shared-folder migration as a change-managed event with its own backup and verification steps.
How can I help you explore Laravel packages today?