使用Laravel Deployer實現Debian系統Laravel自動化部署
Laravel Deployer是基于Deployer 7構建的Laravel專用部署工具,通過配置文件定義部署流程,支持一鍵部署、多環境管理、回滾等功能,是Debian系統下Laravel自動化部署的高效解決方案。
在項目根目錄下通過Composer安裝Deployer依賴:
composer require deployer/deployer:^7.0
安裝完成后,項目根目錄會生成vendor/deployer/deployer
目錄,包含部署工具的核心文件。
在項目根目錄創建deploy.php
配置文件(或deploy.yaml
),定義服務器信息、部署路徑、任務流程等。以下是一個典型的Debian服務器配置示例:
<?php
// deploy.php
require 'recipe/laravel.php'; // 加載Laravel專用配方
set('repository', 'git@github.com:your-username/your-laravel-repo.git'); // Git倉庫地址
set('branch', 'main'); // 部署分支
set('keep_releases', 3); // 保留的歷史版本數量
set('shared_files', ['.env']); // 共享文件(如.env配置文件)
set('shared_dirs', ['storage/app', 'storage/framework', 'storage/logs']); // 共享目錄(需保持寫入權限)
set('writable_dirs', ['storage', 'bootstrap/cache']); // 需要賦予權限的目錄
// Debian服務器配置
host('your-debian-server.com') // 服務器域名或IP
->user('deploy-user') // 服務器用戶名(需有sudo權限)
->port(22) // SSH端口(默認22)
->identityFile('~/.ssh/id_rsa') // SSH私鑰路徑(用于免密登錄)
->set('deploy_path', '/var/www/your-laravel-app'); // 項目部署路徑
關鍵配置說明:
shared_files
:確保.env
等配置文件在部署時不被覆蓋,保持環境一致性;shared_dirs
:存儲用戶上傳的文件、框架緩存等,避免每次部署丟失數據;writable_dirs
:部署后需要修改權限的目錄(如storage
),確保Web服務器可寫入。Laravel Deployer內置了Laravel專用任務(如artisan:migrate
、cache:clear
),也支持自定義任務。例如,在deploy.php
中添加自定義任務:
task('npm:install', function () {
run('cd {{release_path}} && npm install'); // 安裝前端依賴
})->desc('Install npm dependencies');
task('npm:prod', function () {
run('cd {{release_path}} && npm run production'); // 編譯前端資源
})->desc('Compile assets for production');
這些任務會在部署流程中按需調用。
在項目根目錄運行以下命令,完成自動化部署:
# 初始化部署(首次部署需執行,創建release目錄結構)
dep init
# 執行完整部署流程(拉取代碼→安裝依賴→運行遷移→清除緩存等)
dep deploy
部署流程詳解:
releases
目錄;composer install --optimize-autoloader --no-dev
安裝PHP依賴;.env
文件同步到服務器的共享目錄;storage
、bootstrap/cache
等目錄賦予Web服務器寫入權限;php artisan migrate
更新數據庫結構;php artisan config:clear
、php artisan cache:clear
清除配置和緩存;current
目錄指向最新的release
目錄,完成版本切換。若新版本部署失敗或出現問題,可快速回滾到上一個穩定版本:
dep rollback
該命令會將current
目錄切換到上一個release
目錄,確保服務不中斷。
可將Laravel Deployer與GitHub Actions、GitLab CI等CI/CD工具結合,實現代碼推送后自動觸發部署。例如,GitHub Actions的.github/workflows/deploy.yml
配置示例:
name: Deploy Laravel to Debian
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite
- name: Install dependencies
run: composer install --optimize-autoloader --no-dev
- name: Deploy to Debian
uses: appleboy/scp-action@v0.1.4
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
source: '.'
target: '/var/www/your-laravel-app'
script: |
cd /var/www/your-laravel-app
dep deploy
注意:需在GitHub倉庫的Settings -> Secrets
中配置SERVER_HOST
、SERVER_USER
、SSH_PRIVATE_KEY
等密鑰,確保CI/CD工具能安全訪問服務器。
通過以上步驟,可實現Debian系統下Laravel項目的自動化部署,減少人工操作錯誤,提高部署效率。Laravel Deployer的靈活性和可擴展性,也能滿足不同規模項目的需求。