本地部署自己的AI聊天应用:Lobe Chat数据库版完整教程


Lobe Chat 是一款基于人工智能的对话生成工具,帮助用户快速创建和部署聊天机器人。Lobe Chat 的数据库版本支持本地化部署,使企业和个人能够完全控制数据和访问权限。本文将介绍如何在本地环境中部署 Lobe Chat 数据库版本,确保实现高效、稳定的聊天机器人应用。

方案简介

本教程通过 Docker Compose 实现快速部署,用户只需填写相应的配置信息即可完成部署属于自己的ai聊天应用。与官方教程不同,我们将使用 Auth0 作为验证服务。最终部署方案为:Lobe Chat 数据库版 + PostgreSQL + MinIO 本地部署 + Auth0

准备

域名

准备一个域名,并分配两个子域名:chat.mydomain.comminio.mydomain.com,并将其 DNS 解析指向部署服务器。
注意事项:

  • 如果部署在 NAS 或家庭云环境,请自行进行内网穿透,可以使用 frpCloudflare Tunnel 等工具。
  • 如果是部署在国内,要使用国外服务提供商可能还需要准备HTTP_PROXY代理加速访问,如Clash

Auth0

1、访问Auth0注册账号并登录
2、登录后进行以下设置:

  • Dashboard -> Settings -> Environment Tag -> 设为Production -> Save
  • Dashboard -> Applications -> Create Application -> Name任填、类型任选 -> (Application) Settings -> Application URIs -> Allowed Callback URLs填写https://chat.mydomain.com/api/auth/callback/auth0 -> Save Changes

3、记录下以下信息:

  • Domain
  • Client ID
  • Client Secret

4、Dashboard -> Actions -> Triggers -> pre-user-registration -> Add Action -> Custom -> Create Action -> Name任填 -> 在Action的代码编辑页面,将代码替换为如下:

1
2
3
4
5
6
7
8
9
// 这里填写允许注册的邮箱列表
const allowList = ['[email protected]', '[email protected]'];


exports.onExecutePreUserRegistration = async (event, api) => {
if (!allowList.includes(event.user.email)) {
api.access.deny("Your email address is not in the allowList.");
}
};

5、点击Deploy -> Back to triggers -> 将刚刚部署的Action添加到流程图中间 -> Apply

开始部署

创建根目录

1
2
3
4
5
lobechat
├── db_data # 空目录
├── s3_data # 空目录
├── .env
└── docker-compose.yaml

编辑docker-compose.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
services:
minio:
image: minio/minio
container_name: lobechat-minio
ports:
- 9000:9000 # API口,即minio.mydomain.com访问端口
- 9001:9001 # 管理口
volumes:
- ./s3_data:/etc/minio/data
environment:
- MINIO_ROOT_USER=${MINIO_ROOT_USER}
- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
- MINIO_API_CORS_ALLOW_ORIGIN=${APP_URL}
restart: unless-stopped
command: >
server /etc/minio/data --address ":9000" --console-address ":9001"
deploy:
resources:
limits:
memory: 128M
reservations:
memory: 64M

db:
image: pgvector/pgvector:pg17
container_name: lobechat-db
volumes:
- ./db_data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=${DB_NAME}
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${DB_USER} -d ${DB_NAME}']
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
deploy:
resources:
limits:
memory: 128M
reservations:
memory: 64M

lobe:
image: lobehub/lobe-chat-database
container_name: lobechat
ports:
- 3210:3210 # 前端入口,即chat.mydomain.com访问端口
depends_on:
- db
environment:
- HTTP_PROXY=${HTTP_PROXY}
- HTTPS_PROXY=${HTTP_PROXY}
- DATABASE_URL=postgresql://${DB_USER}:${DB_PASSWORD}@db:5432/${DB_NAME}
- APP_URL=${APP_URL}
- KEY_VAULTS_SECRET=${KEY_VAULTS_SECRET}
- NEXT_AUTH_SECRET=${KEY_VAULTS_SECRET}
- NEXT_AUTH_SSO_PROVIDERS=auth0
- NEXTAUTH_URL=${APP_URL}/api/auth
- AUTH_AUTH0_ID=${AUTH_AUTH0_ID}
- AUTH_AUTH0_SECRET=${AUTH_AUTH0_SECRET}
- AUTH_AUTH0_ISSUER=${AUTH_AUTH0_ISSUER}
- S3_ENABLE_PATH_STYLE=1
- S3_PUBLIC_DOMAIN=${S3_PUBLIC_DOMAIN}
- S3_ENDPOINT=${S3_PUBLIC_DOMAIN}
- S3_BUCKET=${S3_BUCKET}
- S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID}
- S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY}
restart: unless-stopped
deploy:
resources:
limits:
memory: 512M
reservations:
memory: 256M

编辑.env

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
DB_NAME=lobechat
DB_USER=自定义名称
DB_PASSWORD=自定义密码


# 必填,LobeChat 域名,用于 tRPC 调用
# 请保证此域名在你的 NextAuth 鉴权服务提供商、S3 服务商的 CORS 白名单中
APP_URL=https://chat.mydomain.com


# Postgres 相关,也即 DB 必需的环境变量
# 必填,用于加密敏感信息的密钥,可以使用 openssl rand -base64 32 生成
KEY_VAULTS_SECRET=自己生成后填入


# NEXT_AUTH 相关,也即鉴权服务必需的环境变量
AUTH_AUTH0_ID=填入Auth0获取的Domain
AUTH_AUTH0_SECRET=填入Auth0获取的Client ID
AUTH_AUTH0_ISSUER=填入Auth0获取的Client Secret


# 代理相关,如果需要的话(比如使用 GitHub 作为鉴权服务提供商)
# HTTP_PROXY=http://mydomain.com:7890


# S3 相关,也即非结构化数据(文件、图片等)存储必需的环境变量
S3_ACCESS_KEY_ID=MinIO部署后获取Access Key后填入
S3_SECRET_ACCESS_KEY=MinIO部署后获取Secret Key后填入
# 必填,S3 的 Bucket
S3_BUCKET=lobechat
# 必填,S3 的 Public Domain,用于客户端通过公开连接访问非结构化数据
S3_PUBLIC_DOMAIN=https://minio.mydomain.com


MINIO_ROOT_USER=自定义名称
MINIO_ROOT_PASSWORD=自定义密码

执行以下命令启动容器:

1
docker compose up -d

配置 MinIO

启动 MinIO 后,访问 http://<IP>:9001,使用 .env 中的用户名和密码登录,登录后进行以下设置:

  • 1、Buckets -> Create Bucket -> Bucket Name填写lobechat -> Create Bucket
  • 2、将lobechat Bucket的Access Policy改为Public保存;然后再改为Custom,并在下面的文本框内删除ListBucket那个Action,保存
  • 3、Access Keys -> Create Access Key,将Access KeySecret Key添加到.env后点击Create即可

配置完成后,停止所有容器并重新启动:

1
2
docker compose down
docker compose up -d

测试

访问 https://chat.mydomain.com,点击左上角登录,上传 PDF 知识库,如果一切正常,则部署成功。