Files
dotfiles/dot_agents/skills/cloudflare/references/workers-vpc/configuration.md
T
Prad Nukala 6406208b35 shell: fish functions -> ~/.local/bin executables + bash/zsh ports; manage ~/.agents
- 16 cross-shell utilities converted to sh/bash chezmoi executables:
  ai c2p cp-appid extract_agents fab gdc gh-sonr-org-migrate ghg-clone
  ghn gho git-summary launch_omp_livediff_overlay lc-elir mdcp mdp pj
  (ghg-clone not named ghg: unrelated cargo binary owns that name)
- cwd/history helpers stay per-shell: yy c cd clip-last + ghg/ghn/gho
  cd-wrappers in bash/functions/ and zsh/functions/, loaded by rc files
- fish keeps only shell-state functions; converted ones now hit PATH
- cp-appid ignore gating moved to .local/bin path
- dot_agents/skills: 82 skills materialized from dotstate storage so
  dot_claude skill symlinks resolve on fresh bootstrap; dotstate
  profile/symlinks.json released .agents/skills .bashrc .zshrc
2026-08-10 15:15:06 -04:00

3.8 KiB

Configuration

Setup and configuration for TCP Sockets in Cloudflare Workers.

Wrangler Configuration

Basic Setup

TCP Sockets are available by default in Workers runtime. No special configuration required in wrangler.jsonc:

{
  "name": "private-network-worker",
  "main": "src/index.ts",
  "compatibility_date": "2025-01-01"
}

Environment Variables

Store connection details as env vars:

{
  "vars": { "DB_HOST": "10.0.1.50", "DB_PORT": "5432" }
}
interface Env { DB_HOST: string; DB_PORT: string; }

export default {
  async fetch(req: Request, env: Env): Promise<Response> {
    const socket = connect({ hostname: env.DB_HOST, port: parseInt(env.DB_PORT) });
  }
};

Per-Environment Configuration

{
  "vars": { "DB_HOST": "localhost" },
  "env": {
    "staging": { "vars": { "DB_HOST": "staging-db.internal.net" } },
    "production": { "vars": { "DB_HOST": "prod-db.internal.net" } }
  }
}

Deploy: wrangler deploy --env staging or wrangler deploy --env production

Integration with Cloudflare Tunnel

To connect Workers to private networks, combine TCP Sockets with Cloudflare Tunnel:

Worker (TCP Socket) → Tunnel hostname → cloudflared → Private Network

Quick Setup

  1. Install cloudflared on a server inside your private network
  2. Create tunnel: cloudflared tunnel create my-private-network
  3. Configure routing in config.yml:
tunnel: <TUNNEL_ID>
credentials-file: /path/to/<TUNNEL_ID>.json
ingress:
  - hostname: db.internal.example.com
    service: tcp://10.0.1.50:5432
  - service: http_status:404  # Required catch-all
  1. Run tunnel: cloudflared tunnel run my-private-network
  2. Connect from Worker:
const socket = connect(
  { hostname: "db.internal.example.com", port: 5432 },  // Tunnel hostname
  { secureTransport: "on" }
);

For detailed Tunnel setup, see Tunnel configuration reference.

Smart Placement Integration

Reduce latency by auto-placing Workers near backends:

{ "placement": { "mode": "smart" } }

Workers automatically relocate closer to TCP socket destinations after observing connection latency. See Smart Placement reference.

Secrets Management

Store sensitive credentials as secrets (not in wrangler.jsonc):

wrangler secret put DB_PASSWORD  # Enter value when prompted

Access in Worker via env.DB_PASSWORD. Use in protocol handshake or authentication.

Local Development

Test with wrangler dev. Note: Local mode may not access private networks. Use public endpoints or mock servers for development:

const config = process.env.NODE_ENV === 'dev' 
  ? { hostname: 'localhost', port: 5432 }  // Mock
  : { hostname: 'db.internal.example.com', port: 5432 };  // Production

Connection String Patterns

Parse connection strings to extract host and port:

function parseConnectionString(connStr: string): SocketAddress {
  const url = new URL(connStr); // e.g., "postgres://10.0.1.50:5432/mydb"
  return { hostname: url.hostname, port: parseInt(url.port) || 5432 };
}

Hyperdrive Integration

For PostgreSQL/MySQL, prefer Hyperdrive over raw TCP sockets (includes connection pooling):

{ "hyperdrive": [{ "binding": "DB", "id": "<HYPERDRIVE_ID>" }] }

See Hyperdrive reference for complete setup.

Compatibility

TCP Sockets available in all modern Workers. Use current date: "compatibility_date": "2025-01-01". No special flags required.