# 虚拟病人服务部署文档

## 需要部署的服务列表

1. 问诊系统
2. 后端管理系统
3. nginx前端服务
4. rasa对话服务
5. mysql数据库
6. paddlespeech语音文字转换服务
7. minio对象存储服务
8. redis服务

# 准备网络 如果是使用network模式则非必要
```shell

# 查看现有网络
docker network list

# 创建新网络
docker network create virtual-patient-network

```


## mysql数据库

- 启动mysql
~~~shell
    # 首先创建本地文件夹
    mkdir /var/lib/mysql
    # 拉取镜像
    docker pull mysql:5.7
    # 启动服务
    docker run -d -p 3306:3306 -v /var/lib/mysql:/var/lib/mysql --name vp-mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
    
    # **启用网络环境服务,生产环境请使用**
    docker run -d -p 3306:3306 -v /var/lib/mysql:/var/lib/mysql --name virtual-patient-mysql -e MYSQL_ROOT_PASSWORD=123456 --network virtual-patient-network mysql:5.7

~~~

- 执行数据库初始化脚本**建议使用可视化工具初始化数据**
```shell

    docker cp mysql/virtual_patient_v2.0.0.sql virtual-patient-mysql:/home/virtual_patient_v2.0.0.sql
    docker exec -it vp-mysql /bin/bash
    mysql -uroot -p123456;
    create database virtual_patient;
    use virtual_patient;
    source /home/virtual_patient_v2.0.0.sql;
    
```

## paddlespeech语音文字转换服务

~~~shell
    # 进入paddlespeech文件夹,依次执行命令
    # 加载镜像
    docker load -i virtual-patient-paddlespeech.tar.gz
    # 验证镜像是否存在
    docker images | grep virtual-patient-paddlespeech
    # 运行容器
    docker run --name virtual-patient-paddlespeech -p 8090:8090 -d virtual-patient-paddlespeech:1.0.0
    # **启用网络环境服务,生产环境请使用**
    docker run --name virtual-patient-paddlespeech -p 8090:8090 -d --network virtual-patient-network virtual-patient-paddlespeech:1.0.0
    # 验证容器运行
    docker ps | grep virtual-patient-paddlespeech
    # 查看日志是否正常
    docker logs -f virtual-patient-paddlespeech
~~~

## MINIO对象存储服务

~~~shell
# 首先创建文件夹
mkdir /data/vp/minio/data

# 拉最新版本
# docker pull minio/minio
# 导入镜像
docker load -i  minio/virtual-patient-minio.tar.gz
# 启动
docker run -it --name minio -p 9002:9000 -p 9001:9001 -d \
	-v /data/vp/minio/data:/data \
	-e 'MINIO_ROOT_USER=admin' \
	-e 'MINIO_ROOT_PASSWORD=12345678' \
	virtual-patient-minio:1.0.0 server /data --console-address ":9001" 
	
# **启用网络环境服务,生产环境请使用**
docker run -it --name minio -p 9002:9000 -p 9001:9001 -d \
	-v /data/vp/minio/data:/data \
	-e 'MINIO_ROOT_USER=admin' \
	-e 'MINIO_ROOT_PASSWORD=12345678' \
	--network virtual-patient-network \
	virtual-patient-minio:1.0.0 server /data --console-address ":9001" 
	
# 将文件mv到对应的文件夹
mv virtual-patient-bucket-prod /data/vp/minio/data
~~~

## redis服务

## MINIO对象存储服务

~~~shell
    # 进入redis文件目录下
    # 构建redis镜像
    docker build -t virtual-patient-redis:1.0.0 .
    
    # 查看镜像是否正确构建
    docker images | grep virtual-patient-redis
    
    # 启动redis容器
    docker run --name virtual-patient-redis -p 6379:6379 -v /data/vp/redis/data:/data -d virtual-patient-redis:1.0.0
    
    # **启用网络环境服务,生产环境请使用**
    docker run --name virtual-patient-redis -p 6379:6379 -v /data/vp/redis/data:/data --network virtual-patient-network -d virtual-patient-redis:1.0.0
    
    # 查看容器运行
    docker ps | grep virtual-patient-redis
