yii2项目github actions自动化部署需确保环境隔离、配置解耦、命令幂等;web/为documentroot,runtime/和assets/可写但不提交,vendor/由composer install生成,敏感配置通过getenv()与github secrets注入。

Yii2 项目用 GitHub Actions 做自动化部署,核心不是“Yii 怎么配 CI/CD”,而是让 Yii2 项目结构和运行逻辑适配标准流水线。重点在环境隔离、配置解耦、命令幂等——只要这三点理顺,流程就跑得稳。
目录结构必须符合 Web 服务器要求
Yii2 的 web/ 目录必须设为 DocumentRoot,不能把整个项目根目录暴露给 Nginx/Apache。否则会出现 Class 'yii\web\Application' not found 或 Failed to open stream 等致命错误。
- 确保
runtime/和web/assets/可写,但不提交到 Git(加进.gitignore) -
vendor/不进版本库,靠composer install --no-dev在部署时生成 - 数据库配置、API 密钥等敏感信息,从
config/db.php等文件中剥离,改用getenv()+ GitHub Secrets 注入
GitHub Actions 流水线分三步闭环
典型部署流程是「构建 → 传输 → 重载」,YAML 中关键动作要明确:
- 用
actions/checkout@v4拉取代码 - 用
shivammathur/setup-php安装指定 PHP 版本及扩展(如pdo_mysql、mbstring) - 执行
composer install --no-dev --optimize-autoloader,启用缓存提升速度 - 通过
ssh-action或rsync将web/、runtime/、vendor/等必要目录同步到目标服务器 - 远程执行
chmod -R 755 runtime assets和sudo systemctl reload nginx(或supervisorctl reread)
测试与迁移需按环境隔离
CI 阶段要验证代码质量,CD 阶段要保障上线安全:
- CI 流程中启动临时 MySQL 容器,运行
php yii migrate --interactive=0和单元测试(phpunit或codecept) - 生产环境的数据库迁移不自动执行,建议手动触发或走灰度发布流程
- 用
phpstan或phpcs做静态检查,失败则中断流水线 - 测试报告可存为 artifact,便于回溯覆盖率与错误点
敏感信息必须靠 Secrets 管理
硬编码密码、Token、数据库地址是线上事故高发原因:
- 在 GitHub 仓库 Settings → Secrets → Actions 中添加
DB_HOST、DB_PASSWORD等变量 - 在 workflow YAML 中通过
${{ secrets.DB_HOST }}引用,在 PHP 中用getenv('DB_HOST')获取 - 避免在日志或调试输出中打印敏感值,部署脚本里禁用
var_dump($_ENV)类操作











