From c072e70708196e5e551d28ee0df386c4d41d32df Mon Sep 17 00:00:00 2001
From: xueqingkun <xueqingkun@126.com>
Date: Wed, 11 Sep 2024 09:41:16 +0800
Subject: [PATCH] =?UTF-8?q?1:=20=E6=B7=BB=E5=8A=A0docker-compose=E6=96=87?=
 =?UTF-8?q?=E4=BB=B6=E5=8F=8A=E5=AE=89=E8=A3=85=E8=AF=B4=E6=98=8E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 docker-compose/.env                      |  46 ++++++++++
 docker-compose/README.md                 |  70 +++++++++++++++
 docker-compose/docker-compose-base.yml   |  90 +++++++++++++++++++
 docker-compose/docker-compose-nebula.yml | 107 +++++++++++++++++++++++
 docker-compose/docker-compose.yml        | 101 +++++++++++++++++++++
 5 files changed, 414 insertions(+)
 create mode 100644 docker-compose/.env
 create mode 100644 docker-compose/README.md
 create mode 100644 docker-compose/docker-compose-base.yml
 create mode 100644 docker-compose/docker-compose-nebula.yml
 create mode 100644 docker-compose/docker-compose.yml

diff --git a/docker-compose/.env b/docker-compose/.env
new file mode 100644
index 00000000..97dab57d
--- /dev/null
+++ b/docker-compose/.env
@@ -0,0 +1,46 @@
+# 程序运行时使用的目录
+TIMEZONE=Asia/Shanghai
+RUN_DATA_DIR=../data
+SPRING_PROFILES_ACTIVE=prod
+
+#NACOS 配置
+NACOS_PORT_HTTP=18498
+
+# mysql数据库配置
+MYSQL_PASSWORD=vp@sst0909@mysql
+MYSQL_PORT=13316
+
+# redis配置
+REDIS_PASSWORD=vp-sst0909-admin
+REDIS_PORT_HTTP=16399
+
+# minio 配置
+MINIO_USER=admin
+MINIO_PASSWORD=vp@sst0909@minio
+MINIO_PORT=19000
+MINIO_CONSOLE_PORT=19001
+
+# paddle-speech 配置
+PADDLE_SPEECH_PORT=18090
+
+# 智能问答配置
+VP_QA_PORT=8711
+
+#nebula 配置
+NEBULA_GRAPH_PORT=9669
+
+#nacos端口
+NACOS_NAMESPACE=prod
+
+# 后端服务暴露端口
+PATIENT_WEB_PORT=8899
+PATIENT_NACOS_SERVER_IP=virtual-patient-nacos
+MANAGE_WEB_PORT=8891
+GRAPH_WEB_PORT=8892
+
+
+# nginx 代理配置
+UPSTREAM_WEB_SERVERS=virtual-patient-web:8899
+UPSTREAM_MANAGE_SERVERS=virtual-patient-manage:8891
+UPSTREAM_GRAPH_SERVERS=virtual-patient-graph:8892
+NGINX_HTTPS_PORT=443
\ No newline at end of file
diff --git a/docker-compose/README.md b/docker-compose/README.md
new file mode 100644
index 00000000..29d91350
--- /dev/null
+++ b/docker-compose/README.md
@@ -0,0 +1,70 @@
+# 虚拟病人服务部署文档
+
+
+## 镜像列表
+| 镜像名                    | 镜像版本                  | 镜像文件                                | 描述                                 |
+|------------------------|------------------------------|-------------------------------------|------------------------------------|
+| virtual-patient-nginx  | 1.1.0                        | images/virtual-patient-nginx.tar.gz |前端nginx服务                          |
+| virtual-patient-web    | 2.0.0                        | images/virtual-patient-web.tar.gz          | 虚拟病人前台系统                           |
+| virtual-patient-manage | 2.0.0                        | images/virtual-patient-manage.tar.gz       |虚拟病人后端管理系统                         |
+| virtual-patient-graph  | 2.0.0                        | images/virtual-patient-graph.tar.gz        |虚拟病人Graph知识图谱系统                    |
+| nacos                  | v2.3.2                       | images/vp-nacos.tar.gz                     |nacos配置中心                          |
+| mysql                  | 5.7                          | images/vp-mysql.tar.gz                     |mysql数据库                           |
+| redis                  | 7.2.0-v10                    | images/vp-redis.tar.gz                     |redis数据库                           |
+| minio                  | RELEASE.2023-10-25T06-33-25Z | images/vp-minio.tar.gz                     |minio对象存储服务                        |
+| paddlespeech-dev       | 1.1.0                        | images/vp-paddlespeech.tar.gz              |语义识别服务                             |
+| nebula                 | v3.6.0                       | images/nebula.v3.6.0.tar.gz                |nebula图谱引擎                         |
+| ollama                 | 无版本要求                        | 复用现场                                |语义识别服务(使用llama3-chinese:8b模型)使用现场服务 |
+| ~~sadtalker_image~~    | v1                      | 无                                   |数字人形象生成服务                |
+
+
+## 加载镜像
+> 根据现场情况确定镜像是否存在,如果存在可以不进行加载。
+```shell
+  docker load -i xxxx (镜像包文件)
+```
+
+
+# 修改配置文件(非必要)
+> 可通过修改docker-compose目录下的.env文件进行修改配置。配置修改后请同步修改nacos中的配置文件。
+
+
+## 启动服务
+- 进入docker-compose目录下执行命令
+```shell
+docker compose up -d
+```
+
+## 修改nacos中ollama配置
+- 登录nacos控制台,点击左侧菜单栏配置列表,点击编辑配置,修改配置文件中的 ollama现场的环境。
+- 需要修改的配置文件为:vvirtual-patient-web.yml、virtual-patient-manage.yml
+
+## 重新启动服务
+- 进入docker-compose目录下执行命令
+```shell
+docker compose restart
+```
+
+
+# 其他命令
+
+## 查看运行状态
+- 进入docker-compose目录下执行命令
+```shell
+docker compose ps
+```
+
+## 停止docker-compose
+- 进入docker-compose目录下执行命令
+```shell
+docker compose stop
+```
+
+## 卸载服务(会删除容器)
+- 进入docker-compose目录下执行命令
+```shell
+docker compose down
+```
+
+# 访问服务
+- 访问https://IP:{NGINX_HTTPS_PORT}/#/login  默认管理账号密码:vp@admin#/aSb3QrcqemdOCXf  用户账号需要自行注册
\ No newline at end of file
diff --git a/docker-compose/docker-compose-base.yml b/docker-compose/docker-compose-base.yml
new file mode 100644
index 00000000..b923a8b7
--- /dev/null
+++ b/docker-compose/docker-compose-base.yml
@@ -0,0 +1,90 @@
+services:
+  mysql:
+    image: mysql:5.7
+    container_name: vp-mysql-compose
+    environment:
+      - MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD}
+      - TZ=${TIMEZONE}
+    command:
+      --max_connections=100
+      --character-set-server=utf8mb4
+      --collation-server=utf8mb4_general_ci
+      --default-authentication-plugin=mysql_native_password
+      --tls_version="TLSv1.2,TLSv1.3"
+    ports:
+      - ${MYSQL_PORT}:3306
+    volumes:
+      - ${RUN_DATA_DIR}/mysql/data:/var/lib/mysql
+      - ${RUN_DATA_DIR}/initdb/:/docker-entrypoint-initdb.d/
+    networks:
+      - virtual-patient-network
+    healthcheck:
+      test: ["CMD", "mysqladmin" ,"ping", "-uroot", "-p${MYSQL_PASSWORD}"]
+      interval: 10s
+      timeout: 10s
+      retries: 3
+      start_period: 40s
+    restart: always
+
+  minio:
+    image: quay.io/minio/minio:RELEASE.2023-10-25T06-33-25Z
+    container_name: vp-minio-compose
+    command: server --console-address ":9001" /data
+    ports:
+      - ${MINIO_PORT}:9000
+      - ${MINIO_CONSOLE_PORT}:9001
+    environment:
+      - MINIO_ROOT_USER=${MINIO_USER}
+      - MINIO_ROOT_PASSWORD=${MINIO_PASSWORD}
+      - TZ=${TIMEZONE}
+    volumes:
+      - ${RUN_DATA_DIR}/minio/data:/data
+    networks:
+      - virtual-patient-network
+    restart: always
+
+  redis:
+    image: redis/redis-stack-server:7.2.0-v10
+    container_name: vp-redis-stack-compose
+    ports:
+      - ${REDIS_PORT_HTTP}:6379
+    environment:
+      - REDIS_ARGS=--requirepass ${REDIS_PASSWORD}
+    volumes:
+      - ${RUN_DATA_DIR}/redis/conf/redis-stack.conf:/etc/redis-stack.conf
+    networks:
+      - virtual-patient-network
+    restart: always
+
+  nacos:
+    image: nacos/nacos-server:v2.3.2
+    container_name: virtual-patient-nacos
+    ports:
+      - ${NACOS_PORT_HTTP}:8848
+    environment:
+      - MODE=standalone
+    volumes:
+      - ${RUN_DATA_DIR}/nacos/data/:/home/nacos/data
+    networks:
+      - virtual-patient-network
+    restart: always
+
+  paddlespeech:
+    image: paddlespeech-dev:1.1.0
+    container_name: vp-paddlespeech-compose
+    ports:
+      - ${PADDLE_SPEECH_PORT}:8090
+    command: sh /paddlespeech.sh &
+    networks:
+      - virtual-patient-network
+    restart: always
+  virtual-patient-qa:
+    image: virtual-patient-qa:1.0.0
+    container_name: vp-qa-compose
+    ports:
+      - ${VP_QA_PORT}:8000
+    volumes:
+      - ${RUN_DATA_DIR}/virtual_patient_qa/:/data/vp/virtual_patient_qa/
+    networks:
+      - virtual-patient-network
+    restart: always
\ No newline at end of file
diff --git a/docker-compose/docker-compose-nebula.yml b/docker-compose/docker-compose-nebula.yml
new file mode 100644
index 00000000..89587014
--- /dev/null
+++ b/docker-compose/docker-compose-nebula.yml
@@ -0,0 +1,107 @@
+version: '3.4'
+services:
+  metad0:
+    image: vesoft/nebula-metad:v3.6.0
+    container_name: vp-nebula-metad-compose
+    environment:
+      USER: root
+    command:
+      - --meta_server_addrs=metad0:9559
+      - --local_ip=metad0
+      - --ws_ip=metad0
+      - --port=9559
+      - --ws_http_port=19559
+      - --data_path=/data/meta
+      - --log_dir=/logs
+      - --v=0
+      - --minloglevel=0
+    healthcheck:
+      test: ["CMD", "curl", "-sf", "http://metad0:19559/status"]
+      interval: 30s
+      timeout: 10s
+      retries: 3
+      start_period: 20s
+    ports:
+      - 9559:9559
+      - 19559:19559
+      - 19560
+    volumes:
+      - ${RUN_DATA_DIR}/nebula/meta0:/data/meta
+      - ${RUN_DATA_DIR}/nebula/log//meta0:/logs
+    networks:
+      - virtual-patient-network
+    restart: on-failure
+    cap_add:
+      - SYS_PTRACE
+
+  storaged0:
+    image: vesoft/nebula-storaged:v3.6.0
+    container_name: vp-nebula-storaged-compose
+    environment:
+      USER: root
+      TZ:   "${TIMEZONE}"
+    command:
+      - --meta_server_addrs=metad0:9559
+      - --local_ip=storaged0
+      - --ws_ip=storaged0
+      - --port=9779
+      - --ws_http_port=19779
+      - --data_path=/data/storage
+      - --log_dir=/logs
+      - --v=0
+      - --minloglevel=0
+    depends_on:
+      - metad0
+    healthcheck:
+      test: ["CMD", "curl", "-sf", "http://storaged0:19779/status"]
+      interval: 30s
+      timeout: 10s
+      retries: 3
+      start_period: 20s
+    ports:
+      - 9779:9779
+      - 19779:19779
+      - 19780
+    volumes:
+      - ${RUN_DATA_DIR}/nebula/data/storage0:/data/storage
+      - ${RUN_DATA_DIR}/nebula/log/storage0:/logs
+    networks:
+      - virtual-patient-network
+    restart: on-failure
+    cap_add:
+      - SYS_PTRACE
+
+  graphd:
+    image: vesoft/nebula-graphd:v3.6.0
+    container_name: vp-nebula-graphd-compose
+    environment:
+      USER: root
+      TZ:   "${TIMEZONE}"
+    command:
+      - --meta_server_addrs=metad0:9559
+      - --port=9669
+      - --local_ip=graphd
+      - --ws_ip=graphd
+      - --ws_http_port=19669
+      - --log_dir=/logs
+      - --v=0
+      - --minloglevel=0
+    depends_on:
+      - storaged0
+    healthcheck:
+      test: ["CMD", "curl", "-sf", "http://graphd:19669/status"]
+      interval: 30s
+      timeout: 10s
+      retries: 3
+      start_period: 20s
+    ports:
+      - 9669:9669
+      - 19669:19669
+      - 19670
+    volumes:
+      - ${RUN_DATA_DIR}/nebula/log/graph:/logs
+    networks:
+      - virtual-patient-network
+    restart: on-failure
+    cap_add:
+      - SYS_PTRACE
\ No newline at end of file
diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml
new file mode 100644
index 00000000..6e2b130c
--- /dev/null
+++ b/docker-compose/docker-compose.yml
@@ -0,0 +1,101 @@
+include:
+  - path: ./docker-compose-base.yml
+  - path: ./docker-compose-nebula.yml
+    env_file: ./.env
+
+services:
+  virtual-patient-web:
+    depends_on:
+      mysql:
+        condition: service_started
+      nacos:
+        condition: service_started
+    image: virtual-patient-web:2.0.0
+    container_name: virtual-patient-web-compose
+    ports:
+      - ${PATIENT_WEB_PORT}:8899
+    volumes:
+      - ${RUN_DATA_DIR}/virtual-patient-web/:/data/vp/
+    command:
+      --spring.profiles.active=${SPRING_PROFILES_ACTIVE}
+      --spring.cloud.nacos.config.server-addr=virtual-patient-nacos:8848
+      --spring.cloud.nacos.config.namespace=${NACOS_NAMESPACE}
+      --spring.cloud.nacos.discovery.server-addr=virtual-patient-nacos:8848
+      --spring.cloud.nacos.discovery.namespace=${NACOS_NAMESPACE}
+    environment:
+      - TZ=${TIMEZONE}
+    networks:
+      - virtual-patient-network
+    restart: always
+  virtual-patient-manage:
+    depends_on:
+      mysql:
+        condition: service_started
+      nacos:
+        condition: service_started
+    image: virtual-patient-manage:2.0.0
+    container_name: virtual-patient-manage-compose
+    ports:
+      - ${MANAGE_WEB_PORT}:8891
+    volumes:
+      - ${RUN_DATA_DIR}/virtual-patient-manage/:/data/vp/
+    command:
+      --spring.profiles.active=${SPRING_PROFILES_ACTIVE}
+      --spring.cloud.nacos.config.server-addr=virtual-patient-nacos:8848
+      --spring.cloud.nacos.config.namespace=${NACOS_NAMESPACE}
+      --spring.cloud.nacos.discovery.server-addr=virtual-patient-nacos:8848
+      --spring.cloud.nacos.discovery.namespace=${NACOS_NAMESPACE}
+    environment:
+      - TZ=${TIMEZONE}
+    networks:
+      - virtual-patient-network
+    restart: always
+  virtual-patient-graph:
+    depends_on:
+      mysql:
+        condition: service_started
+      nacos:
+        condition: service_started
+    image: virtual-patient-graph:2.0.0
+    container_name: virtual-patient-graph-compose
+    ports:
+      - ${GRAPH_WEB_PORT}:8892
+    volumes:
+      - ${RUN_DATA_DIR}/virtual-patient-graph/:/data/vp/
+    command:
+      --spring.profiles.active=${SPRING_PROFILES_ACTIVE}
+      --spring.cloud.nacos.config.server-addr=virtual-patient-nacos:8848
+      --spring.cloud.nacos.config.namespace=${NACOS_NAMESPACE}
+      --spring.cloud.nacos.discovery.server-addr=virtual-patient-nacos:8848
+      --spring.cloud.nacos.discovery.namespace=${NACOS_NAMESPACE}
+    environment:
+      - TZ=${TIMEZONE}
+    networks:
+      - virtual-patient-network
+    restart: always
+  virtual-patient-nginx:
+    depends_on:
+      virtual-patient-web:
+        condition: service_started
+      virtual-patient-manage:
+        condition: service_started
+      virtual-patient-graph:
+        condition: service_started
+    image: virtual-patient-nginx:1.1.0
+    container_name: virtual-patient-nginx-compose
+    ports:
+      - ${NGINX_HTTPS_PORT}:443
+    volumes:
+      - ${RUN_DATA_DIR}/html/:/usr/share/nginx/html/
+    environment:
+      - TZ=${TIMEZONE}
+      - UPSTREAM_WEB_SERVERS=${UPSTREAM_WEB_SERVERS}
+      - UPSTREAM_MANAGE_SERVERS=${UPSTREAM_MANAGE_SERVERS}
+      - UPSTREAM_GRAPH_SERVERS=${UPSTREAM_GRAPH_SERVERS}
+    networks:
+      - virtual-patient-network
+    restart: always
+
+networks:
+  virtual-patient-network:
+      driver: bridge
\ No newline at end of file