Back to Lobehub

通过 Docker Compose 部署 LobeHub

docs/self-hosting/platform/docker-compose.zh-CN.mdx

2.1.5614.4 KB
Original Source

使用 Docker Compose 部署 LobeHub

<div style={{display:"flex", gap: 4}}> [![][docker-release-shield]][docker-release-link]

</div>

快速启动

<Callout type="info"> **系统兼容性说明**
  • 支持 Unix 环境(Linux/macOS)的一键部署

  • Windows 用户需通过 WSL 2 运行

  • 一键启动脚本为首次部署专用,非首次部署请参考 自定义部署 章节

  • 端口占用检查:确保 321090009001 端口可用

    </Callout>

执行以下命令初始化部署环境,目录 lobehub 将用于存放你的配置文件和后续的数据库文件。

sh
mkdir lobehub && cd lobehub

获取并执行部署脚本:

sh
bash <(curl -fsSL https://lobe.li/setup.sh) -l zh_CN

脚本支持以下部署模式,请根据你的需求选择相应的模式,并继续阅读文档的剩余部分。

  • 本地模式(默认):仅能在本地访问,不支持局域网 / 公网访问,适用于初次体验;
  • 端口模式:支持局域网 / 公网的 http 访问,适用于无域名或内部办公场景使用;
  • 域名模式:支持局域网 / 公网在使用反向代理下的 http/https 访问,适用于个人或团队日常使用;
<Callout type="info"> 在脚本的选项提示 `(选项1/选项2)[选项1]` 中:`(选项1 / 选项2)` 代表可以选择的选项,`[选项1]`代表默认选项,直接回车即可选择默认选项。 </Callout>

本地模式

<Steps> ### 在交互式脚本中完成剩余配置

持续回车采用默认配置。

查看配置生成报告

你需要在脚本运行结束后查看配置生成报告,包括各服务的访问地址和密码。

log
安全密钥生成结果如下:
LobeHub:
  - URL: http://localhost:3210
RustFS:
  - URL: http://localhost:9000
  - Username: admin
  - Password: 8c82ea41

启动 Docker

sh
docker compose up -d

检查日志

sh
docker logs -f lobehub

如果你在容器中看到了以下日志,则说明已经启动成功:

log
[Database] Start to migration...
✅ database migration pass.
-------------------------------------
  ▲ Next.js 16.x.x
  - Local:        http://localhost:3210
  - Network:      http://0.0.0.0:3210

 ✓ Starting...
 ✓ Ready in 95ms

访问应用

通过 http://localhost:3210 访问你的 LobeHub 服务。 </Steps>

端口模式

<Steps> ### 在交互式脚本中完成剩余配置

在端口模式中,你需要根据脚本提示完成:

  • 服务器 IP 地址设置:以便局域网 / 公网访问。
  • 安全密钥重新生成:我们强烈建议你重新生成安全密钥,如果你缺少脚本所需的密钥生成库,我们建议你参考 自定义部署 章节对密钥进行修改。

查看配置生成报告

你需要在脚本运行结束后查看配置生成报告,包括各服务的访问地址和密码。

log
安全密钥生成结果如下:
LobeHub:
  - URL: http://your_server_ip:3210
RustFS:
  - URL: http://your_server_ip:9000
  - Username: admin
  - Password: dbac8440

启动 Docker

sh
docker compose up -d

检查日志

sh
docker logs -f lobehub

如果你在容器中看到了以下日志,则说明已经启动成功:

log
[Database] Start to migration...
✅ database migration pass.
-------------------------------------
  ▲ Next.js 16.x.x
  - Local:        http://your_server_ip:3210
  - Network:      http://0.0.0.0:3210
 ✓ Starting...
 ✓ Ready in 95ms

访问应用

你可以通过 http://your_server_ip:3210 访问你的 LobeHub 服务。 </Steps>

域名模式

<Steps> ### 完成反向代理配置

在域名模式中,你需要完成反向代理配置,并确保局域网 / 公网能访问到以下服务。请使用反向代理将以下服务端口映射到域名:

域名反代端口是否必选
lobe.example.com3210必选
s3.example.com9000必选
s3-ui.example.com9001

在交互式脚本中完成剩余配置

在域名模式中,你需要根据脚本提示完成:

  • LobeHub 服务的域名设置:lobe.example.com
  • S3 服务的域名设置:s3.example.com
  • 选择访问协议:httphttps
  • 安全密钥重新生成:我们强烈建议你重新生成安全密钥,如果你缺少脚本所需的密钥生成库,我们建议你参考 自定义部署 章节对密钥进行修改。
<Callout type="tip"> **单域名部署方案** 如果只有一个域名,可以通过不同端口区分服务:
- LobeHub 服务的域名设置:`lobe.example.com:${PORT1}`
- S3 服务的域名设置:`lobe.example.com:${PORT2}`
  需在反向代理中配置对应端口的转发规则。
  **端口模式 vs 域名模式:**
- 端口模式:一键安装脚本自动使用默认端口(3210/9000/9001)
- 域名模式:可自定义端口(通过反向代理配置)
</Callout> <Callout type="warning"> 以下问题可能导致你的服务无法正常访问:
- 此处的域名配置需要与步骤`1`中的反向代理配置保持一致。

- 如果你使用 Cloudflare 的域名解析服务并开启了 `全程代理`,请使用 `https` 协议。

- 如果你使用了 HTTPS 协议,请确保你的域名证书已经正确配置,一键部署默认不支持自签发证书。
</Callout>

查看配置生成报告

你需要在脚本运行结束后查看配置生成报告,包括各服务的访问地址和密码。

log
安全密钥生成结果如下:
LobeHub:
  - URL: https://lobe.example.com
RustFS:
  - URL: https://s3.example.com
  - Username: admin
  - Password: dbac8440

启动 Docker

sh
docker compose up -d

检查日志

sh
docker logs -f lobehub

如果你在容器中看到了以下日志,则说明已经启动成功:

log
[Database] Start to migration...
✅ database migration pass.
-------------------------------------
  ▲ Next.js 16.x.x
  - Local:        https://localhost:3210
  - Network:      http://0.0.0.0:3210
  ✓ Starting...
  ✓ Ready in 95ms

访问应用

你可以通过 https://lobe.example.com 访问你的 LobeHub 服务。 </Steps>

自定义部署

该章节主要为你介绍在不同的网络环境下自定义部署 LobeHub 服务必须要修改的配置。在开始前,你可以先下载 Docker Compose 配置文件 以及 环境变量配置文件

sh
curl -O https://raw.githubusercontent.com/lobehub/lobehub/HEAD/docker-compose/deploy/docker-compose.yml
curl -O https://raw.githubusercontent.com/lobehub/lobehub/HEAD/docker-compose/deploy/.env.zh-CN.example
mv .env.zh-CN.example .env

预备知识

一般来讲,想要完整的运行 LobeHub,你需要至少拥有如下三个服务:

  • LobeHub 自身
  • 带有 PGVector 插件的 PostgreSQL 数据库
  • 支持 S3 协议的对象存储服务

这些服务可以通过自建或者在线云服务组合搭配,以满足不同层次的部署需求。本文中,我们提供了完全基于开源自建服务的 Docker Compose 配置,你可以直接使用这份配置文件来启动 LobeHub,也可以对之进行修改以适应你的需求。

我们默认使用 RustFS 作为本地 S3 对象存储服务。如需配置 SSO 登录鉴权服务,请参考 身份验证服务 文档。

<Callout type="warning"> 如果你的网络拓扑较为复杂,请先确保在你的网络环境中这些服务能够正常通讯。 </Callout>

必要配置

以下我们将介绍运行这些服务的必要配置:

  1. S3 对象存储

LobeHub 需要为 LLM 服务提供商提供文件对象的公网访问地址,因此你需要配置 S3 的 Endpoint:

<Callout type="warning"> 直接使用 `S3_ENDPOINT=http://rustfs:9000` 会导致对话内上传图片不可用(浏览器无法直接访问容器内网),但是头像上传不受影响 </Callout>
env
S3_ENDPOINT=https://s3.example.com
  1. PostgreSQL

该配置位于 docker-compose.yml 文件中,你需要配置数据库的名称和密码:

yaml
services:
  lobe:
    environment:
      - 'DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgresql:5432/${LOBE_DB_NAME}'
  1. 内部通信地址 (INTERNAL_APP_URL)
<Callout type="warning"> Docker Compose 部署时**必须配置** `INTERNAL_APP_URL`。LobeHub 的异步功能(如 AI 生图)需要容器内部发起 HTTP 请求调用自身。如果未设置 `INTERNAL_APP_URL`,系统将使用 `APP_URL` 作为回退。当 `APP_URL` 是宿主机 IP(如 `http://10.1.7.146:8080`)时,容器内部无法访问该地址,导致生图等异步功能静默失败。 </Callout>
env
INTERNAL_APP_URL=http://localhost:3210
  • APP_URL:用于浏览器 / 客户端访问、OAuth 回调、webhook 等
  • INTERNAL_APP_URL:用于容器内部服务间通信(绕过 CDN / 代理 / 宿主机网络)
<Callout type="tip"> 对于 Docker Compose 部署,推荐使用 `http://localhost:3210`(容器调用自身)或 `http://lobe:3210`(使用服务名称进行容器间通信)。 </Callout>

常见问题

数据库迁移问题

你可以使用下述指令检查日志:

sh
docker logs -f lobehub
<Callout type="tip"> 在我们官方的 Docker 镜像中,会在启动镜像前自动执行数据库 schema 的 migration,我们的官方镜像承诺「空数据库 -> 完整表」这一段自动建表的稳定性。因此我们建议你的数据库实例使用一个空表实例,进而省去手动维护表结构或者 migration 的麻烦。 </Callout>

如果你在建表的时候出现了问题,你可以尝试使用如下命令强制移除数据库容器并重新启动:

sh
docker compose down  # 停止服务
sudo rm -rf ./data   # 移除挂载的数据库数据
docker compose up -d # 重新启动

反向代理配置

在生产环境中,如需使用自定义域名和 HTTPS,需在 LobeHub 前面配置反向代理。

Nginx:

nginx
server {
    listen 443 ssl http2;
    server_name lobehub.example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://localhost:3210;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Caddy(自动通过 Let's Encrypt 处理 HTTPS):

caddyfile
lobehub.example.com {
    reverse_proxy localhost:3210
}

Traefik — 在 docker-compose.ymllobe 服务中添加标签:

yaml
labels:
  - "traefik.enable=true"
  - "traefik.http.routers.lobehub.rule=Host(`lobehub.example.com`)"
  - "traefik.http.routers.lobehub.entrypoints=websecure"
  - "traefik.http.routers.lobehub.tls.certresolver=letsencrypt"

管理命令

sh
# 查看所有服务日志
docker compose logs -f

# 查看指定服务日志
docker compose logs -f lobehub

# 重启所有服务
docker compose restart

# 重启指定服务
docker compose restart lobehub

# 停止所有服务
docker compose stop

# 更新到最新版本
docker compose pull && docker compose up -d

备份与恢复

数据库备份:

sh
docker compose exec postgresql pg_dump -U postgres lobechat > backup.sql

从备份恢复:

sh
docker compose exec -T postgresql psql -U postgres lobechat < backup.sql

文件存储(RustFS)备份:

sh
docker compose exec rustfs tar czf /tmp/backup.tar.gz /data
docker cp lobe-rustfs:/tmp/backup.tar.gz ./rustfs-backup.tar.gz

Redis — Redis 通过 AOF 自动持久化数据。手动保存:

sh
docker compose exec redis redis-cli BGSAVE

资源要求

最低配置(轻量使用):

  • CPU:2 核
  • 内存:4 GB
  • 存储:20 GB

推荐配置(生产环境):

  • CPU:4 核 +
  • 内���:8 GB+
  • 存储:50 GB+(取决于文件上传量)

对于高流量部署,建议使用托管数据库(Neon、Supabase、RDS)、Redis 集群以及 CDN 加速静态资源。

故障排查

服务无法启动

检查服务状态和日志:

sh
docker compose ps
docker compose logs [service-name]

常见原因:端口被占用(在 .env 中修改 LOBE_PORT)、磁盘空间不足、数据库连接失败。

数据库连接错误

检查 PostgreSQL 是否健康:

sh
docker compose exec postgresql pg_isready -U postgres

如果不健康,查看日志:docker compose logs postgresql

文件上传失败

检查 RustFS 服务:

sh
docker compose logs rustfs
docker compose logs rustfs-init

确认 bucket 是否已创建:docker compose exec rustfs ls /data/lobe

磁盘空间不足

检查使用情况:docker system df

清理未使用的资源(请先做好备份):

sh
docker system prune -a --volumes

配置身份验证

如需配置 SSO 登录鉴权服务(如 Casdoor、Logto 等),请参考 身份验证服务 文档。