English | 简体中文
在一台服务器上一键自托管 LobeHub——现代、开源的多模型 AI 对话平台,并通过你自己的域名 (Cloudflare Tunnel)安全公开访问。数据、密钥、域名全在你自己手里。
- 多模型一站接入:OpenAI、Anthropic、Google/Gemini、DeepSeek、OpenRouter… 一个界面随时切换。
- 数据持久、跨设备同步:会话/用户/配置存在 PostgreSQL,不是浏览器本地——换设备登录即同步。
- 知识库 / RAG:PGVector 向量检索,上传文档即可基于内容问答。
- 附件与图片:S3 兼容存储(RustFS)+ 浏览器预签名直传,大文件不拖慢对话。
- 联网搜索:内置 SearXNG(注重隐私的元搜索)。
- 多用户 + 准入控制:邮箱白名单注册;服务端「共享 key 池」+ 用户「个人 BYOK」。
- 自托管、可迁移:复制
/opt/lobehub+.env+ 备份即可换机重建。
浏览器(HTTPS)
-> chat.<域名> -> Cloudflare Tunnel -> 127.0.0.1:3210 LobeHub
-> s3.<域名> -> Cloudflare Tunnel -> 127.0.0.1:9000 RustFS S3(文件上传)
LobeHub(服务器本机)
-> 127.0.0.1:15432 PostgreSQL / PGVector
-> 127.0.0.1:16379 Redis
-> 127.0.0.1:9000 RustFS
-> 127.0.0.1:18080 SearXNG
-> .env 中配置的模型供应商 API
LobeHub 容器使用 host network,使 S3_ENDPOINT 同时对 LobeHub 服务端和经隧道访问的浏览器可达;
其余持久化服务只绑定 127.0.0.1,不开任何公网端口——Cloudflare Tunnel 是唯一入口。
| 组件 | 作用 |
|---|---|
| LobeHub | 前端 UI + 服务端/API 主应用 |
| PostgreSQL / PGVector | 持久化会话、用户、配置;向量检索支撑知识库 |
| Redis | 缓存、会话、后台任务状态 |
| RustFS(S3 兼容) | 上传文件/图片的对象存储,支持浏览器直传 |
| SearXNG | 联网搜索(注重隐私的元搜索) |
| Cloudflare Tunnel(可选) | 公开访问:不开端口、TLS 在边缘、首屏更快 |
- 你想替换复杂 AI 平台,保留一个现代、可持久化的前端,给自己或小团队使用。
- 你希望通过自己的域名 + 白名单(
AUTH_ALLOWED_EMAILS)控制谁能注册登录。 - 你希望接入 OpenAI、Anthropic、Google/Gemini、DeepSeek、OpenRouter 等供应商。
- 你希望将来能把
/opt/lobehub、.env和备份复制到另一台服务器恢复。
不适合:需要商业计费、复杂团队权限、API 网关计量或工作流应用平台的场景。那些需求 应另行选 LibreChat、LiteLLM 或 Dify。
在一台新的 Ubuntu 22.04/24.04 VPS 上:
git clone https://github.com/Fateorcloud/volans-lobehub.git
cd volans-lobehub
cp .env.example .env
nano .env
sudo bash deploy.sh fresh --yes| 变量 | 作用 | 生成 |
|---|---|---|
KEY_VAULTS_SECRET |
加密用户存在服务端的 API key(用户密钥保险箱) | openssl rand -base64 32 |
AUTH_SECRET |
给登录会话签名、防伪造 | openssl rand -base64 32 |
POSTGRES_PASSWORD |
PostgreSQL 数据库密码 | openssl rand -hex 32 |
RUSTFS_ACCESS_KEY |
对象存储(文件/图片)访问账号 | openssl rand -hex 16 |
RUSTFS_SECRET_KEY |
对象存储密钥 | openssl rand -hex 32 |
SEARXNG_SECRET |
内置搜索服务的签名密钥 | openssl rand -hex 32 |
一次性生成全部,把输出对应填进 .env:
for v in KEY_VAULTS_SECRET AUTH_SECRET; do echo "$v=$(openssl rand -base64 32)"; done
for v in POSTGRES_PASSWORD RUSTFS_SECRET_KEY SEARXNG_SECRET; do echo "$v=$(openssl rand -hex 32)"; done
echo "RUSTFS_ACCESS_KEY=$(openssl rand -hex 16)"SSH 端口:部署会启用 UFW 防火墙并自动放行 sshd 当前监听的端口;若你的 SSH 跑在非标准端口,把
.env的SSH_PORT也设成它做双保险(默认 22)。
模型供应商 key 按需填写(不填也能启动,只是不能真正对话),未使用的留空:
OPENAI_API_KEY / ANTHROPIC_API_KEY / GOOGLE_API_KEY / DEEPSEEK_API_KEY / OPENROUTER_API_KEY ...
这些是「服务端共享池」:所有登录用户可用;用户也可在设置里填自己的私有 key(填了用自己的)。
把平台发布到你自己的域名:不开公网端口、TLS 在 Cloudflare 边缘完成、首屏更快。App 走
chat.<域名>、文件存储走 s3.<域名>,用 AUTH_ALLOWED_EMAILS 白名单控制谁能注册。
在 .env 配好隧道与公开域名后重启服务即可:
COMPOSE_PROFILES=tunnel
CF_TUNNEL_TOKEN=<你的隧道 token>
APP_URL=https://chat.<域名>
S3_ENDPOINT=https://s3.<域名>
S3_PUBLIC_DOMAIN=https://s3.<域名>
RUSTFS_CORS_ALLOWED_ORIGINS=https://chat.<域名>
AUTH_ALLOWED_EMAILS=you@example.com,teammate@example.com建隧道、加两个主机名(回源填 HTTP:http://127.0.0.1:3210、http://127.0.0.1:9000)、
启动、验证、加人/换 key 的完整步骤见
公开部署:Cloudflare Tunnel + 域名。配置完成后浏览器打开
https://chat.<域名> 即可使用。
sudo bash deploy.sh verify
sudo bash deploy.sh backup
sudo bash deploy.sh repair --yes服务目录:
/opt/lobehub
常用检查:
cd /opt/lobehub
docker compose ps
docker compose logs -f lobehub
docker compose logs -f lobe-rustfs仅调试用(可选):域名还没配好前,可临时用 SSH 隧道访问
ssh -L 3210:127.0.0.1:3210 <server-alias>,再打开http://127.0.0.1:3210。
手动备份:
sudo bash deploy.sh backup备份文件默认写入:
/opt/lobehub/backup/postgres_lobechat_YYYY-MM-DD_HHMMSS.sql.gz
/opt/lobehub/backup/rustfs_data_YYYY-MM-DD_HHMMSS.tar.gz
迁移到另一台服务器时,复制:
/opt/lobehub/.env
PostgreSQL 备份
RustFS 备份
不要把这些文件提交到 Git。
bash deploy.sh security-scan
git status --short不要提交真实 .env、API key、服务器 IP、SSH key、数据库目录、RustFS 日志或备份包。