🚀Docker部署lobechat数据库版,打造最强allinone大模型前端

2025-09-30 21:46:50 7点赞 26收藏 5评论

前言

💻🔥 拥有allinone服务器的你,是不是也想体验本地大模型的魅力?今天教你如何部署最强本地大模型应用!👇💫

🛠️🚀 Docker部署lobe-chat数据库版本,结合ollama后端,打造专属AI助手!🎯🔥

🌐🔍 再加上SearXNG+Firecrawl,实现联网搜索功能,让你的AI无所不能!🌟✨

💡💪 简单几步操作,你的allinone主机就能变身最强本地大模型搜索引擎!👏🎉

🔥👇 快来试试吧,体验AI带来的无限可能!评论区告诉我你的成果哦!💬❤️

📖 1. LobeChat介绍

🌟 LobeChat 是一款开源、现代化设计的AI聊天框架,界面美观、交互简洁,支持多种AI服务提供商集成!🌟

🎯 核心特性:

  • 📱 多模态支持 - 文本、语音、视觉识别一体化体验

  • 🤖 多模型支持 - 兼容ChatGPT、Claude、本地大模型等多种AI服务

  • 🔧 插件系统 - 丰富的插件生态,支持功能扩展

  • 📚 知识库管理 - 支持RAG技术,构建专属知识库

  • 🔒 本地部署 - 完全私有化部署,数据安全有保障

  • 🌐 联网搜索 - 集成SearXNG实现实时网络搜索

💡 Database版本优势:
相比普通版本,Database版本将设置和对话数据存储到数据库中,避免了浏览器缓存清理导致的数据丢失问题,支持多设备同步使用,大大提升了使用便利性!

lobe-chat使用效果示意lobe-chat使用效果示意

🐳 2. LobeChat数据库版Docker详细部署教程

🔧 环境准备

  • Docker & Docker Compose 已安装

  • 至少8GB内存(推荐16GB+)

  • 磁盘空间至少20GB

📦 部署步骤

步骤1:创建项目目录及下载配置文件

Shell

mkdir -p ~/lobechat-database cd ~/lobechat-database创建项目文件夹创建项目文件夹

步骤2:下载配置文件

登录github项目地址(https://github.com/lobehub/lobe-chat)下载配置文件:grafana/datasources/datasource-prometheus.yam、grafana/datasources/datasource-tempo.yaml、otel-collector/collector-config.yaml、prometheus/prometheus.yml、tempo/tempo.yaml、init_data.json、setup.sh、.env(项目地址里的.env..env.example重命名)

步骤3:配置.env文件

# Proxy,如果你需要的话(比如你使用 GitHub 作为鉴权服务提供商) # HTTP_PROXY=http://localhost:7890 # HTTPS_PROXY=http://localhost:7890 # 其他环境变量,视需求而定,可以参照客户端版本的环境变量配置,注意不要有 ACCESS_CODE # OPENAI_API_KEY=sk-xxxx # OPENAI_PROXY_URL=https://api.openai.com/v1 # OPENAI_MODEL_LIST=... # =================== # ===== 预设配置 ===== # =================== # 如没有特殊需要不用更改 LOBE_PORT=3210 CASDOOR_PORT=8000 MINIO_PORT=9000 APP_URL=http://192.168.2.99:3210 AUTH_URL=http://192.168.2.99:3210/api/auth # Postgres 相关,也即 DB 必须的环境变量 LOBE_DB_NAME=lobechat POSTGRES_PASSWORD=uWNZugjBqixf8dxC AUTH_CASDOOR_ISSUER=http://192.168.2.99:8010 # Casdoor secret AUTH_CASDOOR_ID=a387a4892ee19b1a3389 AUTH_CASDOOR_SECRET=dbf2567554de81b0b5b3603174e23fbecc354 CASDOOR_WEBHOOK_SECRET=casdoor-secret # MinIO S3 配置 MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=hahhahaha # 在下方配置 minio 中添加的桶 #S3_PUBLIC_DOMAIN=http://minio:9000 #S3_ENDPOINT=http://minio:9000 S3_PUBLIC_DOMAIN=http://192.168.2.99:9003 S3_ENDPOINT=http://192.168.2.99:9003 MINIO_LOBE_BUCKET=lobe # 为 casdoor 配置 origin=http://192.168.2.99:8010

步骤3:创建docker-compose.yml文件

YAML

name: lobe-chat-database services: postgresql: image: pgvector/pgvector:pg17 container_name: lobe-postgres privileged: true #ports: # - '5432:5432' volumes: - './data:/var/lib/postgresql/data' environment: - 'POSTGRES_DB=${LOBE_DB_NAME}' - 'POSTGRES_PASSWORD=${POSTGRES_PASSWORD}' healthcheck: test: ['CMD-SHELL', 'pg_isready -U postgres'] interval: 5s timeout: 5s retries: 5 restart: always networks: - lobe-network minio: image: minio/minio:RELEASE.2025-04-22T22-12-26Z container_name: lobe-minio #network_mode: 'service:network-service' networks: - lobe-network volumes: - './s3_data:/etc/minio/data' environment: - 'MINIO_API_CORS_ALLOW_ORIGIN=*' ports: - '9003:${MINIO_PORT}' # MinIO API env_file: - .env restart: always entrypoint: > /bin/sh -c " minio server /etc/minio/data --address ':${MINIO_PORT}' --console-address ':9001' & MINIO_PID=$! while ! curl -s http://localhost:${MINIO_PORT}/minio/health/live; do echo 'Waiting for MinIO to start...' sleep 1 done sleep 5 mc alias set myminio http://localhost:${MINIO_PORT} ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD} echo 'Creating bucket ${MINIO_LOBE_BUCKET}' mc mb myminio/${MINIO_LOBE_BUCKET} wait $MINIO_PID " # version lock ref: https://github.com/lobehub/lobe-chat/pull/7331 casdoor: image: casbin/casdoor:v2.13.0 container_name: lobe-casdoor privileged: true restart: always entrypoint: /bin/sh -c './server --createDatabase=true' #network_mode: 'service:network-service' networks: - lobe-network depends_on: postgresql: condition: service_healthy environment: httpport: ${CASDOOR_PORT} RUNNING_IN_DOCKER: 'true' driverName: 'postgres' dataSourceName: 'user=postgres password=${POSTGRES_PASSWORD} host=postgresql port=5432 sslmode=disable dbname=casdoor' runmode: 'dev' volumes: - ./init_data.json:/init_data.json env_file: - .env ports: - '8010:${CASDOOR_PORT}' # Casdoor # searxng: # image: searxng/searxng # container_name: lobe-searxng # volumes: # - './searxng-settings.yml:/etc/searxng/settings.yml' # environment: # - 'SEARXNG_SETTINGS_FILE=/etc/searxng/settings.yml' # restart: always # networks: # - lobe-network # env_file: # - .env lobe: image: lobehub/lobe-chat-database:latest container_name: lobe-chat #network_mode: 'service:network-service' networks: - lobe-network privileged: true ports: - '${LOBE_PORT}:3210' # LobeChat depends_on: postgresql: condition: service_healthy minio: condition: service_started casdoor: condition: service_started environment: - 'NEXT_AUTH_SSO_PROVIDERS=casdoor' - 'KEY_VAULTS_SECRET=Kix2wcUONd4CX51E/abcdefg' - 'NEXT_AUTH_SECRET=NX2kaPE923dt6Babcdefg' - 'DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgresql:5432/${LOBE_DB_NAME}' - 'S3_BUCKET=${MINIO_LOBE_BUCKET}' - 'S3_ENABLE_PATH_STYLE=1' - 'S3_ACCESS_KEY=${MINIO_ROOT_USER}' - 'S3_ACCESS_KEY_ID=${MINIO_ROOT_USER}' - 'S3_SECRET_ACCESS_KEY=${MINIO_ROOT_PASSWORD}' - 'LLM_VISION_IMAGE_USE_BASE64=1' - 'S3_SET_ACL=0' #- 'SEARXNG_URL=http://searxng:8080' - 'SEARXNG_URL=http://192.168.2.99:8082' #- 'DEFAULT_FILES_CONFIG=embedding_model=ollama/mxbai-embed-large:latest' # 使用ollama本地嵌入模型 #- 'DEFAULT_FILES_CONFIG=embedding_model=ollama/nomic-embed-text:v1.5' - 'DEFAULT_FILES_CONFIG=embedding_model=ollama/embeddinggemma:300m' - 'DEFAULT_FILES_CONFIG=embedding_model=ollama/bge-m3:567m' - 'ENABLED_OPENAI=0' # 关闭openai服务 - 'OLLAMA_PROXY_URL=http://192.168.2.99:11434' #- 'CRAWLER_IMPLS="browserless,firecrawl"' - 'CRAWLER_IMPLS=browserless' - 'BROWSERLESS_TOKEN=GFJ78iHFSvxEfTcceb7qrD5G2bCcaiTi' - 'BROWSERLESS_URL=http://192.168.2.99:3018' - 'BROWSERLESS_BLOCK_ADS=1' - 'BROWSERLESS_STEALTH_MODE=1' - 'FIRECRAWL_URL=http://192.168.2.99:3017/v1' env_file: - .env restart: always entrypoint: > /bin/sh -c " /bin/node /app/startServer.js & LOBE_PID=$! sleep 3 if [ $(wget --timeout=5 --spider --server-response ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep -c 'HTTP/1.1 200 OK') -eq 0 ]; then echo '⚠️Warning: Unable to fetch OIDC configuration from Casdoor' echo 'Request URL: ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration' echo 'Read more at: https://lobehub.com/docs/self-hosting/server-database/docker-compose#necessary-configuration' echo '' echo '⚠️注意:无法从 Casdoor 获取 OIDC 配置' echo '请求 URL: ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration' echo '了解更多:https://lobehub.com/zh/docs/self-hosting/server-database/docker-compose#necessary-configuration' echo '' else if ! wget -O - --timeout=5 ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep 'issuer' | grep ${AUTH_CASDOOR_ISSUER}; then printf '❌Error: The Auth issuer is conflict, Issuer in OIDC configuration is: %s' $(wget -O - --timeout=5 ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep -E 'issuer.*' | awk -F '"' '{print $4}') echo ' , but the issuer in .env file is: ${AUTH_CASDOOR_ISSUER} ' echo 'Request URL: ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration' echo 'Read more at: https://lobehub.com/docs/self-hosting/server-database/docker-compose#necessary-configuration' echo '' printf '❌错误:Auth 的 issuer 冲突,OIDC 配置中的 issuer 是:%s' $(wget -O - --timeout=5 ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration 2>&1 | grep -E 'issuer.*' | awk -F '"' '{print $4}') echo ' , 但 .env 文件中的 issuer 是:${AUTH_CASDOOR_ISSUER} ' echo '请求 URL: ${AUTH_CASDOOR_ISSUER}/.well-known/openid-configuration' echo '了解更多:https://lobehub.com/zh/docs/self-hosting/server-database/docker-compose#necessary-configuration' echo '' fi fi if [ $(wget --timeout=5 --spider --server-response ${S3_ENDPOINT}/minio/health/live 2>&1 | grep -c 'HTTP/1.1 200 OK') -eq 0 ]; then echo '⚠️Warning: Unable to fetch MinIO health status' echo 'Request URL: ${S3_ENDPOINT}/minio/health/live' echo 'Read more at: https://lobehub.com/docs/self-hosting/server-database/docker-compose#necessary-configuration' echo '' echo '⚠️注意:无法获取 MinIO 健康状态' echo '请求 URL: ${S3_ENDPOINT}/minio/health/live' echo '了解更多:https://lobehub.com/zh/docs/self-hosting/server-database/docker-compose#necessary-configuration' echo '' fi wait $LOBE_PID " grafana: profiles: - otel image: grafana/grafana:12.2.0-17419259409 container_name: lobe-grafana #network_mode: 'service:network-service' networks: - lobe-network restart: always environment: - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin - GF_AUTH_DISABLE_LOGIN_FORM=true - GF_FEATURE_TOGGLES_ENABLE=traceqlEditor volumes: - ./grafana_data:/var/lib/grafana - ./grafana/dashboards:/etc/grafana/provisioning/dashboards - ./grafana/datasources:/etc/grafana/provisioning/datasources depends_on: - tempo - prometheus tempo: profiles: - otel image: grafana/tempo:latest container_name: lobe-tempo #network_mode: 'service:network-service' networks: - lobe-network restart: always volumes: - ./tempo/tempo.yaml:/etc/tempo.yaml - ./tempo_data:/var/tempo command: ['-config.file=/etc/tempo.yaml'] prometheus: profiles: - otel image: prom/prometheus container_name: lobe-prometheus #network_mode: 'service:network-service' networks: - lobe-network restart: always volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - ./prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--web.enable-otlp-receiver' - '--web.enable-remote-write-receiver' - '--enable-feature=exemplar-storage' otel-collector: profiles: - otel image: otel/opentelemetry-collector container_name: lobe-otel-collector #network_mode: 'service:network-service' networks: - lobe-network restart: always volumes: - ./otel-collector/collector-config.yaml:/etc/otelcol/config.yaml command: ['--config', '/etc/otelcol/config.yaml'] depends_on: - tempo - prometheus otel-tracing-test: profiles: - otel-test image: ghcr.io/grafana/xk6-client-tracing:v0.0.7 container_name: lobe-otel-tracing-test #network_mode: 'service:network-service' networks: - lobe-network restart: always environment: - ENDPOINT=127.0.0.1:4317 networks: lobe-network: driver: bridge external: true name: default1

步骤4:启动服务

Shell

docker-compose up -d

步骤5:验证部署

Shell

# 检查容器状态 docker-compose ps # 查看日志 docker-compose logs -f lobe-chat

步骤6:访问应用
打开浏览器访问:http://localhost:3210(改成你的ip)

🔍 3. LobeChat配置SearXNG+Browserless实现本地联网搜索及数据抓取

🌐 部署SearXNG

参看前面的文章《docker部署SearXNG + Firecrawl 打造本地大模型最强搜索引擎》

🤖 部署Browserless

步骤1:添加Browserless服务到docker-compose.yml

YAML

services: browserless: image: ghcr.io/browserless/chromium container_name: browserless privileged: true restart: always environment: - TOKEN=GFJ78iHFSvxEfTccabcdefg - CONCURRENT=50 ports: - '3018:3000' networks: - default1 networks: default1: external: true

步骤2:启动Browserless

Shell

docker-compose up -d browserless

⚙️ 配置LobeChat联网搜索

步骤1:修改LobeChat环境变量
在docker-compose.yml中的lobe-chat服务下添加:

YAML

environment: # ... 其他配置 ... # 联网搜索配置 #- 'CRAWLER_IMPLS="browserless,firecrawl"' - 'CRAWLER_IMPLS=browserless' - 'BROWSERLESS_TOKEN=GFJ78iHFSvxEfTccabcdefg' - 'BROWSERLESS_URL=http://192.168.2.99:3018'# (改成你的ip) - 'BROWSERLESS_BLOCK_ADS=1' - 'BROWSERLESS_STEALTH_MODE=1' - 'FIRECRAWL_URL=http://192.168.2.99:3017/v1'#(用FIRECRAWL抓取,可选)

经测试,同时开启browserless+firecrawl会导致大模型不知道调用哪个抓取工具,会随机调用,反而抓取效果不好,建议只开启browserless就行了。

步骤2:重启LobeChat

Shell

docker-compose restart lobe-chat

步骤3:测试联网搜索
在LobeChat中使用以下命令触发联网搜索:

  • #search 关键词

  • /search 关键词

  • /ss 关键词

  • #ss 关键词

🚀Docker部署lobechat数据库版,打造最强allinone大模型前端联网搜索示意联网搜索示意

🧠 4. LobeChat配置本地Ollama知识库嵌入模型

📥 安装Ollama

参看前面的文章《基于AMD mi50洋垃圾显卡搭建我的ai服务器》

🧠 下载嵌入模型

步骤1:下载文本嵌入模型

Shell

# 推荐使用nomic-embed-text模型 ollama pull bge-m3:567m

步骤2:下载对话模型

Shell

# 推荐使用本地大模型 ollama pull mistral-small3.2:24b

目前经常测试,mxbai-embed-large:latest、nomic-embed-text:v1.5、embeddinggemma:300m均不支持lobechat的知识库,已知bge-m3:567m完美支持,其他模型大家自己测试。

🔧 配置LobeChat连接Ollama、智普

依次点击头像->应用设置->AI服务商,选择ollama,如下图:

ollama连接示意ollama连接示意

选择智普,如下图:

连接智普示意连接智普示意

智普的免费模型glm-4.5-flash超级强,这里推荐。

📚 创建知识库

步骤1:准备知识库文档
准备文档(PDF、TXT、DOCX等)。

步骤2:在LobeChat中创建知识库

  1. 登录LobeChat管理后台

  2. 进入"知识库"页面

  3. 点击"创建知识库"

  4. 上传文档。

知识库示意知识库示意

步骤3:测试知识库
在聊天界面中使用知识库相关的问题,系统会自动检索相关知识并生成回答。

引用知识库示意引用知识库示意

知识库这里,目前测试了Cherry Studio,AnythingLLM等等好几个,都没有lobechat好用。


🎉 部署完成!

恭喜您!现在您拥有了一个功能强大的本地AI聊天系统:

LobeChat数据库版本 - 数据持久化,多设备同步
SearXNG联网搜索 - 实时获取最新信息
Browserless数据抓取 - 深度网页内容分析
Ollama本地大模型 - 完全私有化AI服务
知识库系统 - 专属领域知识问答

🔧 常用命令

Shell

# 查看所有服务状态 docker-compose ps # 查看服务日志 docker-compose logs -f [服务名] # 重启服务 docker-compose restart [服务名] # 停止服务 docker-compose down # 更新镜像 docker-compose pull docker-compose up -d --force-recreate

🚀 进阶优化建议

  1. 性能优化:根据硬件配置调整模型大小和并发数

  2. 安全加固:配置HTTPS和防火墙规则

  3. 备份策略:定期备份数据库和知识库文件

  4. 监控告警:设置服务监控和异常告警

现在开始享受您的本地AI助手吧!🎊

目前已知的问题

1.部分视觉模型视觉能力不生效

使用本地部署的多模态mistral-small3.2:24b模型时无法读取图片信息,使用智普官网提供的模型GLM-4.1V-Thinking-Flash在某些指令下也提示无法获取图片信息,只有在特定指令下才能获取图片信息,比如使用指令“解析图片”可以识别图片,使用“识别图片”指令提示我上传图片,不知道这个是不是bug,期待官方后续修复。

2.知识库分块时,GPU、CPU和内存都占用很高

知识库向量化时CPU+内存占用高知识库向量化时CPU+内存占用高知识库向量化时GPU占用高知识库向量化时GPU占用高

3.向量化叠加可复制层的pdf扫描件时,识别结果全是乱码,同样的文件+嵌入模型在fastgpt里完成正常识别,知识库功能还需要加强。

4.3个及以上文件同时向量化时,有时会导致服务器自动重启,或者导致无线mesh的米家路由器自动断网。

展开 收起
5评论

  • 精彩
  • 最新
  • 显卡有要求吗?

    校验提示文案

    提交
    接入第三方模型没有要求,要接入本地自己部署的大模型就有要求

    校验提示文案

    提交
    收起所有回复
  • 我部署后,用txt文件测试知识库,但一直提示向量化失败{"errorType":"InvalidProviderAPIKey"}。ollama用的bge-m3:567m,环境变量'ENABLED_OPENAI=0'、'DEFAULT_FILES_CONFIG=embedding_model=ollama/bge-m3:567m'、'OLLAMA_PROXY_URL=去看看:11434'。有没有大佬知道怎么解决

    校验提示文案

    提交
    可能是向量化模型不支持,可以多试一下别的向量化模型

    校验提示文案

    提交
    收起所有回复
  • 大佬请教一下,部署好后用txt文件测试知识库,提示向量化失败{"errorType":"InvalidProviderAPIKey"}。用的ollama本地嵌入bge-m3:567m,compose相关环境变量:ENABLED_OPENAI=0、DEFAULT_FILES_CONFIG=embedding_model=ollama/bge-m3:567m、OLLAMA_PROXY_URL=去看看:11434。

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
相关好价
最新文章 热门文章
26
扫一下,分享更方便,购买更轻松