theabhishekin / laravel-vps-deploy
Provision a fresh or existing VPS end-to-end for your Laravel app — powered by the standalone vps-deploy Rust binary.
Package info
github.com/TheAbhishekIN/laravel-vps-deploy
pkg:composer/theabhishekin/laravel-vps-deploy
Requires
- php: >=8.1
README
Provision a fresh or existing VPS end-to-end for your Laravel app — PHP version, extensions, web server + domain + SSL, database, Redis, cron, queue workers, and websockets — from one command:
composer require theabhishekin/laravel-vps-deploy --dev php artisan deploy:setup
This package is a thin distribution layer. The real engine is
vps-deploy, a fast,
dependency-free Rust binary that detects your app's requirements from
composer.json / package.json and runs an idempotent, preview-first
provisioning pipeline. deploy:setup fetches the right prebuilt binary
for your server's OS/arch (into vendor/bin/vps-deploy) and execs it
with your app's base path and .env location.
Two entry paths, one engine
| Scenario | Entry point |
|---|---|
| Fresh VPS, no PHP installed yet | curl -sSL https://raw.githubusercontent.com/TheAbhishekIN/vps-deploy/main/install.sh | bash |
| Existing Laravel repo, PHP already present | composer require theabhishekin/laravel-vps-deploy --dev |
Both run the same binary and the same pipeline, so there's no drift
between "the composer version" and "the standalone version". Caveat:
a truly bare VPS needs the curl bootstrap once — Composer itself
requires PHP, which is exactly what the binary is about to install.
Usage
php artisan deploy:setup # full interactive wizard (vps-deploy run) php artisan deploy:setup update # repeat-deploy reconciliation php artisan deploy:setup plan # dry run — show what would change php artisan deploy:setup doctor # health check, applies nothing php artisan deploy:setup provision redis php artisan deploy:setup history
Everything after deploy:setup is forwarded to the binary, which already
receives --base-path and --env-file pointed at your app.
Optionally publish the config stub instead of using the interactive init:
php artisan vendor:publish --tag=vps-deploy-config
deploy.yml declares only what can't be inferred (domain, database
engine, worker count, …). PHP version and extensions are read from your
composer.json; the Node version from package.json / .nvmrc.
Binary download details
- Prebuilt binaries exist for Linux
x86_64andaarch64; on other platforms (e.g. your Mac) the download is skipped with a notice — this tool runs on the VPS. - Set
VPS_DEPLOY_BIN=/path/to/vps-deployto use a binary you manage yourself (or one installed byinstall.sh). - Composer only runs
post-install-cmdscripts of the root package, so in consuming apps the download happens on the firstphp artisan deploy:setupinstead — same code path, no difference in behavior.
Server-local state
The engine keeps state.json (current snapshot) and history.jsonl
(append-only audit trail) under ~/.vps-deploy/<app-name>/ on the server
— never in your repo, never part of a code deploy.