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脚本,完成部署。以上方法可根据项目规模和团队需求选择: