🪣 切换到 S3 存储
本教程是由社区贡献的,不属于 Open WebUI 团队的支持范围。它仅作为如何针对特定用例自定义 Open WebUI 的演示。想要贡献?请查看贡献教程。
本指南提供了有关如何将 Open WebUI 配置中的默认 local 存储切换为 Amazon S3 的说明。
前提条件
为了学习本教程,您必须具备以下条件:
- 一个激活的 AWS 账户
- 激活的 AWS 访问密钥 (Access Key) 和私有密钥 (Secret Key)
- 在 AWS 中拥有创建和放置 S3 对象的 IAM 权限
- 系统中已安装 Docker
什么是 Amazon S3
直接引用 AWS 网站的介绍:
“Amazon S3 是一种对象存储服务,提供行业领先的可扩展性、数 据可用性、安全性和性能。您可以为一系列用例(如数据湖、网站、云原生应用、备份、存档、机器学习和分析)存储和保护任意数量的数据。Amazon S3 的设计耐用性达到 99.999999999%(11 个 9),并为全球数百万客户存储数据。”
要了解有关 S3 的更多信息,请访问:Amazon S3 官方页面
如何设置
1. 所需的环境变量
为了配置此选项,您需要收集以下环境变量:
| Open WebUI 环境变量 | 示例值 |
|---|---|
S3_ACCESS_KEY_ID | ABC123 |
S3_SECRET_ACCESS_KEY | SuperSecret |
S3_ENDPOINT_URL | https://s3.us-east-1.amazonaws.com |
S3_REGION_NAME | us-east-1 |
S3_BUCKET_NAME | my-awesome-bucket-name |
- S3_ACCESS_KEY_ID: 这是您的 AWS 账户访问密钥的标识符。您可以在创建访问密钥时从 AWS 管理控制台或 AWS CLI 获取。
- S3_SECRET_ACCESS_KEY: 这是您的 AWS 访问密钥对的机密部分。它在您在 AWS 中创建访问密钥时提供,应安全存储。
- S3_ENDPOINT_URL: 此 URL 指向您的 S3 服务端点,通常可以在 AWS 服务文档或账户设置中找到。
- S3_REGION_NAME: 这是您的 S3 存储桶所在的 AWS 区域,例如 "us-east-1"。您可以从 AWS 管理控制台的 S3 存储桶详情中识别此信息。
- S3_BUCKET_NAME: 这是您的 S3 存储桶的唯一名称,在 AWS 中创建存储桶时指定。
有关可用 S3 端点 URL 的完整列表,请参阅:Amazon S3 标准端点
在 Open WebUI 云存储配置 文档中查看所有 Cloud Storage 配置选项。
2. 运行 Open WebUI
在启动 Open WebUI 实例之前,还有一个名为 STORAGE_PROVIDER 的最终环境变量需要设置。此变量告诉 Open WebUI 您想要使用哪个提供程序。默认情况下,STORAGE_PROVIDER 为空,这意味着 Open WebUI 使用本地存储。
| 存储提供程序 | 类型 | 描述 | 默认值 |
|---|---|---|---|
local | str | 如果提供空字符串 (''),则默认为本地存储 | 是 |
s3 | str | 使用 S3 客户端库及 Amazon S3 存储中提到的相关环境变量 | 否 |
gcs | str | 使用 GCS 客户端库及 Google Cloud Storage 中提到的相关环境变量 | 否 |
要使用 Amazon S3,我们需要将 STORAGE_PROVIDER 设置为 "s3",并包含我们在步骤 1 中收集的所有环境变量(S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_ENDPOINT_URL, S3_REGION_NAME, S3_BUCKET_NAME)。
在这里,我还将 ENV 设置为 "dev",这将允许我们查看 Open WebUI 的 Swagger 文档,以便我们可以进一步测试并确认 S3 存储设置是否按预期工作。
docker run -d \
-p 3000:8080 \
-v open-webui:/app/backend/data \
-e STORAGE_PROVIDER="s3" \
-e S3_ACCESS_KEY_ID="ABC123" \
-e S3_SECRET_ACCESS_KEY="SuperSecret" \
-e S3_ENDPOINT_URL="https://s3.us-east-1.amazonaws.com" \
-e S3_REGION_NAME="us-east-1" \
-e S3_BUCKET_NAME="my-awesome-bucket-name" \
-e ENV="dev" \
--name open-webui \
ghcr.io/open-webui/open-webui:main
3. 测试设置
现在 Open WebUI 已经运行,让我们上传一个简单的 Hello, World 文本文件并测试我们的设置。

并确认我们正在从所选的 LLM 获得响应。

太棒了!看起来 Open WebUI 中的一切都按预期工作。现在让我们验证文本文件是否确实已上传并存储在指定的 S3 存储桶中。使用 AWS 管理控制台,我们可以看到 S3 存储桶中现在有一个文件。除了我们上传的文件名 (hello.txt) 之外,您还可以看到对象名称后面附加了一个唯一的 ID。这就是 Open WebUI 跟踪所有上传文件的方式。

使用 Open WebUI 的 Swagger 文档,我们可以通过 /api/v1/files/{id} 端点并传入唯一 ID (4405fabb-603e-4919-972b-2b39d6ad7f5b) 来获取与此文件相关的所有信息。
