使用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的灵活性和可扩展性,也能满足不同规模项目的需求。