Apollo配置中心搭建全指南:从0到1实现动态配置管理

一、Apollo 平台简介
1. 平台定位
Apollo 是一款开源的分布式配置管理平台,由携程框架团队开发并开源,用于集中管理应用的配置文件,实现配置的统一管理和动态更新,无需重启应用即可让配置生效,解决了传统配置管理中配置分散、更新繁琐、版本混乱等痛点。
2. 核心功能
-
统一配置管理:集中管理所有应用的配置,避免配置分散在各个应用中,便于统一维护
-
动态配置更新:配置修改后实时推送到应用,无需重启应用即可生效
-
版本控制:记录配置的历史版本,支持配置回滚,便于排查问题
-
权限管理:细粒度的权限控制,不同角色拥有不同的配置操作权限,保障配置安全
-
监控告警:配置变更的监控和告警,及时通知相关人员
-
多环境支持:支持开发、测试、生产等多环境的配置管理
二、环境准备
1. 硬件要求
-
最低配置:2 核 4G 内存,100G 硬盘(适合小型团队,10 个以下应用使用)
-
推荐配置:4 核 8G 内存,500G 硬盘(适合中型团队,50 个以下应用使用)
-
集群配置:每个节点至少 2 核 4G 内存,建议 3 个节点以上,实现高可用
2. 软件要求
-
Java:1.8 及以上版本(Apollo 基于 Java 开发,推荐使用 Java 11)
-
MySQL:5.6 及以上版本,字符集需设置为 utf8mb4
-
Maven:3.5 及以上版本(源码部署时需要)
-
Docker:20.0 及以上版本(Docker 部署时需要)
3. 操作系统
-
Linux:Ubuntu 20.04+/CentOS 7+/Debian 10+
-
Windows:Windows 10 2004+/Windows 11(仅适合开发环境)
-
macOS:macOS 11.0+(仅适合开发环境)
三、数据库搭建
1. 创建数据库
Apollo 服务端需要两个数据库:
-
ApolloPortalDB:用于存储 Portal 的配置数据,如用户、权限、项目信息等
-
ApolloConfigDB:用于存储配置数据,如应用配置、环境配置等
创建数据库的 SQL 命令:
sql
CREATE DATABASE ApolloPortalDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE ApolloConfigDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
2. 导入 SQL 脚本
SQL 脚本可以从 Apollo 的 GitHub 仓库下载:https://github.com/ctripcorp/apollo/tree/master/scripts/sql
导入脚本的命令:
bash
# 导入ApolloPortalDB脚本
mysql -u root -p ApolloPortalDB < apolloportaldb.sql
# 导入ApolloConfigDB脚本
mysql -u root -p ApolloConfigDB < apolloconfigdb.sql
3. 数据库权限配置
创建 Apollo 用户并授权:
sql
CREATE USER 'apollo'@'%' IDENTIFIED BY 'apollo123';
GRANT ALL PRIVILEGES ON ApolloPortalDB.* TO 'apollo'@'%';
GRANT ALL PRIVILEGES ON ApolloConfigDB.* TO 'apollo'@'%';
FLUSH PRIVILEGES;
四、服务端部署
1. 单机部署(Docker 方式,推荐)
1.1 编写 docker-compose.yml 文件
yaml
version: '3'
services:
apollo-db:
image: mysql:5.7
container_name: apollo-db
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: ApolloConfigDB
MYSQL_USER: apollo
MYSQL_PASSWORD: apollo123
ports:
- "3306:3306"
volumes:
- ./sql:/docker-entrypoint-initdb.d
- mysql-data:/var/lib/mysql
apollo-configservice:
image: apolloconfig/apollo-configservice:2.1.0
container_name: apollo-configservice
depends_on:
- apollo-db
ports:
- "8080:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://apollo-db:3306/ApolloConfigDB?characterEncoding=utf8
SPRING_DATASOURCE_USERNAME: apollo
SPRING_DATASOURCE_PASSWORD: apollo123
apollo-adminservice:
image: apolloconfig/apollo-adminservice:2.1.0
container_name: apollo-adminservice
depends_on:
- apollo-db
- apollo-configservice
ports:
- "8090:8090"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://apollo-db:3306/ApolloConfigDB?characterEncoding=utf8
SPRING_DATASOURCE_USERNAME: apollo
SPRING_DATASOURCE_PASSWORD: apollo123
volumes:
mysql-data:
1.2 启动服务
bash
docker-compose up -d
2. 集群部署(生产环境推荐)
2.1 部署 Config Service 集群
在多个节点上部署 Config Service,修改 application.properties 文件:
properties
spring.datasource.url=jdbc:mysql://mysql-cluster:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username=apollo
spring.datasource.password=apollo123
eureka.client.serviceUrl.defaultZone=http://node1:8080/eureka/,http://node2:8080/eureka/,http://node3:8080/eureka/
启动服务:
bash
java -jar apollo-configservice-2.1.0.jar
2.2 部署 Admin Service 集群
同样在多个节点上部署 Admin Service,修改 application.properties 文件:
properties
spring.datasource.url=jdbc:mysql://mysql-cluster:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username=apollo
spring.datasource.password=apollo123
eureka.client.serviceUrl.defaultZone=http://node1:8080/eureka/,http://node2:8080/eureka/,http://node3:8080/eureka/
启动服务:
bash
java -jar apollo-adminservice-2.1.0.jar
五、Portal 部署
1. 单机部署
1.1 下载 Portal 安装包
从 Apollo 的 GitHub 仓库下载 Portal 安装包:https://github.com/ctripcorp/apollo/releases
1.2 配置 Portal
修改 apollo-env.properties 文件,配置各环境的 Meta Server 地址:
properties
dev.meta=http://localhost:8080
pro.meta=http://localhost:8080
修改 application-github.properties 文件,配置 PortalDB 连接:
properties
spring.datasource.url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username=apollo
spring.datasource.password=apollo123
1.3 启动 Portal
bash
java -jar apollo-portal-2.1.0.jar
访问地址:http://localhost:8070,默认账号:apollo,密码:admin
2. 集群部署
在多个节点上部署 Portal,使用 Nginx 进行负载均衡:
nginx
upstream apollo-portal {
server node1:8070;
server node2:8070;
server node3:8070;
}
server {
listen 80;
server_name apollo-portal.example.com;
location / {
proxy_pass http://apollo-portal;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
六、客户端接入
1. 引入依赖
Maven 依赖:
xml
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>2.1.0</version>
</dependency>
2. 配置客户端
在 application.properties 中配置:
properties
# 应用ID
app.id=your-app-id
# Apollo Meta地址
apollo.meta=http://localhost:8080
# 环境
env=dev
3. 使用配置
3.1 使用 @Value 注解
java
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class ApolloConfigDemo {
@Value("${demo.config:default value}")
private String demoConfig;
public String getDemoConfig() {
return demoConfig;
}
}
3.2 使用 ApolloConfig 对象
java
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
import org.springframework.stereotype.Component;
@Component
public class ApolloConfigDemo {
private Config config = ConfigService.getAppConfig();
public String getDemoConfig() {
return config.getProperty("demo.config", "default value");
}
}
七、常见问题与解决方案
1. 服务启动失败
-
问题:服务启动时提示数据库连接失败
-
解决方案:检查数据库连接配置是否正确,确保数据库服务正常运行,网络连接正常
2. 配置不生效
-
问题:修改配置后,客户端没有获取到最新配置
-
解决方案 :检查 <app.id> 是否正确,Apollo Meta 地址是否正确,客户端是否正常连接到服务端
3. 客户端无法连接服务端
-
问题:客户端启动时提示无法连接到 Apollo 服务端
-
解决方案:检查服务端是否正常运行,网络连接是否正常,防火墙是否开放了对应的端口
4. 配置回滚失败
-
问题:配置回滚后,客户端没有获取到历史配置
-
解决方案:检查回滚的版本是否存在,客户端是否配置了正确的环境
八、结尾互动
如果本文对你有帮助,欢迎点赞、收藏、关注!有任何问题欢迎在评论区交流,我会第一时间回复。如果需要 Apollo 的进阶使用教程或者其他配置管理工具的部署指南,也可以在评论区留言告诉我~