如果要完整部署:
独立部署minio和logto
独立部署minio
services:
minio:
image: minio/minio:latest
container_name: minio
environment:
MINIO_ROOT_USER: your_username # 替换为你想要的管理员用户名
MINIO_ROOT_PASSWORD: your_password # 替换为你想要的管理员密码
# MINIO_DOMAIN: your_lobe_s3_domain
expose:
- "9000" # api
- "9001" # 管理页面
volumes:
- ./data:/data # 数据持久化存储
- ./config:/root/.minio # 配置文件持久化
labels:
- "com.centurylinklabs.watchtower.enable=false"
command: server /data --console-address ":9001"
restart: unless-stopped
healthcheck:
test: ["CMD", "mc", "ready", "local"]
interval: 30s
timeout: 20s
retries: 3
networks:
default:
external: true
name: dockernetwork
独立部署logto
mkdir postgres-data
sudo chown -R 70:70 postgres-data
services:
postgres:
image: postgres:14-alpine
user: postgres
restart: always
environment:
POSTGRES_USER: logto
POSTGRES_PASSWORD: safepasswordlonglong
POSTGRES_DB: logto
volumes:
- ./postgres-data:/var/lib/postgresql/data:rw
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
logto:
image: svhd/logto:latest
container_name: logto
restart: always
expose:
- "3001" # api
- "3002" # 管理页面
environment:
TRUST_PROXY_HEADER: 1
ENDPOINT: https://logto-auth-api.example.com
ADMIN_ENDPOINT: https://logto-auth-ui.example.com
DB_URL: postgres://logto:safepasswordlonglong@postgres:5432/logto
entrypoint: ["sh", "-c", "npm run cli db seed && npm start"]
depends_on:
postgres:
condition: service_healthy
networks:
default:
external: true
name: dockernetwork
部署lobechat db
docker-compose.yml
name: lobe-chat-database
services:
postgresql:
image: pgvector/pgvector:pg16
container_name: lobe-postgres
volumes:
- './sqldata:/var/lib/postgresql/data'
environment:
- 'POSTGRES_DB=lobe'
- 'POSTGRES_PASSWORD=your_password' # 修改
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U postgres']
interval: 5s
timeout: 5s
retries: 5
restart: always
lobe:
image: lobehub/lobe-chat-database
container_name: lobe-chat-db
depends_on:
- postgresql
env_file:
- .env
restart: always
volumes:
sqldata:
driver: local
networks:
default:
external: true
name: dockernetwork
.env
# 必填,LobeChat 域名,用于 tRPC 调用
# 请保证此域名在你的 NextAuth 鉴权服务提供商、S3 服务商的 CORS 白名单中
APP_URL=https://lobe.freechatgpt.org/
# Postgres 相关,也即 DB 必需的环境变量
# 必填,用于加密敏感信息的密钥,可以使用 openssl rand -base64 32 生成
KEY_VAULTS_SECRET=生成生成生成
# 必填,Postgres 数据库连接字符串,用于连接到数据库
# 格式:postgresql://username:password@host:port/dbname,如果你的 pg 实例为 Docker 容器且位于同一 docker-compose 文件中,亦可使用容器名作为 host
DATABASE_URL=postgresql://postgres:生成生成生成@postgresql:5432/lobe
# NEXT_AUTH 相关,也即鉴权服务必需的环境变量
# 可以使用 auth0、Azure AD、GitHub、Authentik、Zitadel、Logto 等,如有其他接入诉求欢迎提 PR
# 目前支持的鉴权服务提供商请参考:https://lobehub.com/zh/docs/self-hosting/advanced/auth#next-auth
# 如果你有 ACCESS_CODE,请务必清空,我们以 NEXT_AUTH 作为唯一鉴权来源
# 必填,用于 NextAuth 的密钥,可以使用 openssl rand -base64 32 生成
NEXT_AUTH_SECRET=生成生成
# 必填,指定鉴权服务提供商,这里以 Logto 为例
NEXT_AUTH_SSO_PROVIDERS=logto
# 必填,NextAuth 的 URL,用于 NextAuth 的回调
NEXTAUTH_URL=https://lobe.example.com/api/auth
# NextAuth 鉴权服务提供商部分,以 Logto 为例
# 其他鉴权服务提供商所需的环境变量,请参考:https://lobehub.com/zh/docs/self-hosting/environment-variables/auth
AUTH_LOGTO_ID=fbdkvazh9gjjxxxxxxxxxx
AUTH_LOGTO_SECRET=WJqKBPRxxx6rfekxxxxxxxxxxx
AUTH_LOGTO_ISSUER=https://logto-auth-api.example.com/oidc
# 代理相关,如果你需要的话(比如你使用 GitHub 作为鉴权服务提供商)
# HTTP_PROXY=http://localhost:7890
# HTTPS_PROXY=http://localhost:7890
# S3 相关,也即非结构化数据(文件、图片等)存储必需的环境变量
# 这里以 MinIO 为例
# 必填,S3 的 Access Key ID,对于 MinIO 来说,直到在 MinIO UI 中手动创建之前都是无效的
S3_ACCESS_KEY_ID=YOUR_S3_ACCESS_KEY_ID
# 必填,S3 的 Secret Access Key,对于 MinIO 来说,直到在 MinIO UI 中手动创建之前都是无效的
S3_SECRET_ACCESS_KEY=YOUR_S3_SECRET_ACCESS_KEY
# 必填,S3 的 Endpoint,用于服务端/客户端连接到 S3 API
S3_ENDPOINT=https://lobe-s3-api.example.com
# 必填,S3 的 Bucket,直到在 MinIO UI 中手动创建之前都是无效的
S3_BUCKET=lobe
# 必填,S3 的 Public Domain,用于客户端通过公开连接访问非结构化数据
S3_PUBLIC_DOMAIN=https://lobe-s3-api.example.com
# 选填,S3 的 Enable Path Style
# 对于主流 S3 Cloud 服务商,一般填 0 即可;对于自部署的 MinIO,请填 1
# 请参考:https://lobehub.com/zh/docs/self-hosting/advanced/s3#s-3-enable-path-style
S3_ENABLE_PATH_STYLE=1
# 其他基础环境变量,视需求而定。注意不要有 ACCESS_CODE
# 请参考:https://lobehub.com/zh/docs/self-hosting/environment-variables/basic
# 请注意,对于服务端版本,其 API 必须支持嵌入(即 OpenAI text-embedding-3-small)模型,否则无法对上传文件进行处理,但你无需在 OPENAI_MODEL_LIST 中指定此模型
# OPENAI_API_KEY=sk-xxxx
# OPENAI_PROXY_URL=https://api.openai.com/v1
# OPENAI_MODEL_LIST=...
在logto中配置
和正常搭建一样配置。
在minio中配置
新建桶 桶名 lobe
Summary – Access Policy 选 Custom,替换为以下
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": ["*"]
},
"Action": ["s3:GetBucketLocation"],
"Resource": ["arn:aws:s3:::lobe"],
"Condition": {
"StringLike": {
"aws:Referer": ["https://lobe-s3-api.example.com/*"]
}
}
},
{
"Effect": "Allow",
"Principal": {
"AWS": ["*"]
},
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::lobe"],
"Condition": {
"StringEquals": {
"s3:prefix": ["files/*"]
},
"StringLike": {
"aws:Referer": ["https://lobe-s3-api.example.com/*"]
}
}
},
{
"Effect": "Allow",
"Principal": {
"AWS": ["*"]
},
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject"
],
"Resource": ["arn:aws:s3:::lobe/files/**"],
"Condition": {
"StringLike": {
"aws:Referer": ["https://lobe-s3-api.example.com/*"]
}
}
}
]
}
在左侧Policies新建权限,用来限制lobechat只能访问lobe桶:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::lobe/*",
"arn:aws:s3:::lobe"
]
}
]
}
在左侧Users新建一个用户并给用户分配刚才创建的权限,之后创建用户的authkey
填入.env文件的S3_SECRET_ACCESS_KEY和S3_ACCESS_KEY_ID
解析lobe-s3-api.example.com到桶ip
docker compose up -d
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容