当前位置: 首页 > web >正文

bisheng系列(二)- 本地部署(前后端)

一、导读

环境:Ubuntu 24.04、open Euler 23.03、Windows 11、WSL 2、Python 3.10 、bisheng 1.1.1

背景:需要bisheng二开商用,故而此处进行本地部署,便于后期调试开发

时间:20250519

说明:bisheng前后端的代码不使用docker部署,基于代码部署

注意:本节基于上一章节的内容,如有疑问,请阅读:bisheng系列(一)

二、停止前后端的docker

bisheng共计9个容器,需要独立代码启动前后端,则需要将前后端的容器停止

1、停止并删除所有容器

命令:

docker-compose down

效果 

jack@Laptop-L14-gen4:~/bisheng-blog/bisheng/docker/bisheng-main/docker$ docker-compose down
Stopping bisheng-frontend  ... done
Stopping bisheng-backend   ... done
Stopping milvus-standalone ... done
Stopping bisheng-es        ... done
Stopping bisheng-office    ... done
Stopping milvus-etcd       ... done
Stopping bisheng-mysql     ... done
Stopping bisheng-redis     ... done
Stopping milvus-minio      ... done
Removing bisheng-frontend  ... done
Removing bisheng-backend   ... done
Removing milvus-standalone ... done
Removing bisheng-es        ... done
Removing bisheng-office    ... done
Removing milvus-etcd       ... done
Removing bisheng-mysql     ... done
Removing bisheng-redis     ... done
Removing milvus-minio      ... done
Removing network docker_default
jack@Laptop-L14-gen4:~/bisheng-blog/bisheng/docker/bisheng-main/docker$ docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED       STATUS                     PORTS                                                           NAMES
5257cf9b2426   qdrant/qdrant   "./entrypoint.sh"        3 weeks ago   Exited (255) 2 weeks ago   0.0.0.0:6333-6334->6333-6334/tcp, :::6333-6334->6333-6334/tcp   distracted_lamport
b28179c3b79b   qdrant/qdrant   "./entrypoint.sh"        3 weeks ago   Exited (255) 3 weeks ago   0.0.0.0:6333-6334->6333-6334/tcp, :::6333-6334->6333-6334/tcp   bold_beaver
b00d21f614f7   hello-world     "/hello"                 3 weeks ago   Exited (0) 3 weeks ago                                                                     objective_khayyam
114b2a816fae   ubuntu1:8080    "/bin/sh -c 'npm i &…"   7 weeks ago   Exited (255) 7 weeks ago   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp                       light_house

通过上述命令说明,bisheng的9个容器停止并删除成功

2、配置docker-compse

通过编辑docker-compose.yml文件,删除前后端的启动项,修改后内容如下:

