Composer负责依赖管理,Deployer执行部署任务。通过在deploy.php中定义composer install等任务,可实现代码拉取后自动安装依赖,结合共享目录、缓存优化与回滚机制,构建高效、安全的自动化部署流程。

在现代PHP项目开发中,自动化部署是提升效率、减少人为错误的关键环节。通过结合Composer和Deployer.php,可以构建一个稳定、高效的部署流程。Composer负责依赖管理,而Deployer则专注于部署逻辑的执行。两者协同工作,能实现从代码拉取到服务上线的一体化操作。
理解Composer与Deployer的角色分工
Composer是PHP的事实标准依赖管理工具,它通过composer.json和composer.lock文件定义项目所需第三方库,并在本地或远程环境中安装一致的依赖包。部署过程中,确保目标服务器拥有正确的依赖至关重要。
Deployer是一个基于PHP的任务运行器和部署工具,使用简单的PHP语法编写部署脚本。它支持SSH连接、多环境配置(如 staging、production)、任务编排以及原子性部署等特性。其核心优势在于可编程性强,易于与现有工具链集成。
关键点:- Composer不负责部署,只管理依赖
- Deployer不管理包,但可在部署流程中调用Composer命令
- 两者的结合让“代码+依赖”同步更新成为可能
配置Deployer以集成Composer流程
要在部署流程中自动执行Composer命令,需在Deployer的配置文件deploy.php中定义相关任务。通常这些任务会在代码拉取后、应用启动前执行。
立即学习“PHP免费学习笔记(深入)”;
示例:在deploy.php中添加composer install任务
task('deploy:composer', function () {
cd('{{release_path}}');
run('{{bin/php}} {{release_path}}/composer.phar install --no-dev --optimize-autoloader');
});
after('deploy:shared', 'deploy:composer');
上述代码表示在共享文件链接完成后,进入当前发布目录并执行Composer安装。使用--no-dev避免安装开发依赖,--optimize-autoloader提升生产环境性能。
- 将composer.phar随项目提交或在服务器预装,避免每次下载
- 根据环境决定是否启用dev依赖,例如staging环境可保留--dev
- 考虑缓存vendor目录或使用CI预打包来加快部署速度
实现完整的协同部署工作流
一个典型的协同部署流程包括代码获取、依赖安装、配置生成、服务重启等多个阶段。Deployer允许你将这些步骤组织成有序任务链。
标准流程示例:- 克隆最新代码到临时发布目录
- 创建符号链接共享资源(如storage、.env)
- 在目标目录执行composer install
- 运行数据库迁移(可选)
- 切换webroot指向新版本
- 清理旧版本
你可以通过自定义任务扩展该流程,比如加入前端构建、缓存清除或健康检查。
扩展任务示例:清除Laravel缓存
task('deploy:clear_cache', function () {
cd('{{current_path}}');
run('{{bin/php}} artisan config:clear');
run('{{bin/php}} artisan route:clear');
});
after('deploy:composer', 'deploy:clear_cache');
优化与安全实践
虽然基础流程已能正常工作,但在生产环境中还需关注性能和安全性。
推荐优化措施:- 使用dep deploy production而非手动SSH操作,保证流程一致性
- 启用Deployer的多主机支持,实现集群同步部署
- 结合.gitignore和shared_files设置,防止敏感文件被覆盖
- 利用Deployer的rollback功能快速回退故障版本
- 在CI/CD中调用dep命令,实现完全自动化触发
确保服务器PHP版本与本地一致,避免因Composer平台检测导致意外行为。同时限制部署用户权限,仅授予必要目录的操作权。
基本上就这些。Composer保障了依赖的准确性,Deployer提供了灵活可靠的部署机制。两者配合得当,能让PHP应用的上线变得简单可控。











