ha-cluster-docker-compose.yml 6.11 KB
Newer Older
chenzk's avatar
v1.0  
chenzk committed
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# An example of using docker-compose to start a HA model serving cluster with two controllers and one worker.
# For simplicity, we use chatgpt_proxyllm as the model for the worker, and we build a new docker image named eosphorosai/dbgpt-openai:latest.
# How to build the image:
# run `bash ./docker/base/build_proxy_image.sh` in the root directory of the project.
# If you want to use other pip index url, you can run command with `--pip-index-url` option.
# For example, `bash ./docker/base/build_proxy_image.sh --pip-index-url https://pypi.tuna.tsinghua.edu.cn/simple`
#
# How to start the cluster:
# 1. run `cd docker/compose_examples`
# 2. run `OPENAI_API_KEY="{your api key}" OPENAI_API_BASE="https://api.openai.com/v1" docker compose -f ha-cluster-docker-compose.yml up -d`
# Note: Make sure you have set the environment variables OPENAI_API_KEY.
# Optionally, if you want to use other provider(like proxy/siliconflow), you can set following environment variables:
# LLM_MODEL_PROVIDER="proxy/siliconflow" \
# LLM_MODEL_NAME="Qwen/Qwen2.5-Coder-32B-Instruct" \
# OPENAI_API_BASE="https://api.siliconflow.cn/v1" \
# OPENAI_API_KEY="${SILICONFLOW_API_KEY}" \
# EMBEDDING_MODEL_PROVIDER="proxy/openai" \
# EMBEDDING_MODEL_NAME="BAAI/bge-large-zh-v1.5" \
# EMBEDDING_MODEL_API_URL="https://api.siliconflow.cn/v1/embeddings" \
# docker compose -f ha-cluster-docker-compose.yml up -d
version: '3.10'