services:mysql:container_name: bisheng-mysqlimage: mysql:8.0ports:- "3306:3306"environment:MYSQL_ROOT_PASSWORD: "1234"  # 数据库密码,如果修改需要同步修改bisheng/congfig/config.yaml配置database_url的mysql连接密码MYSQL_DATABASE: bishengTZ: Asia/Shanghaivolumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/mysql/conf/my.cnf:/etc/mysql/my.cnf- ${DOCKER_VOLUME_DIRECTORY:-.}/mysql/data:/var/lib/mysqlhealthcheck:test: ["CMD-SHELL", "exit | mysql -u root -p$$MYSQL_ROOT_PASSWORD"]start_period: 30sinterval: 20stimeout: 10sretries: 4restart: on-failureredis:container_name: bisheng-redisimage: redis:7.0.4ports:- "6379:6379"environment:TZ: Asia/Shanghaivolumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/data/redis:/data- ${DOCKER_VOLUME_DIRECTORY:-.}/redis/redis.conf:/etc/redis.confcommand: redis-server /etc/redis.confhealthcheck:test: ["CMD-SHELL", 'redis-cli ping|grep -e "PONG\|NOAUTH"']interval: 10stimeout: 5sretries: 3restart: on-failureoffice:container_name: bisheng-officeimage: onlyoffice/documentserver:7.1.1ports:- "8701:80"environment:TZ: Asia/ShanghaiJWT_ENABLED: "false"volumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/office/bisheng:/var/www/onlyoffice/documentserver/sdkjs-plugins/bishengcommand: bash -c "supervisorctl restart all"restart: on-failureelasticsearch:container_name: bisheng-esimage: docker.io/bitnami/elasticsearch:8.12.0user: rootports:- "9200:9200"- "9300:9300"environment:TZ: Asia/Shanghaivolumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/data/es:/bitnami/elasticsearch/datarestart: on-failureetcd:container_name: milvus-etcdimage: quay.io/coreos/etcd:v3.5.5environment:ETCD_AUTO_COMPACTION_MODE: revisionETCD_AUTO_COMPACTION_RETENTION: "1000"ETCD_QUOTA_BACKEND_BYTES: "4294967296"ETCD_SNAPSHOT_COUNT: "50000"TZ: Asia/Shanghaivolumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/data/milvus-etcd:/etcdcommand: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcdrestart: on-failurehealthcheck:test: ["CMD", "etcdctl", "endpoint", "health"]interval: 30stimeout: 20sretries: 3minio:container_name: milvus-minioimage: minio/minio:RELEASE.2023-03-20T20-16-18Zenvironment:MINIO_ACCESS_KEY: minioadminMINIO_SECRET_KEY: minioadminports:- "9100:9000"- "9101:9001"volumes:- /etc/localtime:/etc/localtime:ro- ${DOCKER_VOLUME_DIRECTORY:-.}/data/milvus-minio:/minio_datacommand: minio server /minio_data --console-address ":9001"restart: on-failurehealthcheck:test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]interval: 30stimeout: 20sretries: 3milvus:container_name: milvus-standaloneimage: milvusdb/milvus:v2.3.3command: ["milvus", "run", "standalone"]security_opt:- seccomp:unconfinedenvironment:ETCD_ENDPOINTS: etcd:2379MINIO_ADDRESS: minio:9000volumes:- /etc/localtime:/etc/localtime:ro- ${DOCKER_VOLUME_DIRECTORY:-.}/data/milvus:/var/lib/milvusrestart: on-failurehealthcheck:test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]start_period: 90sinterval: 30stimeout: 20sretries: 3ports:- "19530:19530"- "9091:9091"depends_on:- etcd- minio

3、启动其余容器

jack@Laptop-L14-gen4:~/bisheng-blog/bisheng/docker/bisheng-main/docker$ docker-compose up -d
Creating network "docker_default" with the default driver
Creating milvus-etcd    ... done
Creating bisheng-redis  ... done
Creating bisheng-mysql  ... done
Creating bisheng-office ... done
Creating milvus-minio   ... done
Creating bisheng-es     ... done
Creating milvus-standalone ... done

4、前后端代码

前后端的代码分别时:

 后端:bisheng/src/backend

前端:bisheng/src/frontend

三、后端启动

通过修改部分文件,使后端可以连接到相关的容器服务

后端在open Euler 23.03启动,我使用vscode来修改相关文件

1、克隆源码

git clone https://github.com/dataelement/bisheng.git

2、安装相关环境

sudo yum -y install python3-pip python3-devel  gcc g++ 

3、安装poetry

pip install poetry==1.8.2

4、项目环境

# 在当前项目根目录下生成环境
poetry config virtualenvs.create false# 安装环境所需的模块
poetry install

在该环境中,安装

pip install opencv-python-headless

 

 安装后,看下安装过程是否存在异常,如下为正常

...... - Installing types-pillow (9.5.0.6)- Installing types-pyyaml (6.0.12.20250516)- Installing types-requests (2.32.0.20250515)
......Writing lock fileInstalling the current project: bisheng (1.1.1)

5、配置文件

此处配置文件特指其余七个容器的连接配置

将/bisheng/docker/bisheng/config/config.yaml 复制到指定目录下

cp bisheng/docker/bisheng/config/config.yaml bisheng/src/backend/bisheng/

编辑该文件

