Docker Compose 部署 Apollo
Apollo 是携程开源的分布式配置管理中心,支持多环境、多集群的配置管理,具备配置实时推送、版本管理、权限控制等功能。通过 Docker Compose 部署 Apollo 可以简化安装过程,提高部署效率。以下是详细的部署指南:
一、环境准备
1. 前置依赖
- Docker:建议使用 19.03 或更高版本
- Docker Compose:建议使用 1.25 或更高版本
- MySQL:5.6.5+版本(用于数据存储)
2. 硬件要求
- 内存:至少 4GB(推荐 8GB)
- CPU:至少 2 核
- 磁盘空间:至少 5GB
二、快速部署(开发环境)
1. 一键启动方式
bash
git clone https://github.com/ctripcorp/apollo.git
cd apollo/scripts/docker-quick-start
docker-compose up -d # 自动启动MySQL + Eureka + Apollo
此方式会自动启动所有必要组件,适合开发测试环境
2. 访问控制台
- **Portal 管理端**:http://localhost:8070
- **默认账号**:apollo/admin
- **Eureka 注册中心**:http://localhost:8080
三、生产环境部署
1. 数据库初始化
创建两个数据库并执行初始化脚本:
sql
CREATE DATABASE ApolloConfigDB DEFAULT CHARSET utf8mb4;
CREATE DATABASE ApolloPortalDB DEFAULT CHARSET utf8mb4;
然后分别执行对应的 SQL 脚本
2. Docker Compose 配置
创建docker-compose.yml
文件,内容如下:
yaml
version: "3.1"
services:
# Apollo数据库
apollo-db:
image: mysql:5.7
container_name: apollo_db
restart: always
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: "devops666"
ports:
- "13306:3306"
volumes:
- ./initsql:/docker-entrypoint-initdb.d # 初始化脚本目录
- ./data:/var/lib/mysql # 数据持久化
networks:
- apollo-network
# Apollo配置服务
apollo-configservice:
image: apolloconfig/apollo-configservice:2.1.0
container_name: apollo_configservice
restart: always
depends_on:
- apollo-db
environment:
SPRING_DATASOURCE_URL: "jdbc:mysql://apollo-db:3306/ApolloConfigDB?characterEncoding=utf8"
SPRING_DATASOURCE_USERNAME: "root"
SPRING_DATASOURCE_PASSWORD: "devops666"
JAVA_OPTS: "-Deureka.instance.homePageUrl=http://apollo-configservice:8080"
volumes:
- ./logs:/opt/logs # 日志持久化
ports:
- "8080:8080"
networks:
- apollo-network
# Apollo管理服务
apollo-adminservice:
image: apolloconfig/apollo-adminservice:2.1.0
container_name: apollo_adminservice
restart: always
environment:
SPRING_DATASOURCE_URL: "jdbc:mysql://apollo-db:3306/ApolloConfigDB?characterEncoding=utf8"
SPRING_DATASOURCE_USERNAME: "root"
SPRING_DATASOURCE_PASSWORD: "devops666"
JAVA_OPTS: "-Deureka.instance.homePageUrl=http://apollo-adminservice:8090 -Deureka.service.url=http://apollo-configservice:8080/eureka/"
depends_on:
- apollo-db
ports:
- "8090:8090"
volumes:
- ./logs:/opt/logs
networks:
- apollo-network
# Apollo门户
apollo-portal:
image: apolloconfig/apollo-portal:2.1.0
container_name: apollo_portal
restart: always
environment:
SPRING_DATASOURCE_URL: "jdbc:mysql://apollo-db:3306/ApolloPortalDB?characterEncoding=utf8"
SPRING_DATASOURCE_USERNAME: "root"
SPRING_DATASOURCE_PASSWORD: "devops666"
APOLLO_PORTAL_ENVS: "dev" # 环境名称
DEV_META: "http://apollo-configservice:8080" # 对应环境的Config Service地址
depends_on:
- apollo-db
ports:
- "8070:8070"
volumes:
- ./logs:/opt/logs
networks:
- apollo-network
networks:
apollo-network:
driver: bridge
3. 启动服务
bash
docker-compose up -d
四、多环境配置
Apollo 支持多环境配置(如 DEV/TEST/PROD),可以通过以下方式实现:
- 在
docker-compose.yml
中修改APOLLO_PORTAL_ENVS
环境变量,指定环境名称 - 为每个环境配置对应的 Meta Server 地址(如
DEV_META
,TEST_META
等) - 在 ApolloPortalDB.ServerConfig 表中修改
apollo.portal.envs
配置
示例配置:
yaml
environment:
APOLLO_PORTAL_ENVS: "dev,test,prod"
DEV_META: "http://dev-config:8080"
TEST_META: "http://test-config:8080"
PROD_META: "http://prod-config:8080"
五、安全配置
1. 修改默认密码
- Portal 默认账号:apollo/admin,登录后应立即修改
- MySQL root 密码应在部署时修改
2. 权限管理
通过 Portal 的"管理员工具"→"用户管理"创建角色,按项目分配权限(如开发只读、运维可发布)
六、常见问题解决
配置未实时生效
- 检查客户端长轮询是否开启(默认开启)
- 确认客户端与 Config Service 网络连通性
数据库连接池耗尽
- 优化 MySQL 连接数:
SET GLOBAL max_connections = 1000;
- 调整 Apollo 数据源配置:
spring.datasource.hikari.maximum-pool-size=20
- 优化 MySQL 连接数:
服务启动失败
- 检查数据库连接配置是否正确
- 查看容器日志:
docker logs <container_name>
七、最佳实践
配置加密
- 使用
@ApolloJsonValue
注解加密敏感数据 - 通过密钥管理界面加密敏感配置
- 使用
高可用部署
- 部署多节点 Config Service 和 Admin Service
- 定期备份 MySQL 数据库(ApolloConfigDB 和 ApolloPortalDB)
监控告警
- 集成 Prometheus 监控 JVM 指标
- 配置邮件/钉钉通知:
apollo.portal.notification.enabled = true apollo.portal.notification.template = 配置【{key}】已变更,操作人:{operator}