- 架构

- 四大核心模块

- 三个辅助模块

这里部署包含dev、prod两个环境单集群
一、MySQL
- 机器规划
mysql为基础存储库,可复用其他现存mysql数据库。
服务器名称 |
IP Address |
Port |
说明 |
MySQL数据库 |
128.0.255.96 |
3306 |
测试环境复用了mysql-archery |
- 目录规划
1 2
| mysql/ #docker-compose mysql/script/ #数据库初始化脚本
|
- 多环境数据库脚本
1 2
| #github 获取'apolloportaldb.sql'、'apolloconfigdb.sql' 放置script文件夹下 #apolloconfigdb.sql复制一份,并分别命名为apolloconfigdbdev.sql、apolloconfigdbprod.sql;并修改里面数据库名分别为'_dev'、'_prod'
|
- 编写
docker-compose.yml
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| version: '3.5' services: mysql: image: mysql:5.7.42 container_name: mysql restart: always ports: - '3306:3306' environment: MYSQL_ROOT_PASSWORD: "Apollo" deploy: resources: limits: cpus: '1' memory: '512M' networks: - apollo volumes: - ./data:/var/lib/mysql - ./script:/docker-entrypoint-initdb.d/ healthcheck: test: ["CMD","mysqladmin","-uroot","-pApollo123","ping","-h","localhost"] timeout: 2s interval: 10s retries: 5 start_period: 5s networks: apollo: name: apollo driver: bridge ipam: driver: default config: - subnet: 10.88.30.0/24
|
- 启动容器
- 验证部署是否成功
使用mysql客户端连接

- 部署完后目录结构

二、Eureka
- 机器规划
mysql为基础存储库,可复用其他现存mysql数据库。
服务器名称 |
IP Address |
Port |
说明 |
Eureka-Dev |
128.0.255.96 |
8761/18761 |
服务治理(注册和发现) |
Eureka-prod |
128.0.255.96 |
28761/38761 |
服务治理(注册和发现) |
- 目录规划
1 2
| eureka/eureka-dev #docker-cpomse eureka/eureka-prod #docker-cpomse
|
- 编写
docker-compose.yml
文件
1
| vim eureka/eureka-dev/docker-cpomse.yml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| version: '3.5' services: eureka-dev-1: container_name: eureka-dev-1 image: lhstack/eureka ports: - 8761:8761 deploy: resources: limits: cpus: '1' memory: '256M' logging: driver: json-file options: max-size: "1k" max-file: "1" environment: JAVA_OPTS: "-Xmx128m -Xms128m" SECURITY_ENABLE: "true" SECURITY_USERNAME: admin SECURITY_PASSWORD: admin EUREKA_SERVER_URLS: "http://admin:admin@eureka-dev-1:8761/eureka,http://admin:admin@eureka-dev-2:8761/eureka" networks: - apollo eureka-dev-2: container_name: eureka-dev-2 image: lhstack/eureka ports: - 18761:8761 deploy: resources: limits: cpus: '1' memory: '256M' logging: driver: json-file options: max-size: "1k" max-file: "1" environment: JAVA_OPTS: "-Xmx128m -Xms128m" SECURITY_ENABLE: "true" SECURITY_USERNAME: admin SECURITY_PASSWORD: admin EUREKA_SERVER_URLS: "http://admin:admin@eureka-dev-1:8761/eureka,http://admin:admin@eureka-dev-2:8761/eureka" networks: - apollo networks: apollo: name: apollo
|
1
| vim eureka/eureka-prod/docker-cpomse.yml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| version: '3.5' services: eureka-prod-1: container_name: eureka-prod-1 image: lhstack/eureka ports: - 28761:8761 deploy: resources: limits: cpus: '1' memory: '256M' logging: driver: json-file options: max-size: "1k" max-file: "1" environment: JAVA_OPTS: "-Xmx128m -Xms128m" SECURITY_ENABLE: "true" SECURITY_USERNAME: admin SECURITY_PASSWORD: admin EUREKA_SERVER_URLS: "http://admin:admin@eureka-prod-1:8761/eureka,http://admin:admin@eureka-prod-2:8761/eureka" networks: - apollo eureka-prod-2: container_name: eureka-prod-2 image: lhstack/eureka ports: - 38761:8761 deploy: resources: limits: cpus: '1' memory: '256M' logging: driver: json-file options: max-size: "1k" max-file: "1" environment: JAVA_OPTS: "-Xmx128m -Xms128m" SECURITY_ENABLE: "true" SECURITY_USERNAME: admin SECURITY_PASSWORD: admin EUREKA_SERVER_URLS: "http://admin:admin@eureka-prod-1:8761/eureka,http://admin:admin@eureka-prod-2:8761/eureka" networks: - apollo networks: apollo: name: apollo
|
将数据库ApolloConfigDB-dev、ApolloConfigDB-prod中ServerConfig表中的eureka.service.url值分别修改为如下内容
http://admin:admin@eureka-dev-1:8761/eureka,http://admin:admin@eureka-dev-2:8761/eureka
http://admin:admin@eureka-prod-1:8761/eureka,http://admin:admin@eureka-prod-2:8761/eureka
- 启动容器
- 验证部署是否成功
查看Eureka状态

