在已有minio和logto的环境配置lobechat db

如果要完整部署:

独立部署minio和logto

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

图片[1]-在已有minio和logto的环境配置lobechat db-THsInk
图片[2]-在已有minio和logto的环境配置lobechat db-THsInk

填入.env文件的S3_SECRET_ACCESS_KEY和S3_ACCESS_KEY_ID

解析lobe-s3-api.example.com到桶ip

docker compose up -d
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!无需注册,过短或乱码评论会被屏蔽。
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容