# 原内容
"mysql+pymysql://root:gAAAAABlp4b4c59FeVGF_OQRVf6NOUIGdxq8246EBD-b0hdK_jVKRs1x4PoAn0A6C5S6IiFKmWn0Nm5eBUWu-7jxcqw6TiVjQA==@mysql:3306/bisheng?charset=utf8mb4"redis_url: "redis://redis:6379/1"celery_redis_url: "redis://redis:6379/2"- sink: "/app/data/bisheng.log"- sink: "/app/data/statistic.log"# 修改后
"mysql+pymysql://root:gAAAAABlp4b4c59FeVGF_OQRVf6NOUIGdxq8246EBD-b0hdK_jVKRs1x4PoAn0A6C5S6IiFKmWn0Nm5eBUWu-7jxcqw6TiVjQA==@0.0.0.0:3306/bisheng?charset=utf8mb4"redis_url: "redis://0.0.0.0:6379/1"celery_redis_url: "redis://0.0.0.0:6379/2"- sink: "/home/jack/bisheng/src/backend/data/bisheng.log"- sink: "/home/jack/bisheng/src/backend/data/statistic.log"

修改目的是将链接修改为0.0.0.0:端口,由于之前使用docker配置可以连接,但是当前由于使用代码直接启动,无法识别http://mysql:3306这种链接,故而需要修改

日志路径修改是为了保证权限的问题

新建.env文件,内容如下:

# bisheng/src/backend/bisheng/.envBS_MILVUS_CONNECTION_ARGS='{"host":"milvus","port":"19530","user":"","password":"","secure":false}'
BS_MILVUS_IS_PARTITION='true'
BS_MILVUS_PARTITION_SUFFIX='1'
BS_ELASTICSEARCH_URL='http://elasticsearch:9200'
BS_ELASTICSEARCH_SSL_VERIFY='{}'
BS_MINIO_SCHEMA='false'
BS_MINIO_CERT_CHECK='false'
BS_MINIO_ENDPOINT='minio:9000'
BS_MINIO_SHAREPOIN='minio:9000'
BS_MINIO_ACCESS_KEY='minioadmin'
BS_MINIO_SECRET_KEY='minioadmin'

 上述内容复制自docker-compose.yml

编辑settings文件,修改该函数内容如下

# bisheng/src/backend/bisheng/settings.pydef env_var_constructor(loader, node):from dotenv import load_dotenv, find_dotenvload_dotenv("/home/jack/bisheng/src/backend/bisheng/.env", find_dotenv())value = loader.construct_scalar(node)  # PyYAML loader的固定方法,用于根据当前节点构造一个变量值var_name = value.strip('${} ')  # 去除变量值(例如${PATH})前后的特殊字符及空格env_val = os.getenv(var_name)  # 尝试在环境变量中获取变量名(如USER)对应的值,获取不到则为空if env_val is None:raise ValueError(f'Environment variable {var_name} not found')return env_val

 编辑bisheng/src/backend/bisheng/api/services/assistant_agent.py,修改文件路径

# 原内容async def record_chat_history(self, message: List[Any]):# 记录助手的聊天历史if not os.getenv('BISHENG_RECORD_HISTORY'):returntry:os.makedirs('/app/data/history', exist_ok=True)with open(f'/app/data/history/{self.assistant.id}_{time.time()}.json',# 修改后async def record_chat_history(self, message: List[Any]):# 记录助手的聊天历史if not os.getenv('BISHENG_RECORD_HISTORY'):returntry:os.makedirs('/home/jack/bisheng/src/backend/data/history', exist_ok=True)with open(f'/home/jack/bisheng/src/backend/data/history/{self.assistant.id}_{time.time()}.json',

5、启动项目

uvicorn bisheng.main:app --host 0.0.0.0 --port 7860 

成功如下:

.
.
.
INFO:     Started server process [64315]
INFO:     Waiting for application startup.
[2025-05-19 11:25:20.152105] [2025-05-19 11:25:20.151985] [DEBUG process-64315-139958058770496 bisheng.interface.utils:91] - trace=1 Setting up LLM caching with InMemoryCache                                                                                                                              
[2025-05-19 11:25:20.153851] [2025-05-19 11:25:20.153779] [INFO process-64315-139958058770496 bisheng.interface.utils:93] - trace=1 LLM caching setup with InMemoryCache                                                                                                                                    
[2025-05-19 11:25:20.189322] [2025-05-19 11:25:20.189129] [DEBUG process-64315-139958058770496 bisheng.database.service:59] - trace=1 Creating database and tables                                                                                                                                          
[2025-05-19 11:25:20.564080] [2025-05-19 11:25:20.563913] [DEBUG process-64315-139958058770496 bisheng.database.service:79] - trace=1 Database and tables created successfully                                                                                                                              
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:7860 (Press CTRL+C to quit)

