---
order: 2
navTitle: Docker部署SuccBI集群
---
# Docker部署SuccBI集群

SuccBI同样支持在Docker下部署[集群](../cluster/README.md)，具体步骤如下：

\[\[toc]]

## 初始化Docker集群{#init-docker-cluster}

使当前Docker节点成为整个Docker集群服务的管理机，便于创建管理服务

运行如下命令：

```sh
docker swarm init
```

## 拉取镜像{#pull-image}

拉取集群需要的镜像，参考[拉取SuccBI镜像](./docker.md#拉取SuccBI镜像)

```sh
docker pull registry.cn-hangzhou.aliyuncs.com/succbi/succbi:v5

docker pull registry.cn-hangzhou.aliyuncs.com/succbi/traefik:latest
```

## 创建集群通讯网络{#create-community-network}

集群节点间通讯需要处在同一网络下，我们选择使用Docker内置的Overlay网络来实现，Overlay用于连接不同机器上的Docker容器，允许容器间相互通信

创建Overlay网络并指定内部网段为`10.10.10.0`

```sh
docker network create --driver=overlay traefik-net --subnet=10.10.10.0/24
```

## 部署反向代理和负载均衡{#reverse-proxy}

集群需要配置[反向代理和负载均衡](../cluster/reverse-proxy.md)，我们选择Traefik来实现，与Nginx相比，Traefik更适用于微服务化的场景，了解更多请访问[官方手册](https://doc.traefik.io/traefik/)

### 创建Traefik配置文件{#traifik-profile}

创建Traefik配置文件，路径为`/docker/others/traefik/traefik.yml`，内容如下：

```sh
api:
  insecure: true
  dashboard: true
providers:
  docker:
    watch: true
    swarmMode: true
```

### 创建Traefik服务{#traifik-service}

运行如下代码创建Traefik服务

```sh
docker service create --name traefik \
--constraint 'node.role == manager' \
--network traefik-net -p 8020:8080 -p 9988:80 \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=bind,src=/docker/others/traefik/traefik.yml,dst=/etc/traefik/traefik.yml \
--mode=global registry.cn-hangzhou.aliyuncs.com/succbi/traefik:latest \
--docker --docker.swarmMode --docker.watch --web --loglevel=DEBUG
```

:::tip 提示
-p 9988:80：**9988**即为集群访问地址端口
::::

## 部署SuccBI服务{#deploy-succbi}

创建SuccBI服务，并通过生成运行SuccBI服务副本的方式创建集群节点

### 创建挂载目录{#mount-directory}

参考[创建挂载目录](./docker.md#创建挂载目录)，在宿主机创建如下内容：

- /docker/cluster4/clusters-share/
- /docker/cluster4/conf/
- /docker/cluster4/dockerenv.sh

::: tip 提示

需要在`dockerenv.sh`配置`export JAVA_OPTS="$JAVA_OPTS -Dsucc.clusterBindAddressPrefix=10.10.10"`指定集群绑定地址前缀，与[集群通讯网络](#创建集群通讯网络)一致
::::

### 创建SuccBI服务{#create-succbi-service}

运行如下代码创建SuccBI服务

```sh
docker service create --name cluster4 \
--mount type=bind,src=/docker/cluster4/clusters-share,dst=/opt/workdir/clusters-share \
--mount type=bind,src=/docker/cluster4/conf,dst=/opt/workdir/conf \
--mount type=bind,src=/docker/cluster4/dockerenv.sh,dst=/opt/docker/dockerenv.sh \
--replicas 0 --network traefik-net -p 10001:8080 registry.cn-hangzhou.aliyuncs.com/succbi/succbi:v5
```

参数注释：

- **--name**：服务名称为**cluster4**
- **--mount**：将宿主机文件挂载到容器中，参考[创建挂载目录](./docker.md#挂载工作目录)
- **-replicas**：运行该服务的副本数，即集群节点数量，先设置为0，服务配置完成后再生成副本
- **--network**：网络设置，此处使用前面创建的[Overlay网络](#创建集群通讯网络)
- **-p**：将运行该服务的容器的**8080**端口映射到宿主机**10001**端口
- **succbi/succbi**：容器运行所使用的[镜像](#拉取SuccBI镜像)

### 对SuccBI服务配置Traefik{#configuration-traifik}

给已创建的SuccBI服务启用Treafik服务，并配置路径前缀、负载均衡、cookie会话保持

```sh
docker service update \
--label-add 'traefik.enable=true' \
--label-add 'traefik.docker.network=traefik-net' \
--label-add 'traefik.http.routers.my-container.rule=PathPrefix(`/`)' \
--label-add 'traefik.http.services.cluster4.loadBalancer.server.port=8080' \
--label-add 'traefik.http.services.cluster4.loadBalancer.sticky.cookie=true' \
--label-add 'traefik.http.services.cluster4.loadbalancer.server.scheme=http' \
--label-add 'traefik.http.services.cluster4.loadbalancer.healthcheck.interval=2s' \
--label-add 'traefik.http.services.cluster4.loadbalancer.healthcheck.timeout=3' \
--label-add 'traefik.http.services.cluster4.loadbalancer.healthcheck.path=/api/sys/server-info' \
cluster4
```

### 创建集群节点{#create-clusternode}

运行如下命令修改`cluster4`的服务副本为2，即该集群节点数为2

```sh
docker service update --replicas 2 cluster4
```

运行后在服务列表可以看到cluster4的`REPLICAS`为2

```sh
docker service ls
```

![服务列表](./images/2024-07-25-13-37-55.png)

## 配置完成{#configuration-complete}

完成以上步骤后，在正在运行的容器列表中可以看到运行`cluster4`服务的2个容器及运行`Traefik`的1个容器

```sh
docker ps
```

![容器列表](./images/2024-07-25-13-36-55.png)

至此，Docker下SuccBI集群部署已完成，访问http://宿主机ip:9988 即可进入SuccBI，访问http://宿主机ip:9988/syssettings/cluster进入[集群监控界面](../../sys-settings/performance/cluster.md)，查看该集群运行状态。

## 常见问题{#problem}

### 已创建的SuccBI服务如何升级镜像{#howto-update-image}

运行如下命令后，`cluster4`服务会以最新的SuccBI镜像重新启动

```sh
docker service update --image registry.cn-hangzhou.aliyuncs.com/succbi/succbi:v5 cluster4
```
