自建 LobeHub:多人共用的 AI 对话平台,接入自己的模型 API
用 Zenavo 的模板把 LobeHub 连同 PostgreSQL、Redis 和 RustFS 文件存储部署到自己的服务器上,绑定两个域名,注册后限制注册邮箱,接入 OpenAI、Claude 等模型服务商,并做好备份和升级。
本文亦提供 English、繁體中文、日本語、Español 和 Bahasa Indonesia。
LobeHub(原 LobeChat)是一个开源的 AI 对话平台:支持 OpenAI、Anthropic、Google、DeepSeek 等几十家模型服务商,有多用户账号、对话历史、文件上传、知识库和智能体。界面完整,适合给团队或家人搭一个共用的 AI 入口。
服务端版本需要数据库和文件存储,自己从零搭建要配不少东西。Zenavo 的 LobeHub 模板把这些都打包好了,这篇文章从部署走到备份。如果只想用单个容器和 1 个域名搭一个更轻量的自建聊天界面,也可以看 Open WebUI。
服务器、Zenavo 平台和模型服务商的 API 分别计费;LobeHub 本身不提供模型,对话会发给你配置的服务商。
模板包含什么
打开 LobeHub 模板,部署后项目里会有四个服务:
| 服务 | 作用 |
|---|---|
| lobehub | 应用本身,镜像 lobehub/lobehub:2.3.3,HTTP 端口 3210 |
| postgresql | 账号、对话、设置和加密保存的 API Key,带全文搜索扩展(ParadeDB,PostgreSQL 17) |
| redis | 缓存和会话 |
| rustfs | 兼容 S3 的文件存储,保存上传的图片和文件;端口 9000 是 S3 接口,9001 是管理控制台 |
模板建议预留 2 GB 内存。数据库密码、登录加密密钥(AUTH_SECRET)和 API Key 的加密密钥(KEY_VAULTS_SECRET)都在部署时自动生成。
准备两个域名
LobeHub 需要两个公开地址:
- 应用网址,例如
https://chat.example.com,用来打开 LobeHub; - 文件存储网址,例如
https://files.example.com,浏览器上传和查看图片时直接访问它。
先在 DNS 为这两个子域名添加指向服务器的 A 记录。然后在 Zenavo 中连接一台 Linux 服务器,打开模板,填写这两个网址(不要以斜杠结尾),选择服务器并部署。
绑定域名
部署后分别绑定:
- 在 lobehub 服务的 网络 页,为
3210端口绑定chat.example.com; - 在 rustfs 服务的 网络 页,为
9000端口绑定files.example.com。
域名必须和部署时填写的一致。等 HTTPS 生效后打开 https://chat.example.com。步骤见域名文档。
9001 是 RustFS 的管理控制台,不需要也不建议绑定公开域名。
注册账号,然后限制注册
打开应用,用邮箱和密码注册第一个账号。
模板默认允许任何人注册。如果这是团队或家人内部使用,在 lobehub 服务的 变量 中添加允许注册的邮箱或域名,保存后重启:
AUTH_ALLOWED_EMAILS=example.com,friend@gmail.com
可以填完整邮箱,也可以只填域名,用逗号分隔。之后不在名单里的邮箱无法注册。
需要邮箱验证或找回密码时,再配置 SMTP:
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=noreply@example.com
SMTP_PASS=你的 SMTP 密码
AUTH_EMAIL_VERIFICATION=1
使用 465 端口时把 SMTP_SECURE 改为 true。不配置 SMTP 也能正常注册和登录,只是无法发送验证和重置密码的邮件。
接入模型
有两种方式,可以同时使用。
每个人填自己的 Key。 登录后打开 设置 → AI 服务商,选择服务商,填入 API Key,必要时填写代理地址,再点检查。Key 用 KEY_VAULTS_SECRET 加密后存进数据库,其他用户看不到。
管理员统一提供。 在 lobehub 服务的 变量 中设置服务商的 Key,所有用户都能直接使用,不用自己填:
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
DEEPSEEK_API_KEY=sk-...
兼容 OpenAI 接口的服务商或网关,可以用 OPENAI_PROXY_URL 改地址,例如指向你自建的 New API、Magpie 或 LiteLLM 网关 https://api.example.com/v1,再用网关给 LobeHub 单独发一把有额度限制的密钥。想给 LobeHub 加上免费的实时联网搜索,还可以在同一项目里添加自建的 SearXNG 元搜索引擎;想把个人助手接进 Telegram 或 Discord,可搭配 OpenClaw。
统一提供的 Key 会被所有能登录的人使用、消耗你的额度。 设置之前,先按上一节限制注册。
关于上传的文件
上传的图片和文件保存在 rustfs 的 lobe 存储桶里。模板把这个桶设成了公开可读,这样浏览器可以直接显示图片:知道文件地址的人不需要登录就能打开它。地址里带有随机路径,不会被列出或搜索到,但不要上传你不能接受被链接打开的敏感文件。
发给模型的图片会转成 base64 直接放在请求里(模板设置了 LLM_VISION_IMAGE_USE_BASE64=1),所以模型服务商不需要能访问你的文件域名。
备份
需要备份的有两部分:
- postgresql:账号、对话、设置和加密的 Key 都在这里。在它的 备份与恢复 中可以随时备份,不用停机,也可以设置自动备份。
- rustfs:上传的文件。它是数据卷备份,要求项目处于停止状态,适合在维护窗口进行。
还有一样东西要单独保存:lobehub 服务变量里的 KEY_VAULTS_SECRET。把数据库恢复到新的部署时,必须用同一个值,否则保存在数据库里的 API Key 无法解密。部署后不要修改它。
备份只有在恢复并核对过之后才算可靠。重要数据请再下载一份备份自行保存。
升级
模板固定了 lobehub/lobehub:2.3.3。升级前先读 LobeHub 的发行说明,备份 postgresql,再在 lobehub 服务 设置 的 来源 中把镜像标签改成新版本并部署。数据库结构会在启动时自动迁移,所以升级前一定先备份。
常见问题
打开页面后登录跳转出错?
检查 lobehub 绑定的域名是否与部署时填写的应用网址完全一致,包括 https://,且结尾没有斜杠。改过域名的话,在 lobehub 服务的 变量 里把 APP_URL(文件存储地址是 S3_ENDPOINT)改成新地址,再重启。
上传图片失败?
多半是 files.example.com 没有绑定到 rustfs 的 9000 端口,或者 HTTPS 证书还没生效。在浏览器直接打开这个域名,能连上(即使显示错误信息)说明绑定正确。
AI 回复为空或报错?
先在 设置 → AI 服务商 里点检查,确认 Key 和模型可用。使用第三方代理时,留意地址是否需要以 /v1 结尾。
需要多大的服务器? 模板建议给 LobeHub 预留 2 GB 内存,加上 PostgreSQL、Redis 和 RustFS,建议用 4 GB 内存以上的服务器。模型推理在服务商那边进行,不占用你的服务器 CPU。
从 LobeHub 模板开始:准备好两个域名,部署后先限制注册,再接入模型。
这是 coding agent 读到的内容,地址是 https://zenavo.app/zh-CN/blog/self-host-lobehub.md。
无法加载 Markdown,请直接打开: https://zenavo.app/zh-CN/blog/self-host-lobehub.md