需构建ci/cd流水线实现php项目一键部署:①初始化git并规范分支策略;②配置github actions自动触发构建、测试;③通过rsync+ssh安全同步至生产服务器;④集成备份与回滚机制保障稳定性。

你想把PHP框架项目从本地开发环境一键推送到生产服务器,不手动传文件、不漏装依赖、不出错回滚——这需要一条跑通“提交→验证→上线”的CI/CD流水线,而不是靠人工复制粘贴。
初始化Git仓库并规范分支策略
在项目根目录执行 git init → git add . → git commit -m "init: project scaffold",确保所有代码已纳入版本控制。
创建 main 分支作为生产发布基准,另建 develop 分支用于日常集成;【禁止直接向 main 推送代码,所有上线必须经 PR 合并】。
将 .gitignore 补全,至少排除 vendor/、.env、.env.local、coverage/、node_modules/ 等目录,避免敏感信息和临时文件污染仓库。
配置GitHub Actions自动触发流水线
在项目根目录新建 .github/workflows/ci-cd.yml,内容如下:
name: PHP CI/CD Pipeline
on:
push:
branches: [ develop ]
pull_request:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
extensions: mbstring, curl, pdo_sqlite, xml
- name: Install dependencies
run: composer install --no-dev --prefer-dist
- name: Run PHPUnit tests
run: vendor/bin/phpunit --verbose --debug
这个配置让每次向 develop 推送或发起合并到 main 的 PR 时,自动拉取代码、装依赖、跑测试;【若测试失败,PR 将被阻止合并,不会进入部署环节】。
部署前准备:目标服务器与密钥管理
登录生产服务器,创建部署用户(如 deployer),赋予 /var/www/myapp 目录写权限,并禁用其 shell 登录(chsh -s /usr/sbin/nologin deployer)。
生成无密码 SSH 密钥对:ssh-keygen -t ed25519 -C "ci@myapp" -f ./deploy_key,将公钥追加到服务器 deployer 用户的 ~/.ssh/authorized_keys 中。
把私钥内容 base64 编码:base64 -w0 deploy_key → 复制输出结果,在 GitHub 仓库 Settings → Secrets and variables → Actions → New repository secret,键名填 DEPLOY_SSH_KEY,值粘贴编码后字符串。
编写部署任务:rsync + SSH 安全同步
在 ci-cd.yml 文件 jobs: 下新增 deploy-to-prod 作业:
deploy-to-prod:
needs: build-and-test
if: github.event_name == 'pull_request' && github.head_ref == 'main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Decode SSH key
run: echo "${{ secrets.DEPLOY_SSH_KEY }}" | base64 -d > deploy_key
- name: Set up SSH
run: chmod 600 deploy_key && ssh-keyscan -H your-server.com >> ~/.ssh/known_hosts
- name: Deploy via rsync
run: rsync -avz --delete -e "ssh -o StrictHostKeyChecking=no -i deploy_key" ./ deployer@your-server.com:/var/www/myapp/
- name: Set permissions & reload
run: ssh -o StrictHostKeyChecking=no -i deploy_key deployer@your-server.com "chown -R www-data:www-data /var/www/myapp && systemctl reload php8.2-fpm"
这一步只在 PR 合并进 main 时触发;rsync 的 --delete 参数会清空目标目录中不再存在的文件,防止旧配置残留引发异常。
保障生产环境稳定:备份与回滚机制
在部署命令前插入备份步骤:
- name: Backup current version
run: ssh -o StrictHostKeyChecking=no -i deploy_key deployer@your-server.com "mkdir -p /var/www/backups && tar -czf /var/www/backups/$(date +'%Y%m%d-%H%M%S').tar.gz -C /var/www myapp"
回滚只需一行命令:ssh deployer@your-server.com "rm -rf /var/www/myapp && tar -xzf /var/www/backups/20260805-142201.tar.gz -C /var/www",把时间戳换成最近一次备份名即可。
备份路径 /var/www/backups 需提前在服务器上创建并赋权,否则 rsync 同步会因权限不足失败。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











