DigitalOcean Skill
Full DigitalOcean infrastructure management — from Droplet provisioning to managed databases, Spaces, and DNS.
RULE: Show plan (resources to be created, estimated cost) before provisioning. Wait for GO.
🚧 Status: Stub — implementation pending
This reference skill has the structure but the snippet content is still being filled in
(you'll see <!-- TODO --> placeholders below). It activates and tells Claude the topic
exists, but won't yield deep snippets yet.
Want to help? Pick any TODO, write the snippet, open a PR. See CONTRIBUTING.md.
Each contribution moves the skill closer to "Ready" status.
Capabilities
Droplet Provisioning
Managed Databases
Spaces (S3-Compatible)
Load Balancers
Firewalls
DNS Management
doctl Quick Reference
# Auth
doctl auth init
# Droplets
doctl compute droplet list
doctl compute droplet create [name] \
--size s-2vcpu-4gb \
--image ubuntu-24-04-x64 \
--region blr1 \
--ssh-keys [key-fingerprint] \
--user-data-file cloud-init.yml
# Databases
doctl databases list
doctl databases connection [db-id] --user doadmin
# Spaces
doctl compute cdn list
# Use AWS CLI with DO endpoint:
aws s3 ls s3://[bucket] \
--endpoint=https://[region].digitaloceanspaces.com
# DNS
doctl compute domain list
doctl compute domain records list [domain]
doctl compute domain records create [domain] \
--record-type A --record-name @ --record-data [ip] --record-ttl 300
Terraform for DigitalOcean
terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}
provider "digitalocean" {
token = var.do_token
}
resource "digitalocean_droplet" "web" {
name = "[app]-web"
size = "s-2vcpu-4gb"
image = "ubuntu-24-04-x64"
region = "blr1"
ssh_keys = [data.digitalocean_ssh_key.default.id]
tags = ["web", "[app]"]
}
resource "digitalocean_firewall" "web" {
name = "[app]-firewall"
droplet_ids = [digitalocean_droplet.web.id]
inbound_rule {
protocol = "tcp"; port_range = "22"
source_addresses = ["0.0.0.0/0"]
}
inbound_rule {
protocol = "tcp"; port_range = "80"
source_addresses = ["0.0.0.0/0"]
}
inbound_rule {
protocol = "tcp"; port_range = "443"
source_addresses = ["0.0.0.0/0"]
}
outbound_rule {
protocol = "tcp"; port_range = "all"
destination_addresses = ["0.0.0.0/0"]
}
}
1---2name: digitalocean3description: DigitalOcean infrastructure — Droplets, managed databases, Spaces, load balancers, firewalls, DNS management4---56# DigitalOcean Skill78Full DigitalOcean infrastructure management — from Droplet provisioning to managed databases, Spaces, and DNS.910**RULE: Show plan (resources to be created, estimated cost) before provisioning. Wait for GO.**1112> **🚧 Status: Stub — implementation pending**13>14> This reference skill has the structure but the snippet content is still being filled in15> (you'll see `<!-- TODO -->` placeholders below). It activates and tells Claude the topic16> exists, but won't yield deep snippets yet.17>18> **Want to help?** Pick any TODO, write the snippet, open a PR. See [CONTRIBUTING.md](../../CONTRIBUTING.md).19> Each contribution moves the skill closer to "Ready" status.2021---2223## Capabilities2425### Droplet Provisioning26<!-- TODO: doctl droplet create, cloud-init user-data, SSH key injection -->27<!-- TODO: Droplet sizing guide (s-1vcpu-1gb through c-32 compute) -->28<!-- TODO: Private networking, reserved IPs, backups, monitoring -->2930### Managed Databases31<!-- TODO: PostgreSQL, MySQL, Redis, MongoDB, Kafka clusters -->32<!-- TODO: Connection pooling (PgBouncer), standby nodes, read replicas -->33<!-- TODO: Firewall rules, trusted sources, connection string retrieval -->34<!-- TODO: Automated backups, point-in-time restore -->3536### Spaces (S3-Compatible)37<!-- TODO: Bucket creation, CDN endpoint, CORS config -->38<!-- TODO: Access keys, public/private objects, lifecycle rules -->39<!-- TODO: AWS CLI / s3cmd with Spaces endpoint -->40<!-- TODO: Static site hosting via Spaces -->4142### Load Balancers43<!-- TODO: HTTP/HTTPS load balancer, health checks -->44<!-- TODO: SSL termination at LB, sticky sessions -->45<!-- TODO: Forwarding rules, backend Droplet targeting -->4647### Firewalls48<!-- TODO: Cloud firewall rules (inbound/outbound) -->49<!-- TODO: Apply to Droplet tags (group-based), not just individual droplets -->50<!-- TODO: Common rulesets: web server, database, internal-only -->5152### DNS Management53<!-- TODO: Domain import, A/AAAA/CNAME/MX/TXT records -->54<!-- TODO: TTL management, delegation from registrar to DO nameservers -->55<!-- TODO: Wildcard records, CAA records for SSL -->5657---5859## doctl Quick Reference6061```bash62# Auth63doctl auth init6465# Droplets66doctl compute droplet list67doctl compute droplet create [name] \68 --size s-2vcpu-4gb \69 --image ubuntu-24-04-x64 \70 --region blr1 \71 --ssh-keys [key-fingerprint] \72 --user-data-file cloud-init.yml7374# Databases75doctl databases list76doctl databases connection [db-id] --user doadmin7778# Spaces79doctl compute cdn list80# Use AWS CLI with DO endpoint:81aws s3 ls s3://[bucket] \82 --endpoint=https://[region].digitaloceanspaces.com8384# DNS85doctl compute domain list86doctl compute domain records list [domain]87doctl compute domain records create [domain] \88 --record-type A --record-name @ --record-data [ip] --record-ttl 30089```9091### Terraform for DigitalOcean92```hcl93terraform {94 required_providers {95 digitalocean = {96 source = "digitalocean/digitalocean"97 version = "~> 2.0"98 }99 }100}101102provider "digitalocean" {103 token = var.do_token104}105106resource "digitalocean_droplet" "web" {107 name = "[app]-web"108 size = "s-2vcpu-4gb"109 image = "ubuntu-24-04-x64"110 region = "blr1"111 ssh_keys = [data.digitalocean_ssh_key.default.id]112 tags = ["web", "[app]"]113}114115resource "digitalocean_firewall" "web" {116 name = "[app]-firewall"117 droplet_ids = [digitalocean_droplet.web.id]118119 inbound_rule {120 protocol = "tcp"; port_range = "22"121 source_addresses = ["0.0.0.0/0"]122 }123 inbound_rule {124 protocol = "tcp"; port_range = "80"125 source_addresses = ["0.0.0.0/0"]126 }127 inbound_rule {128 protocol = "tcp"; port_range = "443"129 source_addresses = ["0.0.0.0/0"]130 }131 outbound_rule {132 protocol = "tcp"; port_range = "all"133 destination_addresses = ["0.0.0.0/0"]134 }135}136```137138<!-- TODO: Add full interactive workflows for each capability above -->