PHP项目实现“代码提交即上线”需建立CI/CD流水线,方法包括:GitHub Actions全量部署、rsync+SSH轻量部署、云平台制品推送+蓝绿部署、静态化+CDN部署、PartyKit实时应用部署。

如果您在PHP项目中完成代码提交后仍需手动执行构建、测试与部署操作,则说明CI/CD流水线尚未建立。以下是实现PHP项目“代码提交即上线”的多种自动化部署方法:
一、基于GitHub Actions的全量CI/CD流水线
该方法通过单个Workflow文件统一管理构建、测试与生产部署全流程,适用于具备SSH访问权限的Linux服务器,所有步骤均在GitHub托管的Ubuntu Runner上执行。
1、在项目根目录创建.github/workflows/deploy.yml文件。
2、配置on触发器,限定仅main分支和release/**分支的push事件触发流水线。
立即学习“PHP免费学习笔记(深入)”;
3、使用shivammathur/setup-php@v2动作显式安装PHP 8.2及必需扩展:mbstring, xml, curl, pdo, pdo_mysql, opcache。
4、执行composer install --no-interaction --prefer-dist --no-suggest --no-dev,跳过开发依赖以减小部署包体积。
5、运行vendor/bin/phpunit执行单元测试,失败则中断后续步骤。
6、使用appleboy/scp-action@v0.1.0将public/、vendor/及.env.production等必要目录上传至目标服务器指定路径。
7、通过appleboy/ssh-action@v0.1.0连接服务器,执行systemctl reload php-fpm与nginx -s reload完成服务热更新。
二、基于rsync+SSH的轻量级部署方案
该方法规避Docker依赖与镜像仓库配置,直接利用rsync增量同步代码至远程Web目录,适合无容器化需求的传统LAMP环境,部署速度快且资源占用低。
1、在GitHub仓库Settings → Secrets and variables → Actions中添加两个Secret:SSH_PRIVATE_KEY(base64编码后的私钥)与DEPLOY_HOST(服务器IP或域名)。
2、在Workflow中增加webfactory/ssh-agent@v0.7.0动作加载SSH密钥。
3、使用actions/checkout@v3拉取代码,并执行composer install --no-dev生成生产依赖。
4、调用shogo82148/actions-rsync@v1插件,设置source为./,dest为目标服务器/var/www/html/路径。
5、启用options: '-avz --delete --exclude=".git" --exclude="tests/" --exclude="phpunit.xml",确保仅同步运行时所需文件并清除残留。
6、在rsync完成后,通过ssh命令远程执行chown -R www-data:www-data /var/www/html修正权限。
三、面向云平台的制品推送+蓝绿部署方案
该方法将PHP项目构建成可执行的Phar包或轻量Docker镜像,推送到云平台制品库,再由平台API触发实例替换,支持零停机切换与快速回滚。
1、在Workflow中使用docker/build-push-action@v4构建镜像,基础镜像选择php:8.2-apache,并COPY项目文件至/var/www/html。
2、设置tags为${{ github.sha }},latest,确保每次提交生成唯一镜像标识。
3、通过docker/login-action@v2登录私有Registry(如GitHub Container Registry或阿里云ACR),凭证来自Secrets。
4、使用curl调用云服务商API(例如腾讯云TKE或AWS ECS),传入新镜像地址与集群ID,触发滚动更新任务。
5、在API请求头中携带X-Auth-Token: ${{ secrets.CLOUD_API_TOKEN }}完成身份校验。
6、更新成功后,调用健康检查端点curl -f http://service-name/health验证新实例就绪状态。
四、免服务器托管的静态化+CDN部署路径
针对纯PHP API服务或已通过工具(如Sculpin、Jigsaw)预渲染为静态页面的项目,可跳过后端服务器管理,直接发布至对象存储与CDN网络,实现毫秒级全球分发。
1、在Workflow中添加actions/setup-php@v3与composer步骤,运行php build.php生成_site/静态目录。
2、使用peaceiris/actions-gh-pages@v3将_site/推送到gh-pages分支,启用GitHub Pages。
3、若使用自定义域名,需在Workflow中写入CNAME文件并提交,内容为yourdomain.com。
4、对非GitHub Pages场景,改用google-github-actions/upload-cloud-storage@v1上传至Google Cloud Storage,设置公开读取权限。
5、绑定Cloud CDN,配置缓存键包含Host与Accept-Encoding,提升压缩与命中率。
6、在上传完成后,调用gcloud cdn cache-invalidate命令清空边缘节点旧缓存。
五、基于PartyKit的实时应用专用部署流
该方法专为使用PartyKit构建的PHP后端协同服务设计,利用其CLI工具链实现会话令牌驱动的云端自动部署,无需维护独立服务器实例。
1、在本地执行npx partykit@latest token generate获取长期有效的PARTYKIT_TOKEN与PARTYKIT_LOGIN。
2、将两个值分别存入GitHub Secrets,名称严格为PARTYKIT_TOKEN与PARTYKIT_LOGIN。
3、在Workflow中使用actions/checkout@v4并设置fetch-depth: 0以支持Git标签操作。
4、运行npm ci安装PartyKit CLI依赖,避免node_modules缓存污染。
5、执行npx partykit deploy --env=production,命令自动读取Secrets中的凭证并上传代码包。
6、部署日志输出中若出现"Deployed to https://xxx.partykit.dev",表示服务已在线可访问。



