如果部署了eureka多实例,”DS Replicas”将显示”eureka-dev-1”、”eureka-dev-2”
- 部署完后目录结构

三、ConfigService
- 机器规划
mysql为基础存储库,可复用其他现存mysql数据库。
服务器名称 |
IP Address |
Port |
说明 |
Configservice-Dev |
128.0.255.96 |
8080 |
Client接口服务 |
Configservice-prod |
128.0.255.96 |
18080 |
Client接口服务 |
- 目录规划
1 2 3 4 5
| configservice configservice/configservice-dev #docker-compose configservice/configservice-dev/conf.d #nginx.config configservice/configservice-prod #docker-compose configservice/configservice-prod/conf.d #nginx.config
|
- 编写dev环境configservice
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| version: '3.5' services: configservice-dev-ha: image: nginx:alpine container_name: configservice-dev-ha restart: always ports: - '8080:8080' logging: driver: json-file options: max-file: '2' max-size: '32k' deploy: resources: limits: memory: '16M' volumes: - ./conf.d:/etc/nginx/conf.d networks: - apollo depends_on: - configservice-dev-1 - configservice-dev-2 configservice-dev-1: image: apolloconfig/apollo-configservice:2.0.0 container_name: configservice-dev-1 restart: always environment: SPRING_DATASOURCE_USERNAME: "root" SPRING_DATASOURCE_PASSWORD: "Apollo" SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.255.96:3306/ApolloConfigDB_dev?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false" networks: - apollo healthcheck: test: ["CMD-SHELL","wget --no-cache --spider 'http://localhost:8080/health' || exit 1"] timeout: 2s interval: 10s retries: 5 start_period: 15s deploy: resources: limits: memory: "384M" logging: driver: json-file options: max-file: '2' max-size: '32k' configservice-dev-2: image: apolloconfig/apollo-configservice:2.0.0 container_name: configservice-dev-2 restart: always environment: SPRING_DATASOURCE_USERNAME: "root" SPRING_DATASOURCE_PASSWORD: "Apollo" SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.255.96:3306/ApolloConfigDB_dev?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false" networks: - apollo healthcheck: test: ["CMD-SHELL","wget --no-cache --spider 'http://localhost:8080/health' || exit 1"] timeout: 2s interval: 10s retries: 5 start_period: 15s deploy: resources: limits: memory: "384M" logging: driver: json-file options: max-file: '2' max-size: '32k' networks: apollo: name: apollo
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| upstream configservice{ server configservice-dev-1:8080; server configservice-dev-2:8080; } server { listen 8080; listen [::]:8080; server_name configservice.lhstack.com; root /usr/share/nginx/html; client_max_body_size 50m; location / { proxy_pass http://configservice; } }
|
- 编写prod环境configservice
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| version: '3.5' services: configservice-prod-ha: image: nginx:alpine container_name: configservice-prod-ha restart: always ports: - '18080:8080' logging: driver: json-file options: max-file: '2' max-size: '32k' deploy: resources: limits: memory: '16M' volumes: - ./conf.d:/etc/nginx/conf.d networks: - apollo depends_on: - configservice-prod-1 - configservice-prod-2 configservice-prod-1: image: apolloconfig/apollo-configservice:2.0.0 container_name: configservice-prod-1 restart: always environment: SPRING_DATASOURCE_USERNAME: "root" SPRING_DATASOURCE_PASSWORD: "Apollo" SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.255.96:3306/ApolloConfigDB_prod?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false" networks: - apollo healthcheck: test: ["CMD-SHELL","wget --no-cache --spider 'http://localhost:8080/health' || exit 1"] timeout: 2s interval: 10s retries: 5 start_period: 15s deploy: resources: limits: memory: "384M" logging: driver: json-file options: max-file: '2' max-size: '32k' configservice-prod-2: image: apolloconfig/apollo-configservice:2.0.0 container_name: configservice-prod-2 restart: always environment: SPRING_DATASOURCE_USERNAME: "root" SPRING_DATASOURCE_PASSWORD: "Apollo" SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.255.96:3306/ApolloConfigDB_prod?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false" networks: - apollo healthcheck: test: ["CMD-SHELL","wget --no-cache --spider 'http://localhost:8080/health' || exit 1"] timeout: 2s interval: 10s retries: 5 start_period: 15s deploy: resources: limits: memory: "384M" logging: driver: json-file options: max-file: '2' max-size: '32k' networks: apollo: name: apollo
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| upstream configservice{ server configservice-prod-1:8080; server configservice-prod-2:8080; } server { listen 8080; listen [::]:8080; server_name configservice.lhstack.com; root /usr/share/nginx/html; client_max_body_size 50m; location / { proxy_pass http://configservice; } }
|
- 启动容器
- 验证部署是否成功
查看configservice状态

如果configservice部署了多个实例,则”Status”列会显示多个实例
- 部署完后目录结构

四、AdminService
- 机器规划
mysql为基础存储库,可复用其他现存mysql数据库。
服务器名称 |
IP Address |
Port |
说明 |
Adminservice-Dev |
128.0.255.96 |
8090 |
UI界面接口服务 |
Adminservice-prod |
128.0.255.96 |
18090 |
UI界面接口服务 |
- 目录规划
1 2 3 4 5
| adminservice adminservice/adminservice-dev #docker-compose adminservice/adminservice-dev/conf.d #nginx.config adminservice/adminservice-prod #docker-compose adminservice/adminservice-prod/conf.d #nginx.config
|
- 编写dev环境adminservice
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| version: '3.5' services: adminservice-dev-ha: image: nginx:alpine container_name: adminservice-dev-ha restart: always ports: - '8090:8090' logging: driver: json-file deploy: resources: limits: memory: '16M' volumes: - ./conf.d:/etc/nginx/conf.d networks: - apollo depends_on: - adminservice-dev-1 - adminservice-dev-2 adminservice-dev-1: image: apolloconfig/apollo-adminservice:2.0.0 container_name: adminservice-dev-1 restart: always environment: SPRING_DATASOURCE_USERNAME: "root" SPRING_DATASOURCE_PASSWORD: "Apollo" SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.255.96:3306/ApolloConfigDB_dev?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false" networks: - apollo healthcheck: test: ["CMD-SHELL","wget --no-cache --spider 'http://localhost:8080/health' || exit 1"] timeout: 2s interval: 10s retries: 5 start_period: 15s deploy: resources: limits: memory: "384M" logging: driver: json-file options: max-size: '32k' adminservice-dev-2: image: apolloconfig/apollo-adminservice:2.0.0 container_name: adminservice-dev-2 restart: always environment: SPRING_DATASOURCE_USERNAME: "root" SPRING_DATASOURCE_PASSWORD: "Apollo" SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.255.96:3306/ApolloConfigDB_dev?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false" networks: - apollo healthcheck: test: ["CMD-SHELL","wget --no-cache --spider 'http://localhost:8080/health' || exit 1"] timeout: 2s interval: 10s retries: 5 start_period: 15s deploy: resources: limits: memory: "384M" logging: driver: json-file options: max-size: '32k' networks: apollo: name: apollo
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| upstream adminservice{ server adminservice-dev-1:8080; server adminservice-dev-2:8080; } server { listen 8090; listen [::]:8090; server_name adminservice.lhstack.com; root /usr/share/nginx/html; client_max_body_size 50m; location / { proxy_pass http://adminservice; } }
|
- 编写prod环境adminservice
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| version: '3.5' services: adminservice-prod-ha: image: nginx:alpine container_name: adminservice-prod-ha restart: always ports: - '18090:8090' logging: driver: json-file deploy: resources: limits: memory: '16M' volumes: - ./conf.d:/etc/nginx/conf.d networks: - apollo depends_on: - adminservice-prod-1 - adminservice-prod-2 adminservice-prod-1: image: apolloconfig/apollo-adminservice:2.0.0 container_name: adminservice-prod-1 restart: always environment: SPRING_DATASOURCE_USERNAME: "root" SPRING_DATASOURCE_PASSWORD: "Apollo" SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.255.96:3306/ApolloConfigDB_prod?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false" networks: - apollo healthcheck: test: ["CMD-SHELL","wget --no-cache --spider 'http://localhost:8080/health' || exit 1"] timeout: 2s interval: 10s retries: 5 start_period: 15s deploy: resources: limits: memory: "384M" logging: driver: json-file options: max-size: '32k' adminservice-prod-2: image: apolloconfig/apollo-adminservice:2.0.0 container_name: adminservice-prod-2 restart: always environment: SPRING_DATASOURCE_USERNAME: "root" SPRING_DATASOURCE_PASSWORD: "Apollo" SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.255.96:3306/ApolloConfigDB_prod?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false" networks: - apollo healthcheck: test: ["CMD-SHELL","wget --no-cache --spider 'http://localhost:8080/health' || exit 1"] timeout: 2s interval: 10s retries: 5 start_period: 15s deploy: resources: limits: memory: "384M" logging: driver: json-file options: max-size: '32k' networks: apollo: name: apollo
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| upstream adminservice{ server adminservice-prod-1:8080; server adminservice-prod-2:8080; } server { listen 8090; listen [::]:8090; server_name adminservice.lhstack.com; root /usr/share/nginx/html; client_max_body_size 50m; location / { proxy_pass http://adminservice; } }
|
- 启动容器
- 验证部署是否成功
查看adminservice状态

如果adminservice部署了多个实例,则”Status”列会显示多个实例
- 部署完后目录结构

五、Portal
- 机器规划
mysql为基础存储库,可复用其他现存mysql数据库。
服务器名称 |
IP Address |
Port |
说明 |
Portal |
128.0.255.96 |
8090 |
UI界面服务 |
- 目录规划
- 编写
docker-compose.yml
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| version: '3.5' services: portal: image: apolloconfig/apollo-portal container_name: portal restart: always ports: - '8070:8070' environment: SPRING_DATASOURCE_USERNAME: "root" SPRING_DATASOURCE_PASSWORD: "Apollo" SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.255.96:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false" networks: - apollo deploy: resources: limits: memory: "384M" logging: driver: json-file options: max-size: '32k' privileged: true networks: apollo: name: apollo
|
在数据库ApolloPortalDB的ServerConfig表中修改以下字段内容如下
apollo.portal.envs
添加开发和测试环境
dev,prod
apollo.portal.meta.servers
补充各环境的meta地址
{“dev”:”http://configservice-dev-ha:8080","prod":"http://configservice-prod-ha:8080"}
- 启动容器
- 验证部署是否成功
访问apollo网站

- 部署完后目录结构

- 使用

环境:同一应用的多个环境
命名空间:后者覆盖前者,私有覆盖共有,共有可多个应用使用
集群:同一环境的不同地区或场景集群
系统的部署信息

- 开放平台授权
- 第三方应用调用的是portal服务
- 一个第三方应用appid可以管理多个appid(逐个添加)
创建第三方应用,支持第三方应用操作apollo配置
