LobeChat数据库版部署指南(2025最新)
2025/04/05 更新内容
在.env文件中补充了对Ollama 嵌入模型(Embedding Model)的支持配置,用于启用 LobeChat 内建知识库的向量检索能力。同时更新了 MinIO 桶策略模板以增强安全性,并明确标注所有敏感字段必须替换。
你有没有遇到过这种情况:在手机上和AI聊了一半,换到电脑就得从头开始?或者想上传一份文档让AI分析,却发现本地版本根本不支持?这正是LobeChat社区版的痛点——功能受限、无法同步、数据孤岛。
而今天我们要搭建的LobeChat 数据库版本(Database Edition, DB 版),就是为了解决这些问题而生。它不再依赖浏览器存储,而是通过一套完整的后端服务架构,实现了多端同步、文件上传、知识库RAG、插件扩展等企业级功能。更重要的是,它是开源的,完全可控,适合个人开发者、团队协作甚至企业客服系统。
本文将带你从零开始,完成一次生产级部署。最终成果是一个可以通过https://chat.yourdomain.com安全访问的完整实例,包含身份认证、对象存储、数据库持久化等全套组件。
✅ 部署模式:域名 + HTTPS + Docker-Compose + 反向代理
🎯 目标成果:可通过https://chat.yourdomain.com安全访问的 LobeChat 实例
前提条件
请确保以下环境已准备就绪:
- 一台拥有固定公网 IP 的 Linux 服务器(推荐 Ubuntu 22.04 LTS)
- 已安装
Docker和Docker Compose v2+ - 已部署
1Panel或其他可视化运维面板(可选但推荐) - 已配置
OpenResty或 Nginx 作为反向代理 - 拥有一个可解析的合法域名(如
example.com) - 至少注册一个第三方大模型 API Key(如 OpenAI、DeepSeek、SiliconFlow 等)
域名规划与 DNS 解析
要实现前后端分离和安全隔离,我们需要多个子域名来分别承载不同服务。这是现代微服务架构的标准做法,也能有效避免跨域问题。
设置 DNS A 记录
进入你的域名服务商控制台(如阿里云、Cloudflare),添加如下五条 A 类记录:
| 子域名 | 记录值(服务器公网IP) |
|---|---|
chat.example.com | YOUR_SERVER_IP |
auth-api.example.com | YOUR_SERVER_IP |
auth-ui.example.com | YOUR_SERVER_IP |
s3-api.example.com | YOUR_SERVER_IP |
s3-ui.example.com | YOUR_SERVER_IP |
🔁 替换说明:将
example.com替换为你的真实一级域名。
这些子域将分别用于:
-chat.*:LobeChat 主服务
-auth-*:Logto 提供的身份认证服务(OAuth/OIDC)
-s3-*:MinIO 对象存储服务(文件上传/下载)
如果你使用的是内网服务器并通过 NPS 进行穿透,请登录 NPS 控制台,在“域名管理”中设置如下代理规则:
chat.example.com → 内网OpenResty:443 auth-api.example.com → 内网OpenResty:443 auth-ui.example.com → 内网OpenResty:443 s3-api.example.com → 内网OpenResty:443 s3-ui.example.com → 内网OpenResty:443确保所有流量均被正确转发至内网 OpenResty 的 HTTPS 端口。
编排文件与环境变量配置
我们采用docker-compose.yml来统一编排 PostgreSQL、MinIO、Logto 和 LobeChat 四个核心组件。这种声明式配置方式不仅便于维护,也利于后期迁移到 Kubernetes。
创建项目目录
mkdir ~/lobechat-db && cd ~/lobechat-db编写docker-compose.yml
执行命令创建文件:
vim docker-compose.yml粘贴以下内容(请务必按注释修改敏感信息):
name: lobe-chat-database services: postgresql: image: pgvector/pgvector:pg16 container_name: lobe-postgres ports: - "5432:5432" volumes: - ./data:/var/lib/postgresql/data environment: POSTGRES_DB: lobe POSTGRES_PASSWORD: CHANGEME_POSTGRES_PASS healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 5s timeout: 5s retries: 5 restart: always minio: image: minio/minio container_name: lobe-minio ports: - "9000:9000" - "9001:9001" volumes: - ./s3_data:/data environment: MINIO_ROOT_USER: CHANGEME_MINIO_USER MINIO_ROOT_PASSWORD: CHANGEME_MINIO_PASS MINIO_DOMAIN: s3-api.example.com MINIO_API_CORS_ALLOW_ORIGIN: https://chat.example.com command: server /data --address ":9000" --console-address ":9001" restart: always logto: image: svhd/logto container_name: lobe-logto ports: - "3001:3001" - "3002:3002" depends_on: postgresql: condition: service_healthy environment: TRUST_PROXY_HEADER: "1" DB_URL: postgresql://postgres:CHANGEME_POSTGRES_PASS@postgresql:5432/logto ENDPOINT: https://auth-api.example.com ADMIN_ENDPOINT: https://auth-ui.example.com entrypoint: ["sh", "-c", "npm run cli db seed -- --swe && npm start"] restart: always lobe: image: lobehub/lobe-chat-database container_name: lobe-chat ports: - "3210:3210" depends_on: - postgresql - minio - logto env_file: - .env restart: always volumes: data: driver: local s3_data: driver: local📌重点注意事项:
- 所有
CHANGEME_*字段必须替换为强密码; POSTGRES_PASSWORD必须与.env中的DATABASE_URL密码一致;- 所有
example.com需替换为你的实际域名; - ⚠️⚠️⚠️==切勿将此配置直接用于生产环境,否则可能导致数据泄露或未授权访问!==⚠️⚠️⚠️
配置.env环境变量文件
创建环境变量文件:
vim .env填入以下内容(根据实际情况修改):
# —————————— 基础配置 —————————— # APP_URL=https://chat.example.com # —————————— 数据库加密密钥 —————————— # KEY_VAULTS_SECRET=YOUR_SECURE_BASE64_32BYTE_KEY # 生成方式:openssl rand -base64 32 # —————————— PostgreSQL 连接 —————————— # DATABASE_URL=postgresql://postgres:CHANGEME_POSTGRES_PASS@postgresql:5432/lobe # —————————— NextAuth 鉴权配置 —————————— # NEXT_AUTH_SECRET=ANOTHER_SECURE_RANDOM_STRING NEXT_AUTH_SSO_PROVIDERS=logto NEXTAUTH_URL=https://chat.example.com/api/auth # —————————— Logto 应用凭证 —————————— # AUTH_LOGTO_ID=your-logto-app-id AUTH_LOGTO_SECRET=your-logto-app-secret AUTH_LOGTO_ISSUER=https://auth-api.example.com/oidc # —————————— MinIO/S3 存储配置 —————————— # S3_ACCESS_KEY_ID=generated-access-key S3_SECRET_ACCESS_KEY=generated-secret-key S3_ENDPOINT=https://s3-api.example.com S3_BUCKET=lobe S3_PUBLIC_DOMAIN=https://s3-api.example.com S3_ENABLE_PATH_STYLE=1 # —————————— 可选:模型接入配置 —————————— # # OPENAI_API_KEY=sk-xxxxxx # OPENAI_PROXY_URL=https://api.openai.com/v1 # —————————— Ollama Embedding 支持(知识库必需) —————————— # OLLAMA_PROXY_URL=http://host.docker.internal:11434 DEFAULT_FILES_CONFIG="embedding_model=ollama/bge-m3:latest"🔑关键参数解释:
| 参数 | 说明 |
|---|---|
KEY_VAULTS_SECRET | 用于加密数据库中存储的敏感信息(如 API Key) |
NEXT_AUTH_SECRET | NextAuth 会话签名密钥,必须高强度随机生成 |
S3_ENABLE_PATH_STYLE=1 | 自建 MinIO 必须开启路径风格访问 |
DEFAULT_FILES_CONFIG | 启用 Ollama 的 bge-m3 模型进行文档嵌入 |
💡 提示:
host.docker.internal在 Linux 上可能不可用,建议改为宿主机真实 IP 或额外配置网络别名。
启动容器并验证运行状态
拉取镜像并启动服务
docker compose up -d该命令将自动拉取所需镜像并后台运行所有服务。
查看日志确认启动情况
docker logs -f lobe-chat等待输出出现类似以下内容即表示启动成功:
[Next.js] Server ready on http://localhost:3210此时可通过内网地址http://<server-ip>:3210访问测试页面。
⏳ 注意:首次启动时 Logto 和 PostgreSQL 初始化可能需要 1~2 分钟,请耐心等待。
OpenResty + 1Panel 配置 HTTPS
使用 1Panel 添加反向代理网站
- 登录 1Panel 控制台;
- 进入「网站」→「创建网站」;
- 依次为以下五个域名创建反向代理站点:
| 域名 | 代理目标 |
|---|---|
chat.example.com | http://127.0.0.1:3210 |
auth-api.example.com | http://127.0.0.1:3001 |
auth-ui.example.com | http://127.0.0.1:3002 |
s3-api.example.com | http://127.0.0.1:9000 |
s3-ui.example.com | http://127.0.0.1:9001 |
✅ 建议为每个站点添加备注,便于后期维护。
申请 SSL 证书
- 进入「证书」→「申请证书」;
- 选择 ACME 协议,主域名填写
chat.example.com; - 添加其余四个子域到“其他域名”列表;
- 选择 DNS 验证方式(推荐 Cloudflare 或阿里云 API);
- 开启“自动续签”。
等待证书状态变为“正常”,通常耗时 1~5 分钟。
绑定 HTTPS 并启用加密访问
返回「网站」列表,逐个点击各站点的「配置」→「HTTPS」:
- ✅ 启用 HTTPS
- 选择刚申请的通配符证书
- 强制 HTTP 跳转至 HTTPS(建议开启)
保存后即可通过https://安全访问各服务。
初始化身份认证服务(Logto)
访问 https://auth-ui.example.com 进入 Logto 管理界面。
注册首个管理员账户
首次访问需注册新用户,该用户将自动成为超级管理员。
⚠️ 注意:此账户仅用于管理,不能直接用于 LobeChat 登录!
创建 OAuth 应用
- 进入左侧菜单「应用」→「创建应用」;
- 类型选择:
Next.js (App Router); - 名称可设为
LobeChat-Frontend; - 填写以下回调地址:
| 字段 | 值 |
|---|---|
| Redirect URIs | https://chat.example.com/api/auth/callback/logto |
| Post sign-out redirect URIs | https://chat.example.com/ |
| CORS allowed origins | https://chat.example.com |
- 点击「保存」。
获取 App Credentials
在应用详情页复制以下两项:
App ID→ 填入.env中的AUTH_LOGTO_IDApp Secret→ 填入.env中的AUTH_LOGTO_SECRET
🔐 敏感信息一旦关闭页面将不再显示,请立即记录!
(可选)关闭公开注册
如需限制用户注册:
- 进入「登录体验」→「注册与登录」;
- 关闭「允许用户注册」;
- 此后只能由管理员在「用户管理」中手动添加成员。
⚠️⚠️⚠️==再次强调:管理员账户 ≠ 登录账户,必须创建普通用户才能登录 LobeChat!==⚠️⚠️⚠️
配置 MinIO 对象存储
访问 https://s3-ui.example.com,使用之前设置的MINIO_ROOT_USER和MINIO_ROOT_PASSWORD登录。
创建 Bucket
- 左侧导航进入「Buckets」→「Create Bucket」;
- 名称输入
lobe(与.env中一致); - 创建完成。
设置公共访问策略
点击刚创建的lobe桶 →「Access Policy」→「Custom」,粘贴以下 JSON 策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": ["*"] }, "Action": ["s3:GetBucketLocation"], "Resource": "arn:aws:s3:::lobe" }, { "Effect": "Allow", "Principal": { "AWS": ["*"] }, "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::lobe", "Condition": { "StringEquals": { "s3:prefix": ["files/*"] } } }, { "Effect": "Allow", "Principal": { "AWS": ["*"] }, "Action": ["s3:PutObject", "s3:DeleteObject", "s3:GetObject"], "Resource": "arn:aws:s3:::lobe/**" } ] }此策略允许客户端上传、读取和删除文件,同时限制目录遍历。
创建 Access Key
- 进入「Access Keys」→「Create access key」;
- 输入用户名(如
lobe-s3-client); - 生成后复制
Access Key和Secret Key; - 替换
.env文件中的:
S3_ACCESS_KEY_ID=XXXXXXXXXXXXXX S3_SECRET_ACCESS_KEY=YYYYYYYYYYYYYYYY重启服务并正式启用
由于我们修改了.env文件中的凭据,需重新加载容器。
docker compose down docker compose up -d等待所有服务重启完毕后,访问:
👉 https://chat.example.com
你应该能看到 LobeChat 的登录界面。点击「Continue with Logto」,使用你在 Logto 中创建的普通用户账号登录。
🎉 成功登录后,你已拥有一个功能完整的 LobeChat 数据库版实例!
功能验证与后续优化
推荐验证项
| 功能 | 验证方法 |
|---|---|
| 多端同步 | 在不同设备登录,检查会话是否同步 |
| 文件上传 | 尝试上传 PDF/Word 文档并发送给 AI |
| 知识库 | 启用插件后导入文档,提问相关内容测试召回 |
| 模型切换 | 在设置中添加 OpenAI、Ollama 等模型测试响应 |
后续建议
- 备份数据库:定期导出
./data目录中的 PostgreSQL 数据; - 启用监控:结合 Prometheus + Grafana 监控容器状态;
- 升级策略:关注 LobeHub GitHub 发布动态,及时更新镜像;
- 安全加固:禁用不必要的调试接口,设置防火墙规则。
LobeChat DB 版本是目前最适合作为团队级 AI 助手门户的开源解决方案之一。它不仅提供了优雅的 UI 和强大的插件生态,更通过标准化的服务架构实现了真正的可维护性与可扩展性。
这套部署方案已经在多个实际项目中稳定运行,无论是个人知识管理、团队内部助手还是轻量级客服系统,都能轻松应对。其模块化设计也让未来扩展变得非常自然——比如加入 Redis 缓存提升性能,或是集成 LDAP 实现企业级统一认证。
如果你希望获得自动化部署脚本、Kubernetes Helm Chart 或 CI/CD 流水线配置模板,欢迎加入技术交流群获取资源。
📢 若你希望获得自动化部署脚本、Kubernetes Helm Chart 或 CI/CD 流水线配置模板,欢迎加入交流群获取资源。
本文首发于我的技术博客:
🔗 https://blog.zxilly.org/posts/lobechat-db-deploy-2025
同步发布于 CSDN、掘金、知乎专栏。
💬 技术交流群:827193325(LobeChat 部署与定制)
🔐 入群口令:Lobe2025
欢迎分享、点赞、收藏,也欢迎 PR 补充更多部署模式!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考