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.pswp.cn/bicheng/81753.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81753.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81753.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

5G金融互聯:邁向未來金融服務的極速與智能新時代

5G金融互聯:邁向未來金融服務的極速與智能新時代 大家好,我是Echo_Wish,今天咱們聊聊一個大家都十分關心的話題:5G網絡在金融服務中的應用。咱們平時可能覺得5G只是打個電話、刷個視頻更流暢了,但在金融服務領域,5G的低延時、大帶寬和高可靠性正在悄然改變整個游戲規則。…

UE5 GAS框架解析內部數據處理機制——服務器與客戶端

當, gas通過點擊鼠標光標觸發事件時,內部的處理機制。 當通過點擊事件,命中中目標時, 可獲取到對應的TargetData 目標數據。處理相應的操作。 僅有本地的客戶端的情況下。命中并不會有什么異常。 當存在服務器時, 服…

Golang的Web應用架構設計

# Golang的Web應用架構設計 介紹 是一種快速、高效、可靠的編程語言,它在Web應用開發中越來越受歡迎。Golang的Web應用架構設計通常包括前端、后端和數據庫三個部分。在本篇文章中,我們將詳細介紹Golang的Web應用架構設計及其組成部分。 前端 在Golang的…

對比 HTTP-REST 與 gRPC:各自的優缺點以及適用的場景

文章目錄 對比 HTTP-REST 與 gRPC:各自的優缺點以及適用的場景HTTP-REST 與 gRPC 的核心區別gRPC 的優缺點HTTP-REST 的優缺點適用場景 模糊點什么是 Protobuf?HTTP/2 會將 HTTP 消息拆分并封裝為二進制幀,那還能過使用 HTTP/2 構建 RESTful …

現代健康生活養生指南

現代社會中,熬夜加班、久坐不動、飲食不規律成為許多人的生活常態,由此引發的健康問題也日益增多。想要擺脫亞健康,不必依賴中醫理念,從以下這些現代科學養生方法入手,就能逐步改善身體狀況。? 飲食上,注…

Go語言數組的定義與操作 - 《Go語言實戰指南》

在 Go 語言中,數組(Array) 是一種定長、同類型的集合。它在內存中是連續分布的,適合用于性能敏感的場景。 一、數組的定義 數組的基本語法如下: var 數組名 [長度]元素類型 示例: var nums [5]int …

Helm Chart 中配置多個 Docker Registry 地址以實現備用訪問

在 Helm Chart 中配置多個 Docker Registry 地址以實現備用訪問,可以通過以下幾種方式實現: 1. 在 values.yaml 中定義多個 Registry 在 values.yaml 中定義主 Registry 和備用 Registry,以便在部署時靈活切換: # values.yaml …

云原生安全:錯誤策略S3存儲桶ACL設置為Everyone:FullControl

??「炎碼工坊」技術彈藥已裝填! 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 ——從基礎到實踐的深度解析 1. 基礎概念 S3存儲桶與ACL Amazon S3(Simple Storage Service)是AWS提供的對象存儲服務,支持存儲和檢索任意規模的數據。ACL(訪問控制列表…

.NET 8 kestrel 配置PEM,實現內網https

一、生成證書 mkcert 是一個簡單的工具,用于制作本地信任的開發證書。它不需要配置。 mkcert官方倉庫地址:GitHub - FiloSottile/mkcert: A simple zero-config tool to make locally trusted development certificates with any names youd like. 簡…

nodejs快速入門到精通1

參考 nodejs快速入門到精通 菜鳥教程-nodejs nodejs官方文檔 原因 視頻免費 資料收費 筆記還是自己寫吧 安裝 nodejs官網 windows下: #查看nodejs版本 node -v #查看npm版本 npm -v #設置npm為淘寶鏡像源 npm config set registry https://registry.npmmirror.…

nginx負載均衡及keepalive高可用

實驗前期準備: 5臺虛擬機:4臺當做服務器,1臺當做客戶機(當然,也可以使用主機的瀏覽器),4臺服務器中,2臺服務器當做后端真實訪問服務器;另外2臺服務器當做負載均衡服務器…

go語法大賞

前些日子單機房穩定性下降,找了好一會才找到真正的原因。這里面涉及到不少go語法細節,正好大家一起看一下。 一、仿真代碼 這是仿真之后的代碼 package mainimport ("fmt""go.uber.org/atomic""time" )type StopSignal…

Android 14 解決打開app出現不兼容彈窗的問題

應用安裝到 Android 14 上,出現如下提示 This app isn’t compatible with the latest version of Android. Check for an update or contact the app’s developer. 通過源碼找原因。 提示的字符 根據字符找到 ./frameworks/base/core/res/res/values/strings.xm…

Linux句柄數過多問題排查

以下是Linux句柄數過多問題的排查與解決方法整理&#xff1a; 一、檢測句柄使用情況 1?.查看系統限制? 單個進程限制&#xff1a;ulimit -n 系統級總限制&#xff1a;cat /proc/sys/fs/file-max 2?.統計進程占用量? 查看指定進程&#xff1a;lsof -p <PID> | wc -…

matlab插值方法(簡短)

在MATLAB中&#xff0c;可以使用interp1函數快速實現插值。以下代碼展示了如何使用spline插值方法對給定數據進行插值&#xff1a; x1 [23,56]; y1 [23,56]; X 23:1:56*4; Y interp1(x1,y1,X,spline);% linear、 spline其中&#xff0c;x1和y1是已知數據點&#xff0c;X是…

時間篩掉了不夠堅定的東西

2025年5月17日&#xff0c;16~25℃&#xff0c;還好 待辦&#xff1a; 《高等數學1》重修考試 《高等數學2》備課 《物理[2]》備課 《高等數學2》取消考試資格學生名單 《物理[2]》取消考試資格名單 職稱申報材料 2024年稅務申報 5月24日、25日監考報名 遇見&#xff1a;敲了一…

hexo博客搭建使用

搭建 Hexo 演示主題為&#xff1a;Keep 使用 文章 創建新文章 ? zymore-blog-keep git:(main) ? hexo new "告別H5嵌入&#xff01;uniApp小程序文件下載與分享完整解決方案" INFO Validating config INFO Created: ~/Desktop/HelloWorld/zymore-blog-k…

React組件開發流程-03.1

此章先以一個完整的例子來全面了解下React組件開發的流程&#xff0c;主要是以代碼為主&#xff0c;在不同的章節中會把重點標出來&#xff0c;要完成的例子如下&#xff0c;也可從官網中找到。 React組件開發流程 這只是一個通用流程&#xff0c;在熟悉后不需要完全遵從。 …

Cloudflare防火墻攔截谷歌爬蟲|導致收錄失敗怎么解決?

許多站長發現網站突然從谷歌搜索結果中“消失”&#xff0c;背后很可能是Cloudflare防火墻誤攔截了谷歌爬蟲&#xff08;Googlebot&#xff09;&#xff0c;導致搜索引擎無法正常抓取頁面。 由于Cloudflare默認的防護規則較為嚴格&#xff0c;尤其是針對高頻訪問的爬蟲IP&…

Ubuntu系統安裝VsCode

在Linux系統中&#xff0c;可以通過.deb文件手動安裝Visual Studio Code&#xff08;VS Code&#xff09;。以下是詳細的安裝步驟&#xff1a; 下載.deb文件 訪問Visual Studio Code的官方網站。 在下載頁面中&#xff0c;找到適用于Linux的.deb文件。 根據你的系統架構&…