在linux上用apollo快速搭建hyperf需三步:部署apollo服务端(推荐docker启动configservice和adminservice)、配置hyperf客户端(安装驱动、配置apollo.php并启用监听器)、验证配置热更新(检查长轮询成功及配置实时生效)。

在 Linux 上用 Apollo 快速搭建 Hyperf,核心是三步:装好 Apollo 服务端、配通 Hyperf 客户端、验证配置实时生效。不复杂但容易忽略细节。
一、部署 Apollo 服务端(推荐 Docker)
避免手动编译,直接拉取官方镜像启动:
- 运行 Apollo Config Service 和 Admin Service(必需):
docker run -d --name apollo-configservice -p 8080:8080 -e SPRING_PROFILES_ACTIVE=github -e APOLLO_PROFILE=github -e SERVER_PORT=8080 -e APOLLO_ADMIN_SERVICE_NAME=http://localhost:8090 -e APOLLO_CONFIG_SERVICE_NAME=http://localhost:8080 -v /tmp/apollo-configservice:/opt/logs appolo/configservice:2.1.0 - 再启动 Admin Service:
docker run -d --name apollo-adminservice -p 8090:8090 -e SPRING_PROFILES_ACTIVE=github -e SERVER_PORT=8090 -e APOLLO_PROFILE=github -e APOLLO_CONFIG_SERVICE_NAME=http://localhost:8080 -v /tmp/apollo-adminservice:/opt/logs appolo/adminservice:2.1.0 - 访问 http://localhost:8070(Apollo Portal 默认地址),用默认账号 apollo/admin 登录,创建 AppId(如
hyperf-app),并在applicationnamespace 下添加 YAML 配置,例如:
database:
default:
host: 192.168.10.100
port: 3306
database: test_db
二、Hyperf 项目接入 Apollo
确保项目已基于 Hyperf 3.x(PHP 8.0+、Swoole ≥ 4.8):
- 安装驱动:
composer require hyperf/config-apollo - 发布配置文件:
php bin/hyperf.php vendor:publish hyperf/config-apollo - 编辑
config/autoload/apollo.php,关键项填准:
-
APOLLO_SERVER 填 ConfigService 地址(
http://localhost:8080),不是 Portal 地址; -
app_id 与 Apollo 控制台创建的 AppId 严格一致(如
hyperf-app); -
namespaces 至少包含
['application']; -
pullTimeout 设为
30(匹配 Apollo 服务端超时); -
strict_mode 上线前建议设为
true,避免 namespace 加载失败被静默跳过。
同时确认 config/autoload/listeners.php 中已启用两个监听器:Hyperf\ConfigApollo\Listener\FetchConfigOnBootListener 和Hyperf\ConfigApollo\Listener\OnPipeMessageListener。
三、验证配置是否热更新
别只看 config() 能读到值,要确认变更能秒级生效:
- 启动服务:
php bin/hyperf.php start - 代码中加一行日志打印同步时间:
var_dump(config()->get('apollo.last_sync_time')); - 去 Apollo 控制台修改
database.default.host,保存发布; - 观察控制台是否输出
Long polling succeeded,且last_sync_time更新; - 再调用
config('database.default.host'),确认返回新值 —— 不是缓存旧快照。
若看到 Long polling failed, will retry in 1 seconds,说明网络或网关(如 Nginx)切断了长轮询连接,需检查 proxy_read_timeout ≥ 30 秒。