services:
  init:
    image: busybox
    volumes:
      - ../examples/sqls:/sqls
      - ../../assets/schema/dbgpt.sql:/dbgpt.sql
      - dbgpt-init-scripts:/docker-entrypoint-initdb.d
    command: /bin/sh -c "cp /dbgpt.sql /docker-entrypoint-initdb.d/ && cp /sqls/* /docker-entrypoint-initdb.d/ && ls /docker-entrypoint-initdb.d/"

  db:
    image: mysql/mysql-server
    environment:
      MYSQL_USER: 'user'
      MYSQL_PASSWORD: 'password'
      MYSQL_ROOT_PASSWORD: 'aa123456'
    ports:
      - 3306:3306
    volumes:
      - dbgpt-myql-db:/var/lib/mysql
      - ../examples/my.cnf:/etc/my.cnf
      - dbgpt-init-scripts:/docker-entrypoint-initdb.d
    restart: unless-stopped
    networks:
      - dbgptnet
    depends_on:
      - init
  controller-1:
    image: eosphorosai/dbgpt-openai:latest
    # command: python packages/dbgpt-core/src/dbgpt/model/cluster/controller/controller.py -c /root/configs/ha-model-cluster.toml
    command: dbgpt start controller -c /root/configs/ha-model-cluster.toml
    environment:
      - MYSQL_PASSWORD=aa123456
      - MYSQL_HOST=db
      - MYSQL_PORT=3306
      - MYSQL_DATABASE=dbgpt
      - MYSQL_USER=root
    volumes:
      - ../../:/app
      - ./conf/ha-model-cluster.toml:/root/configs/ha-model-cluster.toml
    restart: unless-stopped
    networks:
      - dbgptnet
    depends_on:
      - db
  controller-2:
    image: eosphorosai/dbgpt-openai:latest
    # command: python packages/dbgpt-core/src/dbgpt/model/cluster/controller/controller.py -c /root/configs/ha-model-cluster.toml
    command: dbgpt start controller -c /root/configs/ha-model-cluster.toml
    environment:
      - MYSQL_PASSWORD=aa123456
      - MYSQL_HOST=db
      - MYSQL_PORT=3306
      - MYSQL_DATABASE=dbgpt
      - MYSQL_USER=root
    volumes:
      - ../../:/app
      - ./conf/ha-model-cluster.toml:/root/configs/ha-model-cluster.toml
    restart: unless-stopped
    networks:
      - dbgptnet
    depends_on:
      - db
  llm-worker:
    image: eosphorosai/dbgpt-openai:latest
    # command: python packages/dbgpt-core/src/dbgpt/model/cluster/worker/manager.py -c /root/configs/ha-model-cluster.toml
    command: dbgpt start worker -c /root/configs/ha-model-cluster.toml
    environment:
      - WORKER_TYPE=llm
      - LLM_MODEL_PROVIDER=${LLM_MODEL_PROVIDER:-proxy/openai}
      - LLM_MODEL_NAME=${LLM_MODEL_NAME:-gpt-4o}
      - OPENAI_API_BASE=${OPENAI_API_BASE:-https://api.openai.com/v1}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - CONTROLLER_ADDR=http://controller-1:8000,http://controller-2:8000
    depends_on:
      - controller-1
      - controller-2
    volumes:
      - ../../:/app
      - ./conf/ha-model-cluster.toml:/root/configs/ha-model-cluster.toml
    restart: unless-stopped
    networks:
      - dbgptnet
    ipc: host
  embedding-worker:
    image: eosphorosai/dbgpt-openai:latest
    # command: python packages/dbgpt-core/src/dbgpt/model/cluster/worker/manager.py -c /root/configs/ha-model-cluster.toml
    command: dbgpt start worker -c /root/configs/ha-model-cluster.toml
    environment:
      - WORKER_TYPE=text2vec
      - EMBEDDING_MODEL_PROVIDER=${EMBEDDING_MODEL_PROVIDER:-proxy/openai}
      - EMBEDDING_MODEL_NAME=${EMBEDDING_MODEL_NAME:-text-embedding-3-small}
      - EMBEDDING_MODEL_API_URL=${EMBEDDING_MODEL_API_URL:-https://api.openai.com/v1/embeddings}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - CONTROLLER_ADDR=http://controller-1:8000,http://controller-2:8000
    depends_on:
      - controller-1
      - controller-2
    volumes:
      - ../../:/app
      - ./conf/ha-model-cluster.toml:/root/configs/ha-model-cluster.toml
    restart: unless-stopped
    networks:
      - dbgptnet
    ipc: host
  webserver:
    image: eosphorosai/dbgpt-openai:latest
    # command: python packages/dbgpt-app/src/dbgpt_app/dbgpt_server.py -c /root/configs/ha-webserver.toml
    command: dbgpt start webserver -c /root/configs/ha-webserver.toml
    environment:
      - MYSQL_PASSWORD=aa123456
      - MYSQL_HOST=db
      - MYSQL_PORT=3306
      - MYSQL_DATABASE=dbgpt
      - MYSQL_USER=root
      - EMBEDDING_MODEL_NAME=${EMBEDDING_MODEL_NAME:-text-embedding-3-small}
      - CONTROLLER_ADDR=http://controller-1:8000,http://controller-2:8000
    depends_on:
      - controller-1
      - controller-2
      - llm-worker
      - embedding-worker
    volumes:
      - ../../:/app
      - ./conf/ha-webserver.toml:/root/configs/ha-webserver.toml
      - dbgpt-data:/app/pilot/data
      - dbgpt-message:/app/pilot/message
    # env_file:
    #   - .env.template
    ports:
      - 5670:5670/tcp
    # webserver may be failed, it must wait all sqls in /docker-entrypoint-initdb.d execute finish.
    restart: unless-stopped
    networks:
      - dbgptnet
volumes:
  dbgpt-init-scripts:
  dbgpt-myql-db:
  dbgpt-data:
  dbgpt-message:
networks:
  dbgptnet:
    driver: bridge
    name: dbgptnet