mcpField
S
spaces

spaces

github.com/digitalocean-labs云与 DevOps3891 次安装4 天前更新
代码仓库

关于 spaces

面向 DigitalOcean App Platform 应用的 Spaces 对象存储技能,适用于需要管理 S3 兼容存储的开发者。它区分 doctl 的密钥管理与 AWS CLI 的存储桶和对象操作,并提供设置脚本与操作参考。

主要功能

  1. 01创建及轮换 Spaces 密钥
  2. 02使用 AWS CLI 管理存储桶
  3. 03上传与下载对象
  4. 04配置存储桶 CORS 和日志
  5. 05启用访问日志
  6. 06提供 SDK 配置参考

适用场景

  1. 01为应用创建 Spaces 存储桶
  2. 02轮换应用的存储访问凭据
  3. 03配置存储桶 CORS 或访问日志
  4. 04查看并下载存储访问日志

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/digitalocean-labs/do-app-platform-skills --skill spaces

安装后在 Claude Code 中输入/spaces确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

README.md
reference/
access-logging.md
aws-cli-operations.md
key-management.md
sdk-configuration.md
troubleshooting.md
scripts/
_lib.sh
bootstrap_app_spaces.sh
enable_bucket_logging.sh
rotate_spaces_key.sh
view_access_logs.sh
templates/
bucket-logging.json

详细介绍

Spaces 技能

为 App Platform 应用提供兼容 S3 的对象存储。

工具分工(重要)

┌─────────────────────────────────────────────────────────────────┐
│  doctl: KEYS ONLY          │  aws CLI: EVERYTHING ELSE          │
│  • doctl spaces keys create│  • Bucket create/delete            │
│  • doctl spaces keys list  │  • Object upload/download          │
│  • doctl spaces keys delete│  • CORS, logging, lifecycle        │
└─────────────────────────────────────────────────────────────────┘

为什么? doctl 对 Spaces 的支持仅限于密钥管理。存储桶操作需要使用兼容 S3 的工具。


快速决策

┌─────────────────────────────────────────────────────────────────┐
│              What do you need to do with Spaces?                 │
└─────────────────────────────────────────────────────────────────┘
                              │
        ┌─────────────────────┼─────────────────────┐
        │                     │                     │
   Create key            Create bucket         Upload/download
   or rotate             set CORS/logging      objects
        │                     │                     │
        ▼                     ▼                     ▼
┌───────────────┐    ┌───────────────┐    ┌───────────────┐
│    doctl      │    │   aws CLI     │    │   aws CLI     │
│ spaces keys   │    │   s3api       │    │   s3 cp/sync  │
└───────────────┘    └───────────────┘    └───────────────┘

前提条件

doctl auth init          # One-time DO API auth
aws --version            # AWS CLI v2
jq --version             # JSON processor

快速开始

1. 设置环境
# Choose region matching your App Platform app (see shared/regions.yaml)
export DO_SPACES_REGION="syd1"
export DO_SPACES_ENDPOINT="https://${DO_SPACES_REGION}.digitaloceanspaces.com"
export APP_NAME="myapp"
export BUCKET="${APP_NAME}-uploads"
export DO_SPACES_KEY_NAME="${APP_NAME}-spaces-key"
2. 创建密钥(doctl)
KEY_JSON=$(doctl spaces keys create "${DO_SPACES_KEY_NAME}" --output json)
export AWS_ACCESS_KEY_ID=$(echo "$KEY_JSON" | jq -r '.[0].access_key')
export AWS_SECRET_ACCESS_KEY=$(echo "$KEY_JSON" | jq -r '.[0].secret_key')

# IMPORTANT: Secret shown only once - save it now!
3. 创建存储桶(aws CLI)
aws --endpoint-url "$DO_SPACES_ENDPOINT" s3api create-bucket --bucket "$BUCKET"
4. App 规格
services:
  - name: api
    envs:
      - key: SPACES_BUCKET
        value: myapp-uploads
      - key: SPACES_REGION
        value: ${SPACES_REGION}           # Your bucket's region
      - key: SPACES_ENDPOINT
        value: ${SPACES_ENDPOINT}         # e.g., https://syd1.digitaloceanspaces.com
      - key: SPACES_ACCESS_KEY
        scope: RUN_TIME
        type: SECRET
        value: ${SPACES_ACCESS_KEY}
      - key: SPACES_SECRET_KEY
        scope: RUN_TIME
        type: SECRET
        value: ${SPACES_SECRET_KEY}

将 SPACES_ACCESS_KEY 和 SPACES_SECRET_KEY 存储在 GitHub Secrets 中。


区域

Spaces 使用的 slug 与 App Platform 不同。请参阅 shared/regions.yaml。

App PlatformSpaces端点
nycnyc3https://nyc3.digitaloceanspaces.com
sfosfo3https://sfo3.digitaloceanspaces.com
amsams3https://ams3.digitaloceanspaces.com
lonlon1https://lon1.digitaloceanspaces.com
frafra1https://fra1.digitaloceanspaces.com
tortor1https://tor1.digitaloceanspaces.com
sgpsgp1https://sgp1.digitaloceanspaces.com
blrblr1https://blr1.digitaloceanspaces.com
sydsyd1https://syd1.digitaloceanspaces.com
atlatl1https://atl1.digitaloceanspaces.com

常见操作

doctl(仅密钥)
doctl spaces keys list
doctl spaces keys create "myapp-key" --output json
doctl spaces keys delete <key-id>
aws CLI(存储桶和对象)
EP="--endpoint-url https://syd1.digitaloceanspaces.com"

# Buckets
aws $EP s3 ls
aws $EP s3api create-bucket --bucket myapp-uploads
aws $EP s3 rb s3://myapp-uploads

# Objects
aws $EP s3 cp ./file.txt s3://myapp-uploads/path/file.txt
aws $EP s3 cp s3://myapp-uploads/path/file.txt ./file.txt
aws $EP s3 ls s3://myapp-uploads/ --recursive
aws $EP s3 sync ./local-dir/ s3://myapp-uploads/prefix/

脚本(适合 AI 使用)

脚本用途
scripts/bootstrap_app_spaces.sh完整设置:密钥、存储桶和日志记录
scripts/enable_bucket_logging.sh启用/验证日志记录(幂等)
scripts/view_access_logs.sh列出/下载访问日志
scripts/rotate_spaces_key.sh安全轮换凭据
# Set env vars then run
./scripts/bootstrap_app_spaces.sh

参考文件

文件内容
aws-cli-operations.md完整的 aws CLI 参考
key-management.md按应用配置密钥、轮换工作流
access-logging.md存储桶日志记录设置
sdk-configuration.mdNode.js、Python、Go SDK 设置
troubleshooting.md常见错误及修复方法

URL 格式

类型格式
标准https://<bucket>.<region>.digitaloceanspaces.com/<key>
CDNhttps://<bucket>.<region>.cdn.digitaloceanspaces.com/<key>

快速故障排除

错误修复方法
BucketAlreadyExists (409)使用唯一前缀:mycompany-myapp-uploads
Access Denied (403)验证密钥,并检查端点是否与存储桶区域匹配
CORS error通过 aws s3api put-bucket-cors 配置
SignatureDoesNotMatch使用 https:// 前缀,不要添加尾部斜杠

详情请参阅 troubleshooting.md。


集成

  • → designer:设计应用时包含 Spaces 环境变量
  • → deployment:凭据存储在 GitHub Secrets 中
  • → devcontainers:MinIO 提供本地 Spaces 兼容环境

评论

支持 Markdown