Laravel Deployer是Laravel专用的部署工具,通过配置文件定义标准化流程,支持一键部署、多环境管理、回滚等功能,大幅减少手动操作。
composer require deployer/deployer:^7.0 deploy.php(或deploy.yaml),定义服务器信息、部署路径及任务流程。以下是Debian服务器的典型配置:<?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']); // 需要赋予权限的目录(确保Web服务器可写入) // 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'); // 项目部署路径 dep init # 首次部署需初始化(创建release目录结构) dep deploy # 执行完整流程:拉取代码→安装依赖→运行迁移→清除缓存→切换版本 dep rollback 该命令会将current目录指向上一个release目录,确保服务不中断。通过GitHub Actions、GitLab CI等工具,将部署流程与代码托管平台绑定,实现“代码推送→自动部署”的无缝衔接,减少人工触发步骤。
.github/workflows/deploy.yml文件,配置如下:name: Deploy Laravel to Debian on: push: branches: - main # 当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' # PHP版本(需与Debian服务器一致) extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite # Laravel所需扩展 - name: Install dependencies run: composer install --optimize-autoloader --no-dev # 安装生产环境依赖(排除开发依赖) - name: Deploy to Debian uses: appleboy/scp-action@v0.1.4 # 通过SCP传输文件到服务器 with: host: ${{ secrets.SERVER_HOST }} # GitHub Secrets中配置的服务器IP username: ${{ secrets.SERVER_USER }} # 服务器用户名 key: ${{ secrets.SSH_PRIVATE_KEY }} # 服务器SSH私钥(需提前生成并添加到Secrets) source: '.' # 本地项目目录 target: '/var/www/your-laravel-app' # 服务器部署路径 script: | cd /var/www/your-laravel-app dep deploy # 执行Deployer部署流程 Settings -> Secrets中添加以下密钥: SERVER_HOST:Debian服务器IP或域名SERVER_USER:服务器用户名(如deploy-user)SSH_PRIVATE_KEY:服务器SSH私钥(用于免密登录)main分支时,GitHub Actions会自动将代码传输到服务器并执行Deployer部署。Docker通过容器技术封装Laravel应用及其依赖(PHP、Nginx、MySQL等),避免“环境差异”问题,部署时只需启动容器即可,无需手动安装软件。
Dockerfile,定义应用环境:FROM php:8.2-fpm RUN docker-php-ext-install mysqli pdo pdo_mysql # 安装PHP扩展 WORKDIR /var/www/html COPY . . # 复制项目文件 RUN chown -R www-data:www-data /var/www/html # 设置目录权限 EXPOSE 9000 # PHP-FPM端口 CMD ["php-fpm"] # 启动PHP-FPM version: '3' services: web: build: . # 使用当前目录的Dockerfile构建镜像 command: php artisan serve --host=0.0.0.0 --port=8000 # 启动Laravel开发服务器(生产环境建议用Nginx) volumes: - .:/var/www/html # 挂载项目目录(实时修改代码生效) ports: - "8000:8000" # 映射端口到宿主机 depends_on: - db db: image: mysql:8.0 # 使用官方MySQL镜像 environment: MYSQL_ROOT_PASSWORD: secret # 数据库root密码 MYSQL_DATABASE: laravel_db # 数据库名称 MYSQL_USER: laravel_user # 数据库用户 MYSQL_PASSWORD: laravel_pass # 数据库密码 volumes: - db_data:/var/lib/mysql # 持久化数据库数据 volumes: db_data: docker-compose up -d 访问http://localhost:8000即可看到Laravel欢迎页面。若不想使用复杂工具,可通过编写Shell脚本自动化传统部署步骤(如克隆代码、安装依赖、运行迁移等),减少手动输入。
deploy.sh文件,内容如下:#!/bin/bash # 定义仓库地址和分支 REPOSITORY="git@github.com:your-username/your-laravel-repo.git" BRANCH="main" DEPLOY_PATH="/var/www/your-laravel-app" # 克隆或更新代码 if [ -d "$DEPLOY_PATH" ]; then cd "$DEPLOY_PATH" git pull origin "$BRANCH" # 拉取最新代码 else git clone "$REPOSITORY" "$DEPLOY_PATH" # 首次克隆 cd "$DEPLOY_PATH" fi # 安装依赖 composer install --optimize-autoloader --no-dev # 生成应用密钥(首次部署需执行) php artisan key:generate # 运行数据库迁移 php artisan migrate --force # 清除缓存 php artisan config:clear php artisan cache:clear # 重启Web服务器(假设使用Nginx) sudo systemctl restart nginx hooks目录下创建post-receive文件(需有写入权限),内容如下:#!/bin/bash GIT_WORK_TREE=/var/www/your-laravel-app git checkout -f # 将代码推送到部署目录 赋予执行权限:chmod +x /path/to/repo/.git/hooks/post-receive 此时,每当你向Git仓库推送代码时,post-receive钩子会自动触发deploy.sh脚本,完成部署。以上方法可根据项目规模和团队需求选择: