🚀Docker部署lobechat数据库版,打造最强allinone大模型前端
前言
💻🔥 拥有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使用效果示意🐳 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 关键词

联网搜索示意🧠 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连接示意选择智普,如下图:
连接智普示意智普的免费模型glm-4.5-flash超级强,这里推荐。
📚 创建知识库
步骤1:准备知识库文档
准备文档(PDF、TXT、DOCX等)。
步骤2:在LobeChat中创建知识库
登录LobeChat管理后台
进入"知识库"页面
点击"创建知识库"
上传文档。
知识库示意步骤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
🚀 进阶优化建议
性能优化:根据硬件配置调整模型大小和并发数
安全加固:配置HTTPS和防火墙规则
备份策略:定期备份数据库和知识库文件
监控告警:设置服务监控和异常告警
现在开始享受您的本地AI助手吧!🎊
目前已知的问题
1.部分视觉模型视觉能力不生效
使用本地部署的多模态mistral-small3.2:24b模型时无法读取图片信息,使用智普官网提供的模型GLM-4.1V-Thinking-Flash在某些指令下也提示无法获取图片信息,只有在特定指令下才能获取图片信息,比如使用指令“解析图片”可以识别图片,使用“识别图片”指令提示我上传图片,不知道这个是不是bug,期待官方后续修复。
2.知识库分块时,GPU、CPU和内存都占用很高
知识库向量化时CPU+内存占用高
知识库向量化时GPU占用高3.向量化叠加可复制层的pdf扫描件时,识别结果全是乱码,同样的文件+嵌入模型在fastgpt里完成正常识别,知识库功能还需要加强。
4.3个及以上文件同时向量化时,有时会导致服务器自动重启,或者导致无线mesh的米家路由器自动断网。

少装点怪
校验提示文案
[已注销]
校验提示文案
[已注销]
校验提示文案
[已注销]
校验提示文案
[已注销]
校验提示文案
少装点怪
校验提示文案