Back to list
digitalocean-labs

app-platform-networking

by digitalocean-labs

Claude/Agent Skills for DigitalOcean App Platform - deployment, migration, networking, database configuration, and troubleshooting

2🍴 1📅 Jan 23, 2026

SKILL.md


App Platform Networking Skill

Configure domains, routing, CORS, VPC, static IPs, and inter-service communication.

Quick Decision

What networking do you need?
├── Custom domain?
│   └── YES → See domains-dns.md
│
├── Multiple services on one domain?
│   ├── Different paths (/api, /app) → Path-based routing
│   └── Different subdomains (api.*, app.*) → Subdomain routing
│
├── Frontend calling API across origins?
│   └── YES → CORS configuration
│
├── Secure database connectivity?
│   └── YES → VPC + trusted sources
│
└── Need static outbound IP?
    └── YES → Dedicated egress

When to Use

ScenarioNeed This Skill
Starter domain onlyNo
Custom domainYes
Multiple services, different pathsYes
Multiple subdomainsYes
Cross-subdomain API calls (CORS)Yes
Secure database access via VPCYes
Firewall allowlisting (egress IP)Yes

Quick Reference

FeatureApp Spec FieldExample
Custom domaindomains[].domainexample.com
Wildcarddomains[].wildcardtrue
Path routingingress.rules[].match.path.prefix/api
Subdomain routingingress.rules[].match.authority.exactapi.example.com
CORSingress.rules[].corsSee reference
VPCvpc.idUUID
Dedicated egressegress.typeDEDICATED_IP

Path-Based Routing (Quick Start)

ingress:
  rules:
    - component: { name: api }
      match: { path: { prefix: /api } }

    - component: { name: frontend }
      match: { path: { prefix: / } }

Rule order matters: Specific rules first.

Full guide: See ingress-routing.md


Subdomain Routing (Quick Start)

domains:
  - domain: example.com
    type: PRIMARY
    wildcard: true
    zone: example.com

ingress:
  rules:
    - component: { name: api }
      match:
        authority: { exact: api.example.com }
        path: { prefix: / }

    - component: { name: app }
      match:
        authority: { exact: app.example.com }
        path: { prefix: / }

Full guide: See domains-dns.md


CORS (Quick Start)

ingress:
  rules:
    - component: { name: api }
      match: { path: { prefix: /api } }
      cors:
        allow_origins:
          - exact: https://app.example.com
        allow_methods: [GET, POST, PUT, DELETE, OPTIONS]
        allow_headers: [Content-Type, Authorization]
        allow_credentials: true

Note: With allow_credentials: true, use exact origins only (no regex).

Full guide: See cors-configuration.md


VPC + Trusted Sources (Quick Start)

vpc:
  id: your-vpc-uuid

VPC CIDR whitelisting (recommended):

doctl vpcs get $VPC_ID --format IPRange  # e.g., 10.126.0.0/20
doctl databases firewalls append $CLUSTER_ID --rule ip_addr:10.126.0.0/20
SetupTrusted Source Rule
Public onlyapp:$APP_ID
VPC enabledip_addr:<vpc-cidr>

Critical: Bindable variables return PUBLIC hostnames even with VPC. Use private URLs:

doctl databases connection --private <cluster-id> --format URI

Full guide: See vpc-trusted-sources.md


Reference Files


Common Issues

IssueFix
Domain not resolvingCheck DNS records, allow 72h propagation
SSL certificate errorAdd CAA records for letsencrypt.org + pki.goog
CORS preflight failsAdd OPTIONS to allow_methods
VPC connection refusedUse VPC CIDR whitelisting, not app-based rules
Wrong component servesReorder rules (specific first)

Integration with Other Skills

  • → designer: Add domains/ingress to app spec
  • → troubleshooting: Debug DNS, CORS, VPC issues
  • → postgres: VPC connectivity for managed databases
  • → deployment: Deploy networking changes

Score

Total Score

75/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 100以上

0/15
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon