mcpField
M
managed-db-services

managed-db-services

github.com/digitalocean-labs数据与数据库3880 次安装3 天前更新
代码仓库

关于 managed-db-services

面向将应用部署到 DigitalOcean App Platform 的开发者,提供 MySQL、MongoDB、Valkey、Kafka 和 OpenSearch 托管数据库的配置指导。内容涵盖应用规格、连接变量、可信来源限制及常见故障排查。

主要功能

  1. 01配置五种托管数据库引擎
  2. 02编写 App Platform 数据库规格
  3. 03设置连接变量与凭据
  4. 04说明可信来源和 VPC 限制
  5. 05提供连接故障排查指引

适用场景

  1. 01为 App Platform 应用配置 MySQL
  2. 02部署 MongoDB 或 Valkey 数据库
  3. 03配置 Kafka 或 OpenSearch 连接

安装

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

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

安装后在 Claude Code 中输入/managed-db-services确认已加载。

包含的文件

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

README.md
reference/
kafka.md
mongodb.md
mysql.md
opensearch.md
valkey.md

详细介绍

托管数据库服务技能

为 App Platform 应用配置 DigitalOcean 托管 MySQL、MongoDB、Valkey(Redis)、Kafka 和 OpenSearch。

快速决策

Which database engine?
├── PostgreSQL    → Use the postgres skill instead
├── MySQL         → See reference/mysql.md
├── MongoDB       → See reference/mongodb.md
├── Valkey/Redis  → See reference/valkey.md
├── Kafka         → See reference/kafka.md (⚠️ trusted sources limitations)
└── OpenSearch    → See reference/opensearch.md

提示:对于复杂的多步骤部署,请使用 planner 技能。若要查看所有技能的概览,请参阅 根目录 SKILL.md。


关键限制

限制影响
开发数据库仅支持 PostgreSQL——MySQL/MongoDB/Kafka/OpenSearch 需要 production: true
构建时访问数据库❌ 受信任来源会阻止构建阶段访问——请使用 PRE_DEPLOY 任务执行迁移
Kafka 受信任来源仅支持基于 IP 的规则(ip_addr:);不支持基于应用的规则(app:)
OpenSearch 日志记录❌ 启用受信任来源时不受支持
MongoDB db_name在应用规范中不能包含大写字母

受信任来源速查

网络模式规则类型支持的引擎
公共网络app:$APP_IDMySQL、MongoDB、Valkey、OpenSearch
公共网络app:$APP_ID❌ Kafka(不支持)
VPCip_addr:<vpc-cidr>所有引擎
VPCapp:$APP_ID❌ 无(应用规则仅允许公共 IP)

VPC 部署:使用 VPC CIDR(ip_addr:10.126.0.0/20),比逐个配置应用 IP 更简单。

完整配置说明请参阅 networking 技能 - 受信任来源。


可绑定变量(所有引擎)

databases:
  - name: db                      # Component name (used in ${db.VAR_NAME})
    engine: <ENGINE>              # MYSQL, MONGODB, REDIS, KAFKA, OPENSEARCH
    production: true              # REQUIRED for bindable variables
    cluster_name: my-cluster      # Must match existing cluster name
    db_name: myappdb              # Database within cluster (where applicable)
    db_user: myappuser            # User created via doctl
变量描述
${db.DATABASE_URL}完整连接字符串(仅限公共主机名!)
${db.HOSTNAME}数据库主机(仅限公共主机名!)
${db.PORT}数据库端口
${db.USERNAME}数据库用户
${db.PASSWORD}数据库密码(自动填充)
${db.DATABASE}数据库名称
${db.CA_CERT}TLS CA 证书

VPC 说明:即使启用了 VPC,可绑定变量也会返回公共主机名。对于私有端点,请添加单独的 *_PRIVATE_* 环境变量,并将私有主机名硬编码其中。


引擎速查

引擎应用规范端口协议关键说明
MySQLMYSQL25060mysql://...?ssl-mode=REQUIRED完整指南
MongoDBMONGODB27017mongodb+srv://...?tls=true&authSource=admin完整指南
ValkeyREDIS25061rediss://(使用 SSL)完整指南
KafkaKAFKA9093SASL/SCRAM-SHA-256完整指南
OpenSearchOPENSEARCH25060https://,使用基本身份验证完整指南

快速开始:MySQL

# 1. Create cluster + user
doctl databases create my-mysql --engine mysql --region nyc3 --size db-s-1vcpu-2gb --version 8
CLUSTER_ID=$(doctl databases list --format ID,Name --no-header | grep my-mysql | awk '{print $1}')
doctl databases db create $CLUSTER_ID myappdb
doctl databases user create $CLUSTER_ID myappuser

# 2. Add to trusted sources
APP_ID=$(doctl apps list --format ID,Spec.Name --no-header | grep my-app | awk '{print $1}')
doctl databases firewalls append $CLUSTER_ID --rule app:$APP_ID

# 3. Reference in app spec
databases:
  - name: db
    engine: MYSQL
    production: true
    cluster_name: my-mysql
    db_name: myappdb
    db_user: myappuser

services:
  - name: api
    envs:
      - key: DATABASE_URL
        scope: RUN_TIME
        value: ${db.DATABASE_URL}

完整指南:请参阅 mysql.md


快速开始:MongoDB

doctl databases create my-mongo --engine mongodb --region nyc3 --size db-s-1vcpu-2gb --version 7
CLUSTER_ID=$(doctl databases list --format ID,Name --no-header | grep my-mongo | awk '{print $1}')
doctl databases user create $CLUSTER_ID myappuser
doctl databases firewalls append $CLUSTER_ID --rule app:$APP_ID
databases:
  - name: db
    engine: MONGODB
    production: true
    cluster_name: my-mongo
    db_user: myappuser

services:
  - name: api
    envs:
      - key: MONGODB_URI
        scope: RUN_TIME
        value: ${db.DATABASE_URL}

完整指南:请参阅 mongodb.md


快速开始:Valkey

doctl databases create my-valkey --engine redis --region nyc3 --size db-s-1vcpu-2gb --version 7
CLUSTER_ID=$(doctl databases list --format ID,Name --no-header | grep my-valkey | awk '{print $1}')
doctl databases firewalls append $CLUSTER_ID --rule app:$APP_ID
databases:
  - name: cache
    engine: REDIS
    production: true
    cluster_name: my-valkey

services:
  - name: api
    envs:
      - key: REDIS_URL
        scope: RUN_TIME
        value: ${cache.DATABASE_URL}

完整指南:请参阅 valkey.md


快速开始:Kafka

警告:Kafka 不支持 app:$APP_ID 受信任来源规则。请使用 VPC 和基于 IP 的规则,或禁用受信任来源。

doctl databases create my-kafka --engine kafka --region nyc3 --size db-s-2vcpu-4gb --version 3.7
CLUSTER_ID=$(doctl databases list --format ID,Name --no-header | grep my-kafka | awk '{print $1}')
doctl databases topics create $CLUSTER_ID my-topic --partition-count 3 --replication-factor 2
databases:
  - name: kafka
    engine: KAFKA
    production: true
    cluster_name: my-kafka

services:
  - name: api
    envs:
      - key: KAFKA_BROKER
        scope: RUN_TIME
        value: ${kafka.HOSTNAME}:${kafka.PORT}
      - key: KAFKA_USERNAME
        scope: RUN_TIME
        value: ${kafka.USERNAME}
      - key: KAFKA_PASSWORD
        scope: RUN_TIME
        value: ${kafka.PASSWORD}
      - key: KAFKA_CA_CERT
        scope: RUN_TIME
        value: ${kafka.CA_CERT}

完整指南:请参阅 kafka.md


快速开始:OpenSearch

警告:向 OpenSearch 记录日志需要禁用受信任来源。

doctl databases create my-opensearch --engine opensearch --region nyc3 --size db-s-2vcpu-4gb --version 2
CLUSTER_ID=$(doctl databases list --format ID,Name --no-header | grep my-opensearch | awk '{print $1}')
doctl databases user create $CLUSTER_ID myappuser
doctl databases firewalls append $CLUSTER_ID --rule app:$APP_ID
databases:
  - name: search
    engine: OPENSEARCH
    production: true
    cluster_name: my-opensearch
    db_user: myappuser

services:
  - name: api
    envs:
      - key: OPENSEARCH_URL
        scope: RUN_TIME
        value: https://${search.USERNAME}:${search.PASSWORD}@${search.HOSTNAME}:${search.PORT}

完整指南:请参阅 opensearch.md


常用 doctl 命令

# List all database clusters
doctl databases list

# Get cluster details
doctl databases get <cluster-id>

# Create user (DO manages password)
doctl databases user create <cluster-id> <username>

# List users
doctl databases user list <cluster-id>

# Create database within cluster
doctl databases db create <cluster-id> <db-name>

# Get connection details
doctl databases connection <cluster-id>

# Trusted sources (firewall)
doctl databases firewalls append <cluster-id> --rule app:<app-id>
doctl databases firewalls list <cluster-id>

快速故障排查

错误原因修复方法
"Connection refused"应用不在受信任来源中doctl databases firewalls append <cluster-id> --rule app:<app-id>
"Access denied"未设置用户权限通过 SQL 授予权限,或重新创建用户
可绑定变量为空缺少 production: true在数据库块中添加 production: true
需要 SSL连接字符串缺少 SSL添加 ?ssl-mode=REQUIRED(MySQL)、?tls=true(MongoDB),或使用 rediss://(Valkey)
Kafka 连接失败使用了 app: 规则Kafka 仅支持 ip_addr: 规则——请使用 VPC 或禁用 TS

参考文件

  • mysql.md — 连接池、用户权限、密码加密
  • mongodb.md — 用户角色、authSource 配置
  • valkey.md — 驱逐策略、SSL 协议
  • kafka.md — SASL 身份验证、SSL 证书处理、Schema Registry
  • opensearch.md — ACL、日志记录限制

何时改用 Postgres Skill

以下情况请使用 postgres skill:

  • Schema 隔离(多租户)
  • 复杂的权限管理
  • 多个应用共享一个集群
  • 连接池配置

此 Skill 适用于使用 MySQL、MongoDB、Valkey、Kafka 或 OpenSearch 的简单单数据库配置。


与其他 Skills 集成

Skill集成方式
designer在应用规范中生成 databases: 块
deployment无需额外密钥——可绑定变量会处理凭据
networkingVPC + 受信任来源配置
troubleshooting用于连接测试的调试容器

文档链接

评论

支持 Markdown