参考
存储(S3 / R2 / MinIO)
配置附件、知识文档和资源的存储位置。
AskAIs 智能客服系统 可对接任意兼容 S3 的对象存储。只需修改几个 .env变量即可切换服务商 —— 代码完全相同。以下涵盖 AWS S3、Cloudflare R2 以及自托管的 MinIO。
会存储哪些内容
- 访客或客服上传的消息附件(图片、视频、PDF 等)
- 知识库源文档(用于 RAG 入库)
- 对象 key 模板:
tenants/{tenantId}/yyyy/mm/{uuid}.{ext}
Cloudflare R2(推荐用于自托管)
R2 出口流量零费用 —— 当你需要向大量用户分发附件时尤为理想。在 R2 控制台 →Manage R2 API Tokens 中获取你的 access key 与 secret。
# .env
S3_ENDPOINT="https://<account-id>.r2.cloudflarestorage.com"
S3_REGION="auto"
S3_BUCKET="singlink"
S3_ACCESS_KEY="..."
S3_SECRET_KEY="..."
# Public URL for the bucket (custom domain pointing to R2 public access)
S3_PUBLIC_URL="https://files.acme.com"要获得公开 URL,请在存储桶上启用 Public access 并绑定自定义子域名(R2 控制台 → 存储桶 → Settings → Custom Domains)。
AWS S3
S3_ENDPOINT="" # leave empty for AWS
S3_REGION="us-east-1"
S3_BUCKET="singlink-prod"
S3_ACCESS_KEY="AKIA..."
S3_SECRET_KEY="..."
S3_PUBLIC_URL="https://singlink-prod.s3.amazonaws.com"存储桶策略必须允许该 access key 执行 s3:PutObject,若希望支持免鉴权下载,还需 允许公开读取。否则我们会在每次读取时回退到预签名的 GET URL。
MinIO(本地开发默认)
S3_ENDPOINT="http://localhost:9002"
S3_REGION="us-east-1"
S3_BUCKET="singlink"
S3_ACCESS_KEY="minio"
S3_SECRET_KEY="minio_dev_password"
S3_PUBLIC_URL="http://localhost:9002/singlink"Backblaze B2(廉价的 S3 替代方案)
S3_ENDPOINT="https://s3.us-west-001.backblazeb2.com"
S3_REGION="us-west-001"
S3_BUCKET="singlink"
S3_ACCESS_KEY="..."
S3_SECRET_KEY="..."注意事项
- CORS —— 存储桶需要允许来自你挂件所在主机的
POST请求。 多数服务商默认使用通配符;对于 R2,请通过 API 显式设置 CORS 规则。 - 区域
auto仅对 R2 有效。AWS / B2 需要真实的区域名称。 - S3_PUBLIC_URL —— 若为空,SDK 会根据
S3_ENDPOINT + bucket构造 URL。在 CDN 或自定义域名后面时请显式设置。