mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2026-03-21 06:11:27 -07:00
148 lines
3.8 KiB
Markdown
148 lines
3.8 KiB
Markdown
# 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`:
|
|
|
|
```jsonc
|
|
{
|
|
"name": "private-network-worker",
|
|
"main": "src/index.ts",
|
|
"compatibility_date": "2025-01-01"
|
|
}
|
|
```
|
|
|
|
### Environment Variables
|
|
|
|
Store connection details as env vars:
|
|
|
|
```jsonc
|
|
{
|
|
"vars": { "DB_HOST": "10.0.1.50", "DB_PORT": "5432" }
|
|
}
|
|
```
|
|
|
|
```typescript
|
|
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
|
|
|
|
```jsonc
|
|
{
|
|
"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`:
|
|
|
|
```yaml
|
|
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
|
|
```
|
|
|
|
4. **Run tunnel**: `cloudflared tunnel run my-private-network`
|
|
5. **Connect from Worker**:
|
|
|
|
```typescript
|
|
const socket = connect(
|
|
{ hostname: "db.internal.example.com", port: 5432 }, // Tunnel hostname
|
|
{ secureTransport: "on" }
|
|
);
|
|
```
|
|
|
|
For detailed Tunnel setup, see [Tunnel configuration reference](../tunnel/configuration.md).
|
|
|
|
## Smart Placement Integration
|
|
|
|
Reduce latency by auto-placing Workers near backends:
|
|
|
|
```jsonc
|
|
{ "placement": { "mode": "smart" } }
|
|
```
|
|
|
|
Workers automatically relocate closer to TCP socket destinations after observing connection latency. See [Smart Placement reference](../smart-placement/).
|
|
|
|
## Secrets Management
|
|
|
|
Store sensitive credentials as secrets (not in wrangler.jsonc):
|
|
|
|
```bash
|
|
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:
|
|
|
|
```typescript
|
|
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:
|
|
|
|
```typescript
|
|
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):
|
|
|
|
```jsonc
|
|
{ "hyperdrive": [{ "binding": "DB", "id": "<HYPERDRIVE_ID>" }] }
|
|
```
|
|
|
|
See [Hyperdrive reference](../hyperdrive/) for complete setup.
|
|
|
|
## Compatibility
|
|
|
|
TCP Sockets available in all modern Workers. Use current date: `"compatibility_date": "2025-01-01"`. No special flags required.
|
|
|
|
## Related Configuration
|
|
|
|
- **[Tunnel Configuration](../tunnel/configuration.md)** - Detailed cloudflared setup
|
|
- **[Smart Placement](../smart-placement/configuration.md)** - Placement mode options
|
|
- **[Hyperdrive](../hyperdrive/configuration.md)** - Database connection pooling setup
|