~~~

## RASA对话服务

~~~shell
    # 加载镜像
    docker load -i virtual-patient-rasa-manager.tar.gz
    # 验证镜像是否存在
    docker images | grep virtual-patient-rasa-manager
    # 运行容器
    docker run --name virtual-patient-rasa-manager -p 5050:5050 -p 8990:8890 -d virtual-patient-rasa-manager:1.0.0
    
    # **启用网络环境服务,生产环境请使用**
    docker run --name virtual-patient-rasa-manager -p 5050:5050 -p 8990:8890 --network virtual-patient-network -d virtual-patient-rasa-manager:1.0.0 --spring.profile.active=network

    # 验证容器运行
    docker ps | grep virtual-patient-rasa-manager
    # 查看日志是否正常
    docker logs -f virtual-patient-rasa-manager
~~~

## 问诊服务部署

- 使用dockerfile的形式进行部署,端口号:8899
- 注意dockerfile中的virtual-patient-web-1.0-SNAPSHOT.jar路径正确
- 构建镜像并启动

~~~shell
    # 进入virtual-patient-web文件夹,依次执行命令
    # 构建镜像
    docker build -t virtual-patient-web:1.0.0 .
    # 验证镜像是否存在
    docker images | grep virtual-patient-web
    
    # 运行容器
    docker run --name virtual-patient-web -p 8899:8899 -d virtual-patient-web
    
    # **启用网络环境服务,生产环境请使用**
    docker run --name virtual-patient-web -p 8899:8899 --network virtual-patient-network -d virtual-patient-web --spring.profile.active=network
    
    # 验证容器运行
    docker ps | grep virtual-patient-web
    # 查看日志是否正常
    docker logs -f virtual-patient-web
~~~

## 后端管理系统部署

- 使用dockerfile的形式进行部署,端口号:8891
- 注意dockerfile中的virtual-patient-manage-1.0-SNAPSHOT.jar路径正确

~~~shell
    # 进入virtual-patient-manage文件夹,依次执行命令
    # 构建镜像
    docker build -t virtual-patient-manage:1.0.0 .
    # 验证镜像是否存在
    docker images | grep virtual-patient-manage
    # 运行容器
    docker run --name virtual-patient-manage -p 8891:8891 -d virtual-patient-manage
    # **启用网络环境服务,生产环境请使用**
    docker run --name virtual-patient-manage -p 8891:8891 --network virtual-patient-network -d virtual-patient-manage --spring.profile.active=network
    
    # 验证容器运行
    docker ps | grep virtual-patient-manage
    # 查看日志是否正常
    docker logs -f virtual-patient-manage
~~~


## Nginx前端服务

~~~shell
    # 进入nginx文件夹,依次执行命令
    # 修改 conf.d文件目录下servers.conf.template文件中的$UPSTREAM_WEB_SERVERS,$UPSTREAM_MANAGE_SERVERS
    # 构建镜像
    docker build -t virtual-patient-nginx:1.0.0 .
    # 验证镜像是否存在
    docker images | grep virtual-patient-nginx
    # 运行容器
    docker run --name virtual-patient-nginx -p 80:80 -d -e UPSTREAM_WEB_SERVERS=ip:port -e UPSTREAM_MANAGE_SERVERS=ip:port virtual-patient-nginx:1.0.0
    - UPSTREAM_WEB_SERVERS:虚拟病人问诊系统服务的ip:port
    - UPSTREAM_MANAGE_SERVERS:虚拟病人后端管理系统服务的ip:port
    
    # **启用网络环境服务,生产环境请使用**
    docker run --name virtual-patient-nginx -p 80:80 --network virtual-patient-network -d -e UPSTREAM_WEB_SERVERS=virtual-patient-web:8899 -e UPSTREAM_MANAGE_SERVERS=virtual-patient-manage:8891 virtual-patient-nginx:1.0.0
    # 验证容器运行
    docker ps
    # 查看日志是否正常
    docker logs -f virtual-patient-nginx
~~~