关于 managed-db-services
面向将应用部署到 DigitalOcean App Platform 的开发者,提供 MySQL、MongoDB、Valkey、Kafka 和 OpenSearch 托管数据库的配置指导。内容涵盖应用规格、连接变量、可信来源限制及常见故障排查。
主要功能
- 01配置五种托管数据库引擎
- 02编写 App Platform 数据库规格
- 03设置连接变量与凭据
- 04说明可信来源和 VPC 限制
- 05提供连接故障排查指引
适用场景
- 01为 App Platform 应用配置 MySQL
- 02部署 MongoDB 或 Valkey 数据库
- 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.mdreference/kafka.mdmongodb.mdmysql.mdopensearch.mdvalkey.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_ID | MySQL、MongoDB、Valkey、OpenSearch |
| 公共网络 | app:$APP_ID | ❌ Kafka(不支持) |
| VPC | ip_addr:<vpc-cidr> | 所有引擎 |
| VPC | app:$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_*环境变量,并将私有主机名硬编码其中。
引擎速查
| 引擎 | 应用规范 | 端口 | 协议 | 关键说明 |
|---|---|---|---|---|
| MySQL | MYSQL | 25060 | mysql://...?ssl-mode=REQUIRED | 完整指南 |
| MongoDB | MONGODB | 27017 | mongodb+srv://...?tls=true&authSource=admin | 完整指南 |
| Valkey | REDIS | 25061 | rediss://(使用 SSL) | 完整指南 |
| Kafka | KAFKA | 9093 | SASL/SCRAM-SHA-256 | 完整指南 |
| OpenSearch | OPENSEARCH | 25060 | https://,使用基本身份验证 | 完整指南 |
快速开始: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 | 无需额外密钥——可绑定变量会处理凭据 |
| networking | VPC + 受信任来源配置 |
| troubleshooting | 用于连接测试的调试容器 |