diff --git a/docker/docker-compose/.env b/docker/docker-compose/.env new file mode 100644 index 0000000..960d6a1 --- /dev/null +++ b/docker/docker-compose/.env @@ -0,0 +1,30 @@ + +# mysql相关配置内容 +MYSQL_PASSWORD=12345678 +MYSQL_PORT=5415 + +# minio相关配置内容 +MINIO_CONSOLE_PORT=9001 +MINIO_PORT=9000 +MINIO_USER=admin +MINIO_PASSWORD=12345678 + +# neo4j相关配置内容 +NEO4J_PORT_HTTP=7474 +NEO4J_PORT_BOLT=7687 +NEO4J_USERNAME=neo4j +NEO4J_PASSWORD=123456 + +# 伏羲后台服务相关配置内容 +WEB_HTTP_PORT=9380 +SPRING_PROFILES_ACTIVE=bridge +OLLAMA_URL=http://192.168.10.70:11434 +OLLAMA_MODEL=llama3-chinese:8b +LANGCHAIN_CHAT_URL=http://113.128.242.110:7861 + + +# nginx相关配置内容 +NGINX_HTTP_PORT=80 +FU_HSI_SERVERS=fu-hsi-web:8097 + +TIMEZONE='Asia/Shanghai' diff --git a/docker/docker-compose/README.md b/docker/docker-compose/README.md new file mode 100644 index 0000000..395927a --- /dev/null +++ b/docker/docker-compose/README.md @@ -0,0 +1,73 @@ + + +## 🎬 快速开始 + +### 📝 前提条件 + +- CPU >= 16 核 +- RAM >= 32 GB +- Disk >= 500 GB +- Docker >= 24.0.6 & Docker Compose >= v2.5.0 + +### 安装包结构说明 +| 文件/文件夹 | 说明 | +| - |---------------| +| fu-hsi-nginx/ | 用于存放nginx静态文件 | +| fu-hsi-web/ | 用户存放后端服务程序 | +| .env | 应用的环境配置 | +| docker-compose.yml | docker-compose 配置文件 | +| docker-compose-base.yml | docker-compose 配置文件 | + +### 🚀 启动服务 + +1. 加载镜像 +```shell +# 进入deploy文件目录 +cd ./deploy + +# 加载镜像 +docker load -i fu-shi-install.1.0.0.tar.gz + +``` + +2. 修改配置文件 +```shell +# 编辑配置文件 +$ vi .env +# 根据环境修改配置文件 + OLLAMA_URL:ollama访问地址 + OLLAMA_MODEL:模型名称 + LANGCHAIN_CHAT_URL:langchain-chat服务地址 +# 其他配置项可保持默认值 +``` + +3. 进入deploy目录,执行命令 +```shell + docker compose up -d +``` +等待程序启动完成即可,如果没有启动成功,可重试上面的命令。 +启动完成后会打印出下面的日志信息: + [+] Running 5/5 + ✔ Container fu-hsi-mysql Healthy 0.0s + ✔ Container fu-hsi-minio Running 0.0s + ✔ Container fu-hsi-neo4j Running 0.0s + ✔ Container fu-hsi-web Healthy 0.4s + ✔ Container fu-hsi-nginx Started + + +4. 查看启动情况 +```shell +$ docker compose ps + + +> docker compose ps +NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS +fu-hsi-minio quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z "/usr/bin/docker-ent…" minio 20 minutes ago Up 20 minutes 0.0.0.0:9000-9001->9000-9001/tcp +fu-hsi-mysql mysql:5.7 "docker-entrypoint.s…" mysql 20 minutes ago Up 20 minutes (healthy) 33060/tcp, 0.0.0.0:5415->3306/tcp +fu-hsi-neo4j neo4j:4.4 "tini -g -- /startup…" neo4j 20 minutes ago Up 20 minutes 0.0.0.0:7474->7474/tcp, 7473/tcp, 0.0.0.0:7687->7687/tcp +fu-hsi-nginx fu-hsi-nginx:1.0.0 "/docker-entrypoint.…" fu-hsi-nginx 20 minutes ago Up 17 minutes 0.0.0.0:80->80/tcp, 443/tcp +fu-hsi-web fu-hsi-web:1.0.0 "java -Xms256m -Xmx1…" fu-hsi-web 20 minutes ago Up 18 minutes (unhealthy) 0.0.0.0:9380->8097/tcp +``` + +## 🚀 访问服务 +访问地址:http://ip:9978/case-management diff --git a/docker/docker-compose/docker-compose-base.yml b/docker/docker-compose/docker-compose-base.yml new file mode 100644 index 0000000..e4c0b0e --- /dev/null +++ b/docker/docker-compose/docker-compose-base.yml @@ -0,0 +1,78 @@ +services: + mysql: + image: mysql:5.7 + container_name: fu-hsi-mysql + 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" + --init-file /data/application/init.sql + ports: + - ${MYSQL_PORT}:3306 + volumes: + - ./mysql/data:/var/lib/mysql + - ./init.sql:/data/application/init.sql + networks: + - fu-hsi + 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-12-20T01-00-02Z + container_name: fu-hsi-minio + 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: + - ./minio/data:/data + networks: + - fu-hsi +# healthcheck: +# test: ["CMD","curl -fs http://localhost/ || exit 1"] +# interval: 30s +# timeout: 10s +# retries: 3 +# start_period: 20s + restart: always + + neo4j: + image: neo4j:4.4 + container_name: fu-hsi-neo4j + ports: + - ${NEO4J_PORT_HTTP}:7474 + - ${NEO4J_PORT_BOLT}:7687 + environment: + - NEO4J_AUTH=${NEO4J_USERNAME}/${NEO4J_PASSWORD} + volumes: + - ./neo4j/data:/data + - ./neo4j/logs:/logs + - ./neo4j/import:/var/lib/neo4j/import + - ./neo4j/plugins:/var/lib/neo4j/plugins + networks: + - fu-hsi +# healthcheck: +# test: ["CMD", "curl", "-sS", "http://localhost:7474"] +# interval: 30s +# timeout: 10s +# retries: 5 +# start_period: 40s +# restart: always + +networks: + fu-hsi: + driver: bridge diff --git a/docker/docker-compose/docker-compose.yml b/docker/docker-compose/docker-compose.yml new file mode 100644 index 0000000..648dfb3 --- /dev/null +++ b/docker/docker-compose/docker-compose.yml @@ -0,0 +1,49 @@ +include: + - path: ./docker-compose-base.yml + env_file: ./.env + +services: + fu-hsi-web: + depends_on: + mysql: + condition: service_started + neo4j: + condition: service_started + minio: + condition: service_started + image: fu-hsi-web:1.0.0 + container_name: fu-hsi-web + ports: + - ${WEB_HTTP_PORT}:8097 + volumes: + - ./fu-hsi-web/:/data/fu-hsi/web/ + environment: + - TZ=${TIMEZONE} + - spring.profiles.active=${SPRING_PROFILES_ACTIVE} + - ollama.url=${OLLAMA_URL} + - ollama.model=${OLLAMA_MODEL} + - langChain-chat.url=${LANGCHAIN_CHAT_URL} + - datasource.username=${MYSQL_PASSWORD} + - neo4j.username=${NEO4J_USERNAME} + - neo4j.password=${NEO4J_PASSWORD} + - minio.username=${MINIO_USER} + - minio.password=${MINIO_PASSWORD} + networks: + - fu-hsi + restart: always + fu-hsi-nginx: + depends_on: + fu-hsi-web: + condition: service_started + image: fu-hsi-nginx:1.0.0 + container_name: fu-hsi-nginx + ports: + - ${NGINX_HTTP_PORT}:80 + volumes: + - ./fu-hsi-nginx/html/:/usr/share/nginx/html/ + environment: + - TZ=${TIMEZONE} + - FU_HSI_SERVERS=${FU_HSI_SERVERS} + networks: + - fu-hsi + restart: always \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..c2976a9 --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,69 @@ +spring: + application: + name: fu-hsi-server + ai: + ollama: + base-url: ${ollama.url} + chat: + enabled: true + options: + model: ${ollama.model} + # 控制模型在请求后加载到内存中的时间(稍微长一点的时间,避免重复加载浪费性能,加快处理速度) + keep_alive: 30m + # 例如0.3 + temperature: 0.8 + format: json + # 减少产生废话的可能性。较高的值(例如,100)将给出更多样化的答案,而较低的值(例如,10)将更加保守。 + top-k: 90 + # 与top-k一起工作。较高的值(例如,0.95)将导致更加多样化的文本,而较低的值(例如,0.5)将生成更加集中和保守的文本。 + top-p: 0.95 + # 随机数种子,用于控制模型输出的随机性。 + seed: 1 + datasource: + type: com.alibaba.druid.pool.DruidDataSource + druid: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://fu-hsi-mysql:3306/nx_llm?useUnicode=true&characterEncoding=utf-8&useSSL=true&nullCatalogMeansCurrent=true&serverTimezone=GMT%2B8 + username: root + password: ${datasource.username} + initial-size: 5 # 初始化大小 + min-idle: 10 # 最小连接数 + max-active: 20 # 最大连接数 + max-wait: 60000 # 获取连接时的最大等待时间 + min-evictable-idle-time-millis: 300000 # 一个连接在池中最小生存的时间,单位是毫秒 + time-between-eviction-runs-millis: 60000 # 多久才进行一次检测需要关闭的空闲连接,单位是毫秒 + filters: stat,wall # 配置扩展插件:stat-监控统计,log4j-日志,wall-防火墙(防止SQL注入),去掉后,监控界面的sql无法统计 + validation-query: SELECT 1 # 检测连接是否有效的 SQL语句,为空时以下三个配置均无效 + test-on-borrow: true # 申请连接时执行validationQuery检测连接是否有效,默认true,开启后会降低性能 + test-on-return: true # 归还连接时执行validationQuery检测连接是否有效,默认false,开启后会降低性能 + test-while-idle: true # 申请连接时如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效,默认false,建议开启,不影响性能 + stat-view-servlet: + enabled: false # 是否开启 StatViewServlet + filter: + stat: + enabled: true # 是否开启 FilterStat,默认true + log-slow-sql: true # 是否开启 慢SQL 记录,默认false + slow-sql-millis: 5000 # 慢 SQL 的标准,默认 3000,单位:毫秒 + merge-sql: false # 合并多个连接池的监控数据,默认false + data: + neo4j: + database: neo4j + + neo4j: + uri: bolt://fu-hsi-neo4j:7687 + authentication: + username: ${neo4j.username} + password: ${neo4j.password} + +minio: + endpoint: http://fu-hsi-minio:9002 + accessKey: ${minio.username} + secretKey: ${minio.password} + bucketName: nxfuhsi + +logging: + level: + org.springframework.ai: TRACE + +langChain-chat: + url: \ No newline at end of file