用途:为 DigitalOcean App Platform 应用配置 Spaces(兼容 S3 的对象存储),适用于文件上传、静态资源、CDN、访问日志等场景。
工具分工:doctl 仅用于密钥管理(spaces keys create/list/delete);存储桶与对象操作需使用 aws CLI(s3api、s3 cp/sync),因为 doctl 的 Spaces 支持仅限密钥。
前置条件:doctl auth init、AWS CLI v2、jq。
快速开始:设置 DO_SPACES_REGION、DO_SPACES_ENDPOINT、APP_NAME、BUCKET、DO_SPACES_KEY_NAME 等环境变量;用 doctl spaces keys create 创建密钥并导出 AWS_ACCESS_KEY_ID 与 AWS_SECRET_ACCESS_KEY(密钥仅显示一次,需立即保存);用 aws --endpoint-url "$DO_SPACES_ENDPOINT" s3api create-bucket --bucket "$BUCKET" 创建存储桶;在 App Spec 中配置 SPACES_BUCKET、SPACES_REGION、SPACES_ENDPOINT 及 SECRET 类型的 SPACES_ACCESS_KEY、SPACES_SECRET_KEY,密钥存入 GitHub Secrets。
区域:Spaces 使用与 App Platform 不同的区域标识,如 nyc→nyc3、sfo→sfo3、ams→ams3、lon→lon1、fra→fra1、tor→tor1、sgp→sgp1、blr→blr1、syd→syd1、atl→atl1,端点形如 https://<region>.digitaloceanspaces.com。
常用操作:aws CLI 可列出/创建/删除存储桶,上传下载对象、递归列出、sync 同步目录。
脚本:bootstrap_app_spaces.sh(完整设置)、enable_bucket_logging.sh(启用/验证日志)、view_access_logs.sh(查看访问日志)、rotate_spaces_key.sh(轮换密钥)。
URL 模式:标准 https://<bucket>.<region>.digitaloceanspaces.com/<key>;CDN https://<bucket>.<region>.cdn.digitaloceanspaces.com/<key>。
常见问题:BucketAlreadyExists 需用唯一前缀;Access Denied 检查密钥与端点区域;CORS 错误用 aws s3api put-bucket-cors 配置;SignatureDoesNotMatch 需使用 https:// 前缀且无尾斜杠。
限制:doctl 不支持存储桶操作;密钥仅在创建时显示一次;区域标识需与存储桶区域匹配。