Zero Downtime Deployment Tool for Laravel Applications
Recommended for most users
composer global require 4msar/laravel-deployer
Standalone executable
curl -sS https://raw.githubusercontent.com/4msar/laravel-deployer/main/install.sh | bash
Download and install manually
wget https://github.com/4msar\
/laravel-deployer/releases\
/download/laravel-deployer
chmod +x laravel-deployer
sudo mv laravel-deployer \
/usr/local/bin/
For developers
git clone https://github.com\
/4msar/laravel-deployer.git
cd laravel-deployer
composer install
php laravel-deployer app:build
Ready to deploy? Start with:
laravel-deployer deploy
The deploy command fetches the latest release from GitHub and deploys it with zero downtime using symlink-based switching. It handles everything from downloading to health checks and cleanup.
laravel-deployer deploy
This enters interactive mode and prompts for configuration.
laravel-deployer deploy --repo=owner/repo
--app-name=myapp --install-dir=/var/www
| Option | Description | Default |
|---|---|---|
| --repo | GitHub repository (owner/repo) | Interactive prompt |
| --app-name | Application name | repo basename |
| --install-dir | Installation directory | Current working directory |
| --web-user | Web server user for permissions | www-data |
| --github-token | GitHub token for private repos | None |
| --keep-releases | Number of old releases to keep | 2 |
| --skip-migrations | Skip database migrations | false |
| --auto-cleanup | Auto cleanup old releases | false |
laravel-deployer deploy \
--repo=4msar/bill-organizer \
--app-name=bill-organizer \
--install-dir=/var/www \
--web-user=www-data \
--github-token=ghp_xxxxxxxxxxxx \
--keep-releases=3 \
--auto-cleanup
Keep at least 2 releases so you can quickly rollback if needed.
The rollback command safely reverts to the previous release if something goes wrong with the current deployment. It switches the symlink back and runs health checks to ensure everything is working.
laravel-deployer rollback
laravel-deployer rollback --app-name=myapp
--install-dir=/var/www
At least 2 releases must exist to perform a rollback. The install directory must be a symlink.
Laravel Deployer uses symlink-based deployment to achieve zero downtime. Instead of modifying the current application, it:
Stops the app → Deploys new code → Restarts app = Downtime
Creates new release → Switches symlink → App keeps running = No downtime
/var/www/
├── myapp -> myapp-v1.2.0 (symlink to current release)
├── myapp-v1.2.0/ (current release)
│ ├── app/
│ ├── config/
│ ├── storage/ (preserved from old install)
│ ├── .env (preserved from old install)
│ └── public/
├── myapp-v1.1.0/ (previous release - kept for rollback)
└── backups/ (backup directory)
Create a GitHub Personal Access Token to avoid rate limiting and access private repositories:
repo
(for private repos) or
public_repo
(for public repos)
--github-token
option or in .env
Never commit your GitHub token to version control. Use environment variables or command-line options only.