docker-compose部署Apollo多环境高可用集群
docker-compose部署Apollo多环境高可用集群
- 架构
- 四大核心模块
- 三个辅助模块
这里部署包含dev、fat两个环境单集群
一、MySQL
- 机器规划
mysql为基础存储库,可复用其他现存mysql数据库。
服务器名称 | IP Address | Port | 说明 |
---|---|---|---|
MySQL数据库 | 128.0.255.96 | 3306 | 测试环境复用了mysql-archery |
- 目录规划
mysql/ #docker-compose
mysql/script/ #数据库初始化脚本
- 多环境数据库脚本
#github 获取'apolloportaldb.sql'、'apolloconfigdb.sql' 放置script文件夹下
#apolloconfigdb.sql复制一份,并分别命名为apolloconfigdbdev.sql、apolloconfigdbfat.sql;并修改里面数据库名分别为'_dev'、'_fat'
- 编写
docker-compose.yml
文件
version: '3'
services:
mysql:
image: mysql:5.7
container_name: mysql
restart: always
ports:
- '3306:3306' # 这里需要暴露端口,用mysql客户端修改apollo一些配置
environment:
MYSQL_ROOT_PASSWORD: "123456"
deploy:
resources:
limits:
cpus: '1'
memory: '512M'
networks:
- apollo
volumes:
- ./data:/var/lib/mysql
- ./script:/docker-entrypoint-initdb.d/
healthcheck:
test: ["CMD","mysqladmin","-uroot","-p123456","ping","-h","localhost"]
timeout: 2s
interval: 10s
retries: 5
start_period: 5s
networks:
apollo:
name: apollo
driver: bridge
ipam:
driver: default
config:
- subnet: 10.42.0.0/16
- 启动容器
docker-compose up -d
- 验证部署是否成功
使用mysql客户端连接
- 部署完后目录结构
二、Eureka
- 机器规划
mysql为基础存储库,可复用其他现存mysql数据库。
服务器名称 | IP Address | Port | 说明 |
---|---|---|---|
Eureka-Dev | 128.0.255.96 | 8761/18761 | 服务治理(注册和发现) |
Eureka-Fat | 128.0.255.96 | 28761/38761 | 服务治理(注册和发现) |
- 目录规划
eureka/eureka-dev #docker-cpomse
eureka/eureka-fat #docker-cpomse
- 编写
docker-compose.yml
文件
vim eureka/eureka-dev/docker-cpomse.yml
version: '3'
services:
eureka-dev-1:
container_name: eureka-dev-1
image: lhstack/eureka
ports:
- 8761:8761
deploy:
resources:
limits:
cpus: '1'
memory: '256M'
logging:
options:
max-size: "1kb"
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:
options:
max-size: "1kb"
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
vim eureka/eureka-fat/docker-cpomse.yml
version: '3'
services:
eureka-fat-1:
container_name: eureka-fat-1
image: lhstack/eureka
ports:
- 28761:8761
deploy:
resources:
limits:
cpus: '1'
memory: '256M'
logging:
options:
max-size: "1kb"
max-file: "1"
environment:
JAVA_OPTS: "-Xmx128m -Xms128m"
SECURITY_ENABLE: true
SECURITY_USERNAME: admin
SECURITY_PASSWORD: admin
EUREKA_SERVER_URLS: "http://admin:admin@eureka-fat-1:8761/eureka,http://admin:admin@eureka-fat-2:8761/eureka"
networks:
- apollo
eureka-fat-2:
container_name: eureka-fat-2
image: lhstack/eureka
ports:
- 38761:8761
deploy:
resources:
limits:
cpus: '1'
memory: '256M'
logging:
options:
max-size: "1kb"
max-file: "1"
environment:
JAVA_OPTS: "-Xmx128m -Xms128m"
SECURITY_ENABLE: true
SECURITY_USERNAME: admin
SECURITY_PASSWORD: admin
EUREKA_SERVER_URLS: "http://admin:admin@eureka-fat-1:8761/eureka,http://admin:admin@eureka-fat-2:8761/eureka"
networks:
- apollo
networks:
apollo:
name: apollo
将数据库ApolloConfigDB-dev、ApolloConfigDB-fat中ServerConfig表中的eureka.service.url值分别修改为如下内容
http://admin:admin@eureka-dev-1:8761/eureka,http://admin:admin@eureka-dev-2:8761/eureka
http://admin:admin@eureka-fat-1:8761/eureka,http://admin:admin@eureka-fat-2:8761/eureka
- 启动容器
docker-compose up -d
- 验证部署是否成功
查看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-Fat | 128.0.255.96 | 18080 | Client接口服务 |
- 目录规划
configservice
configservice/configservice-dev #docker-compose
configservice/configservice-dev/conf.d #nginx.config
configservice/configservice-fat #docker-compose
configservice/configservice-fat/conf.d #nginx.config
- 编写dev环境configservice
- docker-compose
version: '3'
services:
configservice-dev-ha:
image: nginx:alpine
container_name: configservice-dev-ha
restart: always
ports:
- '8080:8080'
logging:
options:
max-file: '1'
max-size: '16k'
deploy:
resources:
limits:
memory: '16M'
cpus: '16k'
volumes:
- ./conf.d:/etc/nginx/conf.d
networks:
- apollo
depends_on:
configservice-dev-1:
condition: service_healthy
configservice-dev-2:
condition: service_healthy
configservice-dev-1:
image: lhstack/apollo:configservice-1.9.2
container_name: configservice-dev-1
restart: always
environment:
DB_HOST: "mysql"
DB_PASSWORD: "123456"
SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.23.17: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"
cpus: '50m'
logging:
options:
max-file: '2'
max-size: '32k'
configservice-dev-2:
image: lhstack/apollo:configservice-1.9.2
container_name: configservice-dev-2
restart: always
environment:
DB_HOST: "mysql"
DB_PASSWORD: "123456"
SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.23.17: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"
cpus: '50m'
logging:
options:
max-file: '2'
max-size: '32k'
networks:
apollo:
name: apollo
- configservice.conf
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;
}
}
- 编写fat环境configservice
- docker-compose
version: '3'
services:
configservice-fat-ha:
image: nginx:alpine
container_name: configservice-fat-ha
restart: always
ports:
- '18080:8080'
logging:
options:
max-file: '1'
max-size: '16k'
deploy:
resources:
limits:
memory: '16M'
cpus: '16k'
volumes:
- ./conf.d:/etc/nginx/conf.d
networks:
- apollo
depends_on:
configservice-fat-1:
condition: service_healthy
configservice-fat-2:
condition: service_healthy
configservice-fat-1:
image: lhstack/apollo:configservice-1.9.2
container_name: configservice-fat-1
restart: always
environment:
DB_HOST: "mysql"
DB_PASSWORD: "123456"
SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.23.17:3306/ApolloConfigDB_Fat?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"
cpus: '50m'
logging:
options:
max-file: '2'
max-size: '32k'
configservice-fat-2:
image: lhstack/apollo:configservice-1.9.2
container_name: configservice-fat-2
restart: always
environment:
DB_HOST: "mysql"
DB_PASSWORD: "123456"
SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.23.17:3306/ApolloConfigDB_Fat?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"
cpus: '50m'
logging:
options:
max-file: '2'
max-size: '32k'
networks:
apollo:
name: apollo
- configservice.conf
upstream configservice{
server configservice-fat-1:8080;
server configservice-fat-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;
}
}
- 启动容器
docker-compose up -d
- 验证部署是否成功
查看configservice状态
如果configservice部署了多个实例,则"Status"列会显示多个实例
- 部署完后目录结构
四、AdminService
- 机器规划
mysql为基础存储库,可复用其他现存mysql数据库。
服务器名称 | IP Address | Port | 说明 |
---|---|---|---|
Adminservice-Dev | 128.0.255.96 | 8090 | UI界面接口服务 |
Adminservice-Fat | 128.0.255.96 | 18090 | UI界面接口服务 |
- 目录规划
adminservice
adminservice/adminservice-dev #docker-compose
adminservice/adminservice-dev/conf.d #nginx.config
adminservice/adminservice-fat #docker-compose
adminservice/adminservice-fat/conf.d #nginx.config
- 编写dev环境adminservice
- docker-compose
version: '3'
services:
adminservice-dev-ha:
image: nginx:alpine
container_name: adminservice-dev-ha
restart: always
ports:
- '8090:8090'
logging:
options:
max-file: '1'
max-size: '16k'
deploy:
resources:
limits:
memory: '16M'
cpus: '16k'
volumes:
- ./conf.d:/etc/nginx/conf.d
networks:
- apollo
depends_on:
adminservice-dev-1:
condition: service_healthy
adminservice-dev-2:
condition: service_healthy
adminservice-dev-1:
image: lhstack/apollo:adminservice-1.9.2
container_name: adminservice-dev-1
restart: always
environment:
DB_HOST: "mysql"
DB_PASSWORD: "123456"
SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.23.17: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"
cpus: '50m'
logging:
options:
max-file: '2'
max-size: '32k'
adminservice-dev-2:
image: lhstack/apollo:adminservice-1.9.2
container_name: adminservice-dev-2
restart: always
environment:
DB_HOST: "mysql"
DB_PASSWORD: "123456"
SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.23.17: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"
cpus: '50m'
logging:
options:
max-file: '2'
max-size: '32k'
networks:
apollo:
name: apollo
- adminservice.conf
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;
}
}
- 编写fat环境adminservice
- docker-compose
version: '3'
services:
adminservice-fat-ha:
image: nginx:alpine
container_name: adminservice-fat-ha
restart: always
ports:
- '18090:8090'
logging:
options:
max-file: '1'
max-size: '16k'
deploy:
resources:
limits:
memory: '16M'
cpus: '16k'
volumes:
- ./conf.d:/etc/nginx/conf.d
networks:
- apollo
depends_on:
adminservice-fat-1:
condition: service_healthy
adminservice-fat-2:
condition: service_healthy
adminservice-fat-1:
image: lhstack/apollo:adminservice-1.9.2
container_name: adminservice-fat-1
restart: always
environment:
DB_HOST: "mysql"
DB_PASSWORD: "123456"
SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.23.17:3306/ApolloConfigDB_Fat?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"
cpus: '50m'
logging:
options:
max-file: '2'
max-size: '32k'
adminservice-fat-2:
image: lhstack/apollo:adminservice-1.9.2
container_name: adminservice-fat-2
restart: always
environment:
DB_HOST: "mysql"
DB_PASSWORD: "123456"
SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.23.17:3306/ApolloConfigDB_Fat?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"
cpus: '50m'
logging:
options:
max-file: '2'
max-size: '32k'
networks:
apollo:
name: apollo
- adminservice.conf
upstream adminservice{
server adminservice-fat-1:8080;
server adminservice-fat-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;
}
}
- 启动容器
docker-compose up -d
- 验证部署是否成功
查看adminservice状态
如果adminservice部署了多个实例,则"Status"列会显示多个实例
- 部署完后目录结构
五、Portal
- 机器规划
mysql为基础存储库,可复用其他现存mysql数据库。
服务器名称 | IP Address | Port | 说明 |
---|---|---|---|
Portal | 128.0.255.96 | 8090 | UI界面服务 |
- 目录规划
portal #docker-compose
- 编写
docker-compose.yml
文件
version: '3'
services:
portal:
image: lhstack/apollo:portal-1.9.2
container_name: portal
restart: always
ports:
- '8070:8080'
environment:
DB_HOST: "mysql"
DB_PASSWORD: "123456"
#SPRING_DATASOURCE_URL: "jdbc:mysql://128.0.23.17:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false"
networks:
- apollo
deploy:
resources:
limits:
memory: "384M"
cpus: '50m'
logging:
options:
max-file: '2'
max-size: '32k'
networks:
apollo:
name: apollo
在数据库ApolloPortalDB的ServerConfig表中修改以下字段内容如下
apollo.portal.envs
添加开发和测试环境
dev,fat
apollo.portal.meta.servers
补充各环境的meta地址
- 启动容器
docker-compose up -d
- 验证部署是否成功
访问apollo网站
- 部署完后目录结构
- 使用
- 环境列表、命名空间、集群
环境:同一应用的多个环境
命名空间:后者覆盖前者,私有覆盖共有,共有可多个应用使用
集群:同一环境的不同地区或场景集群
- 系统信息
系统的部署信息
-
开放平台授权
- 第三方应用调用的是portal服务
- 一个第三方应用appid可以管理多个appid(逐个添加)
创建第三方应用,支持第三方应用操作apollo配置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话