debian

Debian系统Laravel部署如何自动化

小樊
50
2025-09-19 15:37:53
栏目: 智能运维

使用Laravel Deployer实现Debian系统Laravel自动化部署
Laravel Deployer是基于Deployer 7构建的Laravel专用部署工具,通过配置文件定义部署流程,支持一键部署、多环境管理、回滚等功能,是Debian系统下Laravel自动化部署的高效解决方案。

1. 安装Laravel Deployer

在项目根目录下通过Composer安装Deployer依赖:

composer require deployer/deployer:^7.0

安装完成后,项目根目录会生成vendor/deployer/deployer目录,包含部署工具的核心文件。

2. 配置部署文件

在项目根目录创建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'); // 项目部署路径

关键配置说明

3. 定义部署任务(可选)

Laravel Deployer内置了Laravel专用任务(如artisan:migratecache: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');

这些任务会在部署流程中按需调用。

4. 执行部署流程

在项目根目录运行以下命令,完成自动化部署:

# 初始化部署(首次部署需执行,创建release目录结构)
dep init

# 执行完整部署流程(拉取代码→安装依赖→运行迁移→清除缓存等)
dep deploy

部署流程详解

  1. 克隆代码:从Git仓库拉取指定分支的最新代码到服务器的releases目录;
  2. 安装依赖:运行composer install --optimize-autoloader --no-dev安装PHP依赖;
  3. 更新共享文件:将本地的.env文件同步到服务器的共享目录;
  4. 设置权限:为storagebootstrap/cache等目录赋予Web服务器写入权限;
  5. 运行迁移:执行php artisan migrate更新数据库结构;
  6. 清除缓存:运行php artisan config:clearphp artisan cache:clear清除配置和缓存;
  7. 切换版本:将current目录指向最新的release目录,完成版本切换。

5. 回滚部署(可选)

若新版本部署失败或出现问题,可快速回滚到上一个稳定版本:

dep rollback

该命令会将current目录切换到上一个release目录,确保服务不中断。

6. 结合CI/CD(可选)

可将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_HOSTSERVER_USERSSH_PRIVATE_KEY等密钥,确保CI/CD工具能安全访问服务器。

通过以上步骤,可实现Debian系统下Laravel项目的自动化部署,减少人工操作错误,提高部署效率。Laravel Deployer的灵活性和可扩展性,也能满足不同规模项目的需求。

0
看了该问题的人还看了