INTEGRITY Dokumentace

Připojení k privátní databázi

Tento příklad ukazuje, jak z Workeru dotazovat privátní databázi PostgreSQL pomocí Workers VPC a Hyperdrive. Worker se připojuje k databázi, která není vystavena veřejnému internetu, přičemž Hyperdrive zajišťuje sdružování připojení a zrychlení dotazů.

Předpoklady

1. Nastavení Cloudflare Tunnel

Pokud ve stejné síti jako vaše databáze ještě nemáte spuštěný tunel, vytvořte si ho.

  1. Přejděte na Dashboard Workers VPC ↗ a vyberte Tunnels kartě.

  2. Vyberte Vytvořit k vytvoření tunelu.

  3. Zadejte název tunelu a vyberte Uložit tunel.

  4. Zvolte svůj operační systém a architekturu. Dashboard vám zobrazí pokyny k instalaci.

  5. Postupujte podle uvedených příkazů a stáhněte, nainstalujte a spusťte cloudflared s vaším jedinečným tokenem.

Tunel musí mít z privátní sítě přístup k hostiteli a portu vaší databáze. Úplnou dokumentaci k tunelům najdete v Cloudflare Tunnel pro Workers VPC.

2. Vytvořte TCP VPC Service

Vytvořte VPC Service typu tcp která odkazuje na vaši databázi:

npx wrangler vpc service create my-postgres-db \
  --type tcp \
  --tcp-port 5432 \
  --app-protocol postgresql \
  --tunnel-id <YOUR_TUNNEL_ID> \
  --ipv4 <YOUR_DATABASE_IP>

Nahraďte <YOUR_TUNNEL_ID> s ID tunelu z kroku 1 a <YOUR_DATABASE_IP> se soukromou IP adresou vaší databáze (například 10.0.0.5).

Příkaz vrátí ID služby. Tuto hodnotu si uložte pro další krok.

3. Vytvořte konfiguraci Hyperdrive

Použijte --service-id příznak, aby Hyperdrive směřoval na vytvořenou VPC Service:

npx wrangler hyperdrive create my-vpc-database \
  --service-id <YOUR_VPC_SERVICE_ID> \
  --database <DATABASE_NAME> \
  --user <DATABASE_USER> \
  --password <DATABASE_PASSWORD> \
  --scheme postgresql

Nahraďte <YOUR_VPC_SERVICE_ID> s ID služby z kroku 2 a zadejte název databáze, uživatele a heslo.

Příkaz vypíše ID konfigurace Hyperdrive. Zkopírujte si ho pro další krok.

4. Přiřaďte Hyperdrive k Workeru

Vazbu musíte vytvořit v Konfigurační soubor Wrangler pro připojení vašeho Workeru ke konfiguraci Hyperdrive. Bindings umožňují vašim Workers přistupovat ke zdrojům, jako je Hyperdrive, na vývojářské platformě Cloudflare.

Chcete-li konfiguraci Hyperdrive svázat s Workerem, přidejte na konec souboru Wrangler následující:

{
	"hyperdrive": [
		{
			"binding": "HYPERDRIVE",
			"id": "<YOUR_DATABASE_ID>" // the ID associated with the Hyperdrive you just created
		}
	]
}
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<YOUR_DATABASE_ID>"

Konkrétně:

Pokud chcete během vývoje používat lokální databázi, můžete přidat localConnectionString do konfigurace Hyperdrive připojovacím řetězcem vaší databáze:

{
	"hyperdrive": [
		{
			"binding": "HYPERDRIVE",
			"id": "<YOUR_DATABASE_ID>", // the ID associated with the Hyperdrive you just created
			"localConnectionString": "<LOCAL_DATABASE_CONNECTION_URI>"
		}
	]
}
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<YOUR_DATABASE_ID>"
localConnectionString = "<LOCAL_DATABASE_CONNECTION_URI>"

5. Vydejte dotaz na databázi

Nainstalujte node-postgres ovladač:

npm i pg@>8.16.3

Pokud používáte TypeScript, nainstalujte balíček typů:

npm i -D @types/pg

Přidejte potřebné příznaky kompatibility s Node.js a vazbu Hyperdrive do svého wrangler.jsonc soubor:

{
	// required for database drivers to function
	"compatibility_flags": [
		"nodejs_compat"
	],
	// Set this to today's date
	"compatibility_date": "2026-08-28",
	"hyperdrive": [
		{
			"binding": "HYPERDRIVE",
			"id": "<your-hyperdrive-id-here>"
		}
	]
}
compatibility_flags = [ "nodejs_compat" ]
# Set this to today's date
compatibility_date = "2026-08-28"

[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<your-hyperdrive-id-here>"

Vytvořte nový Client instance a předejte Hyperdrive connectionString:

// filepath: src/index.ts
import { Client } from "pg";

export default {
	async fetch(
		request: Request,
		env: Env,
		ctx: ExecutionContext,
	): Promise<Response> {
		// Create a new client instance for each request. Hyperdrive maintains the
		// underlying database connection pool, so creating a new client is fast.
		const client = new Client({
			connectionString: env.HYPERDRIVE.connectionString,
		});

		try {
			// Connect to the database
			await client.connect();

			// Perform a simple query
			const result = await client.query("SELECT * FROM pg_tables");

			return Response.json({
				success: true,
				result: result.rows,
			});
		} catch (error: any) {
			console.error("Database error:", error.message);

			return new Response("Internal error occurred", { status: 500 });
		}
	},
};

6. Nasaďte a otestujte

Nasaďte svůj Worker:

npx wrangler deploy

Odešlete požadavek a ověřte připojení:

curl https://<YOUR_WORKER>.<YOUR_SUBDOMAIN>.workers.dev

Úspěšná odpověď vrací pole JSON s řádky z vaší databáze.

Další kroky