Lobe Chat 是一款基于人工智能的对话生成工具,帮助用户快速创建和部署聊天机器人。Lobe Chat 的数据库版本支持本地化部署,使企业和个人能够完全控制数据和访问权限。本文将介绍如何在本地环境中部署 Lobe Chat 数据库版本,确保实现高效、稳定的聊天机器人应用。
方案简介 本教程通过 Docker Compose 实现快速部署,用户只需填写相应的配置信息即可完成部署属于自己的ai聊天应用。与官方教程不同,我们将使用 Auth0 作为验证服务。最终部署方案为:Lobe Chat 数据库版 + PostgreSQL + MinIO 本地部署 + Auth0
。
准备 域名 准备一个域名,并分配两个子域名:chat.mydomain.com
和 minio.mydomain.com
,并将其 DNS 解析指向部署服务器。 注意事项:
如果部署在 NAS 或家庭云环境,请自行进行内网穿透,可以使用 frp
或 Cloudflare 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=自定义密码
执行以下命令启动容器:
配置 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 Key
和Secret Key
添加到.env后点击Create即可
配置完成后,停止所有容器并重新启动:
1 2 docker compose down docker compose up -d
测试 访问 https://chat.mydomain.com
,点击左上角登录,上传 PDF
知识库,如果一切正常,则部署成功。