在 Debian 上管理多个 PHP 项目的 Composer 实践
一 环境准备与全局配置
- 安装 PHP 与常用扩展(以 Debian 稳定版为例,按需选择版本):
sudo apt update
sudo apt install php php-cli php-fpm php-json php-common php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath
- 安装 Composer(全局可执行):
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
composer --version
- 统一全局配置(可选,建议设置镜像与超时):
composer config --global repo.packagist composer https://mirrors.aliyun.com/composer/
composer config --global process-timeout 1800
composer config --global --list
- 全局与项目级安装的区别与取舍:全局用于 CLI 工具(如 phpunit、phpcs),项目级依赖安装在各自项目的 vendor/ 目录,互不干扰,便于多版本并存与精确复现。
二 多项目目录结构与初始化
- 推荐的目录布局(示例):/var/www/
├── project1/(Laravel)
├── project2/(Symfony)
└── shared/(可选:通用库或脚本)
- 初始化与安装依赖
- 新建项目:composer create-project --prefer-dist laravel/laravel project1
- 已有项目:git clone && cd && composer install
- 版本控制与一致性
- 提交 composer.json 与 composer.lock 到 Git;团队成员与部署环境执行 composer install 即可还原完全相同的依赖树。
- 生产环境安装:composer install --no-dev --optimize-autoloader
- 常用维护:composer update(或指定包)、composer remove、composer show、composer show --tree、composer clear-cache、composer dump-autoload。
三 全局工具与多项目共享
- 全局安装 CLI 工具(仅限工具类包):
composer global require phpunit/phpunit
- 将全局可执行目录加入 PATH(确保能直接调用全局命令):
echo ‘export PATH=“$HOME/.composer/vendor/bin:$PATH”’ >> ~/.bashrc
source ~/.bashrc
- 查看与修改全局路径(便于统一管理与迁移):
composer global config bin-dir --absolute
composer global config bin-dir “/usr/local/bin” # 示例:改为系统 bin 目录
- 何时用全局、何时用项目级
- 全局:团队共享的 CLI 工具、版本相对统一、无需为每个项目单独控制版本。
- 项目级:框架、库、业务依赖,需版本隔离与可复现构建。
四 多项目 Web 服务配置要点
- 以 Nginx + PHP-FPM 为例,为每个项目提供独立站点配置与进程隔离:
- 站点根目录指向框架的 public 目录(如:root /var/www/project1/public;)
- 典型 location 配置:try_files $uri $uri/ /index.php?$query_string;
- PHP 处理:fastcgi_pass 指向对应版本的 PHP-FPM(如 unix:/var/run/php/php7.4-fpm.sock;),并设置 SCRIPT_FILENAME 等参数
- 启用站点:ln -s /etc/nginx/sites-available/project1.conf /etc/nginx/sites-enabled && sudo systemctl restart nginx
- 文件权限与运行用户(以 www-data 为例):
sudo chown -R www-data:www-data /var/www/project1
sudo chmod -R 755 /var/www/project1
sudo chmod -R 775 /var/www/project1/storage /var/www/project1/bootstrap/cache
- 提示:不同项目可使用不同 PHP 版本与 FPM 套接字,避免相互影响。
五 进阶 多项目的一致性与隔离策略
- 使用私有包源与版本约束
- 添加私有仓库:composer config repositories.private-vcs vcs https://git.example.com/project.git
- 在 require 中精确约束版本(如 ^2.3 || ~3.0),避免跨项目冲突。
- Docker 化工作流(强烈推荐用于团队协作与 CI/CD)
- 在容器内运行 Composer,确保依赖与运行环境一致;利用多阶段构建减小镜像体积。
- Dockerfile 示例要点:
FROM composer:2 AS composer-stage
WORKDIR /app
COPY composer.* ./
RUN composer install --no-dev --optimize-autoloader
FROM php:8.2-fpm
COPY --from=composer-stage /app/vendor /app/vendor
COPY . /app
- 开发期可用 docker-compose run --rm composer install/update/require,生产镜像构建阶段完成依赖安装。