Skip to content

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),可以通过以下方式实现:

  1. docker-compose.yml中修改APOLLO_PORTAL_ENVS环境变量,指定环境名称
  2. 为每个环境配置对应的 Meta Server 地址(如DEV_META, TEST_META等)
  3. 在 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 的"管理员工具"→"用户管理"创建角色,按项目分配权限(如开发只读、运维可发布)

六、常见问题解决

  1. 配置未实时生效

    • 检查客户端长轮询是否开启(默认开启)
    • 确认客户端与 Config Service 网络连通性
  2. 数据库连接池耗尽

    • 优化 MySQL 连接数:SET GLOBAL max_connections = 1000;
    • 调整 Apollo 数据源配置:spring.datasource.hikari.maximum-pool-size=20
  3. 服务启动失败

    • 检查数据库连接配置是否正确
    • 查看容器日志:docker logs <container_name>

七、最佳实践

  1. 配置加密

    • 使用@ApolloJsonValue注解加密敏感数据
    • 通过密钥管理界面加密敏感配置
  2. 高可用部署

    • 部署多节点 Config Service 和 Admin Service
    • 定期备份 MySQL 数据库(ApolloConfigDB 和 ApolloPortalDB)
  3. 监控告警

    • 集成 Prometheus 监控 JVM 指标
    • 配置邮件/钉钉通知:
      apollo.portal.notification.enabled = true
      apollo.portal.notification.template = 配置【{key}】已变更,操作人:{operator}