四、前端启动

1、nginx部署

1)安装node,要求node >= 18

下载链接:v18.19.0 - 阿里云

# 切换目录
cd /usr/local# 下载nodejs文件
wget https://mirrors.aliyun.com/nodejs-release/v18.19.0/node-v18.19.0-linux-x64.tar.gz?spm=a2c6h.25603864.0.0.1bb22f6dOhRq63# 解压到当前目录
tar xzf node-v18.19.0-linux-x64.tar.gz# 创建软连接ln -s /usr/local/node-v18.19.0-linux-x64/bin/node /usr/bin/node
ln -s /usr/local/node-v18.19.0-linux-x64/bin/npm /usr/bin/npm
ln -s /usr/local/node-v18.19.0-linux-x64/bin/npx /usr/bin/npx

2)安装nginx

sudo yum -y install nginx

 3)编译文件

# 编译client
cd bisheng/src/frontend/client && npm install --force --registry=https://registry.npmmirror.com && npm run build# 编译platform
cd bisheng/src/frontend/platform && npm install --force --registry=https://registry.npmmirror.com && npm run build

将编译后的build目录复制到/usr/share/nginx/html/,如下

cp -r client/build /usr/share/nginx/html/clientcp -r platform/build /usr/share/nginx/html/platform

4)替换nginx配置文件

# 备份nginx原配置文件
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak# 复制源码中的nginx配置文件
cp bisheng/docker/nginx/nginx.conf /etc/nginx/cp bisheng/docker/nginx/conf.d/* /etc/nginx/conf.d/

编辑conf.d下的配置文件,将两个配置文件的内容进行替换

# 原内容
proxy_pass http://backend:7860;
proxy_pass http://minio:9000;# 替换后
proxy_pass http://0.0.0.0:7860;
proxy_pass http://0.0.0.0:9000;

5)启动nginx

sudo nginx

6)访问测试 

7)后端日志

 后续继续优化

http://www.xdnf.cn/news/7380.html

相关文章:

  • SpringBoot 中文转拼音 Pinyin4j库 拼音转换 单据管理 客户管理
  • 电脑A和电脑B都无法ping通电脑C网络,电脑C可以ping通电脑A和B,使用新系统测试正常,排除硬件问题。
  • 【漫话机器学习系列】268. K 折交叉验证(K-Fold Cross-Validation)
  • CAD看图王三维功能升级能解决哪些问题?
  • vulfocus漏洞学习——redis 未授权访问 (CNVD-2015-07557)
  • CSS提高性能的方法有哪些
  • @RequestParam 和 @RequestBody、HttpServletrequest 与HttpServletResponse
  • 解析:新能源汽车芯片主要玩家及技术发展
  • 从秒开到丝滑体验!WebAssembly助力ZKmall商城重构 B2B2C 商城性能基线
  • 四:操作系统cpu调度之调度算法
  • PyQt5绘图全攻略:QPainter、QPen、QBrush与QPixmap详解
  • uniapp运行到微信开发者工具报错“更改appid失败touristappidError:tourist appid”
  • Spring Bean 生命周期中设计模式的应用与解析
  • 通过vcpkg交叉编译grpc:构建Arm64平台的Docker化开发环境
  • 掌握Git:版本控制与高效协作指南
  • 【C++】哈希的概念与实现
  • 命令行登录 MySQL 报 Segmentation fault 故障解决
  • 代购商城系统可以解决哪些重点难题?
  • 前端 vue + element-ui 框架从 0 - 1 搭建
  • React组件开发流程-03.1
  • go 数据类型转换
  • 5个yyds的.Net商城开源项目
  • [特殊字符] Word2Vec:将词映射到高维空间,它到底能解决什么问题?
  • 【Spring Boot 整合 MongoDB 完整指南】
  • sentinel核心原理-高频问题
  • Android设备 显示充电速度流程
  • 使用 Terraform 创建 Azure Databricks
  • Milvus 从 v2.4.12 升级到 v2.5.11 的实施方案
  • 基于Qt的app开发第九天
  • disryptor和rabbitmq