在内网环境中部署 Composer(PHP的依赖管理工具),通常是为了避免因外网访问限制而导致的依赖下载问题。内网部署 Composer 主要涉及配置一个 私有 Composer 仓库,或者使用 本地代理镜像 来加速和管理依赖。
1. 使用 composer.json 设置依赖
首先,确保你的 composer.json 文件包含所有项目依赖,并正确配置了包的版本和来源。1
2
3
4
5
6{
"name": "vendor/project",
"require": {
"monolog/monolog": "^2.0"
}
}
2. 使用代理镜像
由于内网无法直接访问 Composer 官方的包仓库,常见的做法是使用国内镜像或搭建代理服务器,常见的方案包括使用 阿里云 Composer 镜像 或 私有镜像仓库。
2.1 使用国内镜像源
你可以通过配置 Composer 使用国内镜像源来加速依赖包的下载。在 Composer 中,你可以使用下面的命令设置国内镜像:1
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
这个命令将 packagist.org 源更换为阿里云的镜像源。
你还可以通过在 composer.json 文件中进行设置,强制使用镜像源:
1 | { |
这样每次执行 composer install 时,都会从阿里云的镜像源下载依赖。
2.2 配置自建 Composer 镜像代理
如果你想在企业内部完全控制包管理,可以搭建自己的 Composer 镜像代理。常见的选择包括:
- Satis:一个官方提供的工具,用来搭建私有的 Composer 仓库。
- Private Packagist:一个商业解决方案,专门用于在私有环境中管理 Composer 包。
- Sinopia (npm 仓库代理工具):可以作为私有的 Composer 仓库代理使用。
2.2.1 使用 Satis 搭建私有 Composer 仓库
Satis 是 Composer 官方提供的一个轻量级工具,专门用于创建私有的 Composer 仓库。通过使用 Satis,你可以将内网环境下常用的依赖缓存下来,并提供给项目中使用。
步骤:
- 安装 Satis:
使用 Composer 安装 Satis:
1 | composer require composer/satis |
- 配置 Satis:
在你的服务器上创建一个 satis.json 配置文件,指定你希望托管的包源。
1 | { |
- 生成静态资源:
运行以下命令生成静态的 Composer 包:
1 | php bin/satis build satis.json /path/to/output |
- 提供访问:
你可以通过 Web 服务器(如 Nginx 或 Apache)提供访问静态资源。这样,其他项目就能通过你的内部 Satis 仓库获取依赖了。
2.2.2 配置 Composer 使用私有仓库
在 composer.json 中配置私有仓库(例如,你的公司内部搭建的 Satis 仓库)。
1 | { |
这样,Composer 会从你配置的私有仓库中拉取依赖。
3. 离线安装 Composer 依赖
如果内网无法访问外部网络,也可以考虑在有外网访问权限的机器上下载依赖包,然后将它们导入到内网机器中进行安装。
3.1 在有外网的机器上下载依赖
在能够访问外网的机器上执行 composer install。
下载完成后,将 vendor 目录及 composer.lock 文件拷贝到内网服务器相同位置。
3.2 使用 —prefer-dist 参数
你还可以使用 composer install —prefer-dist 来下载 .tar.gz 或 .zip 格式的包,这样可以方便地进行离线安装。
3.3 配置 COMPOSER_HOME
如果你希望在内网机器上使用本地缓存的包,可以设置 COMPOSER_HOME 环境变量来指定 Composer 缓存目录。
1 | export COMPOSER_HOME=/path/to/composer/cache |
然后,将缓存目录复制到内网机器,确保 Composer 能够使用这些缓存。
4. 其他考虑
- 代理配置:如果内网可以通过 HTTP 代理访问外网,确保 Composer 配置了代理。在 composer.json 中配置代理,或者使用环境变量来指定代理:
1 | export HTTP_PROXY=http://proxy.example.com:8080 |
- 私有包的权限:如果你使用了私有 Composer 仓库或 GitHub 仓库,记得配置好认证方式(如使用 auth.json 文件存储 GitHub Token)。
本文链接: https://erik.xyz/2025/01/12/composer-intranet-deployment/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!