← Hyperdrive (Postgres & MySQL) / hyperdrive / configuration
Připojení k privátní databázi pomocí Tunnel
Hyperdrive se může bezpečně připojit k vašim privátním databázím pomocí Cloudflare Tunnel a Cloudflare Access.
Jak to funguje
Pokud je vaše databáze izolována v privátní síti (například virtuální privátní cloud ↗ nebo lokální síti), musíte povolit zabezpečené připojení z vaší sítě do Cloudflare.
- Cloudflare Tunnel slouží k navázání zabezpečeného tunelového připojení.
- Cloudflare Access slouží k omezení přístupu k vašemu tunelu tak, aby k němu měly přístup jen konkrétní konfigurace Hyperdrive.
Požadavek z Cloudflare Worker do zdrojové databáze prochází přes Hyperdrive, Cloudflare Access a Cloudflare Tunnel vytvořený pomocí cloudflared. cloudflared musí běžet v privátní síti, v níž je vaše databáze dostupná.
Cloudflare Tunnel vytvoří odchozí obousměrné připojení z vaší privátní sítě do Cloudflare. Cloudflare Access zabezpečí váš Cloudflare Tunnel tak, aby k němu měla přístup pouze vaše konfigurace Hyperdrive.
Než začnete
Všechny návody předpokládají, že jste již dokončili Úvodní návod, který vás provede nastavením účtu Cloudflare Workers, C3 ↗, a Wrangler.
Předpoklady
- Databáze ve vaší privátní síti, nakonfigurovaná pro TLS/SSL.
- Název hostitele ve vašem účtu Cloudflare, který se používá ke směrování požadavků do vaší databáze.
1. Vytvořte tunel ve své privátní síti
1.1. Vytvořte tunel
Nejprve vytvořte Cloudflare Tunnel ve vaší privátní síti a navázat tak zabezpečené spojení mezi vaší sítí a Cloudflare. Vaše síť musí být nakonfigurována tak, aby tunel měl oprávnění odesílat provoz do sítě Cloudflare a přistupovat k databázi ve vaší síti.
-
Přihlaste se do Cloudflare dashboardu a přejděte na Sítě > Tunnels.
Přejděte na Tunnels ↗ -
Vyberte Vytvořit tunel.
-
Zadejte název tunelu. Doporučujeme zvolit název, který vystihuje typ prostředků, jež chcete přes tento tunel připojit (například
enterprise-VPC-01). -
Vyberte Create Tunnel.
-
Zvolte svůj operační systém, poté zkopírujte instalační příkaz a spusťte jej v terminálu na svém origin serveru.
-
Počkejte, až se tunel připojí. Jakmile bude spojení navázáno, vyberte Pokračovat.
1.2. Připojte databázi pomocí veřejného názvu hostitele
Váš tunel musí být nakonfigurovaný tak, aby používal veřejný hostname na Cloudflare, aby k němu Hyperdrive mohl směrovat požadavky. Pokud na Cloudflare ještě nemáte hostname, budete muset zaregistrujte nový název hostitele nebo přidat zónu Cloudflare, abyste mohli pokračovat.
-
V Publikované trasy aplikace kartě zvolte Doména a zadejte případné informace o subdoméně nebo cestě. Tyto údaje se použijí ve vaší konfiguraci Hyperdrive ke směrování do tohoto tunelu.
-
V Služba sekci zadejte Typ
TCPa adresu URL a nakonfigurovaný port vaší databáze, napříkladlocalhost:5432nebomy-database-host.database-provider.com:5432. Tuto adresu tunel použije ke směrování požadavků do vaší databáze. -
Vyberte Uložit tunel.
2. Vytvořte a nakonfigurujte Hyperdrive pro připojení k Cloudflare Tunnel
Chcete-li omezit přístup k Cloudflare Tunnel pro Hyperdrive, je potřeba aplikace Cloudflare Access musí být nakonfigurován s Zásada vyžadující, aby požadavky obsahovaly platný Service Auth token.
Cloudflare dashboard umí automaticky vytvořit a nakonfigurovat podkladový aplikace Cloudflare Access, Service Auth token, a Zásada za vás. Aplikaci Access a Policies můžete také vytvořit a nakonfigurovat ručně.
Automatické vytvoření
2.1. (Automaticky) Vytvořte konfiguraci Hyperdrive v Cloudflare dashboardu
Vytvořte konfiguraci Hyperdrive na Cloudflare dashboardu, čímž se Hyperdrive automaticky nastaví na připojení k vašemu Cloudflare Tunnel.
- V Cloudflare dashboard ↗, přejděte do Storage & Databases > Hyperdrive a klikněte na Vytvoření konfigurace.
- Vyberte Privátní databáze.
- V Podrobnosti o síti sekci vyberte tunel, ke kterému se připojujete.
- V Podrobnosti o síti sekci vyberte název hostitele přiřazený k tunelu. Pokud pro vaši databázi žádný název hostitele neexistuje, vraťte se ke kroku 1.2. Připojte databázi pomocí veřejného názvu hostitele.
- V Access Service Authentication Token sekci vyberte Create new (automatic).
- V Access Application sekci vyberte Create new (automatic).
- V Podrobnosti o připojení k databázi sekci zadejte databázi název, uživatel, a password.
Ruční vytvoření
2.1. (Ručně) Vytvořte token služby
Token služby se použije k omezení požadavků na tunel a je potřebný pro další krok.
-
V Cloudflare dashboard ↗, přejděte na Zero Trust > Řízení přístupu > Přihlašovací údaje služby > Service Tokens.
-
Vyberte Create Service Token.
-
Pojmenujte token služby. Název vám umožní snadno identifikovat události související s tokenem v protokolech a token jednotlivě zneplatnit.
-
Nastavte Doba platnosti Service Token z
Non-expiring. Tím se zabrání vypršení platnosti tokenu služby, takže jej lze používat po celou dobu existence konfigurace Hyperdrive. -
Vyberte Vygenerovat token. Zobrazí se vygenerované Client ID a Client Secret pro service token, spolu s příslušnými hlavičkami požadavků.
-
Zkopírujte Access Client ID a Access Client Secret. Použijí se při vytváření konfigurace Hyperdrive.
2.2. (Ručně) Vytvořte aplikaci Access k zabezpečení tunelu
Cloudflare Access se použije k ověření, že požadavky na tunel pocházejí z Hyperdrive, a to pomocí tokenu služby vytvořeného výše.
-
V Cloudflare dashboard ↗, přejděte na Zero Trust > Řízení přístupu > Aplikace.
-
Vyberte Vytvořit novou aplikaci.
-
Vyberte Vlastní hosting a soukromé.
-
Vyberte Přidejte veřejný hostname a zadejte subdoménu a doménu, které jste dříve nastavili pro tunelovou aplikaci.
-
Vyberte Vytvořit novou zásadu.
-
Zadejte Název zásady a nastavte Akce na Service Auth.
-
Vytvořte Include pravidlo. Zadejte Selektor z Service Token a Hodnota servisního tokenu, který jste vytvořili v kroku 2. Vytvořte token služby.
-
Uložte zásadu.
-
V Poskytovatelé identity, vypněte Přijmout všechny dostupné poskytovatele identity a vymazat všechny poskytovatele identity.
-
V Doba trvání relace, vyberte
No duration, expires immediately. -
(Volitelné) Přejděte na Další nastavení. Vypněte Zobrazit aplikaci v App Launcher.
-
Vyberte Vytvořit.
2.3. (Ručně) Vytvořte konfiguraci Hyperdrive
Chcete-li vytvořit konfiguraci Hyperdrive pro svou privátní databázi, musíte při vytváření zadat informace o aplikaci Access a Cloudflare Tunnel.
# wrangler v3.65 and above required
npx wrangler hyperdrive create <NAME-OF-HYPERDRIVE-CONFIGURATION-FOR-DB-VIA-TUNNEL> --host=<HOSTNAME-FOR-THE-TUNNEL> --user=<USERNAME-FOR-YOUR-DATABASE> --password=<PASSWORD-FOR-YOUR-DATABASE> --database=<DATABASE-TO-CONNECT-TO> --access-client-id=<YOUR-ACCESS-CLIENT-ID> --access-client-secret=<YOUR-SERVICE-TOKEN-CLIENT-SECRET>resource "cloudflare_hyperdrive_config" "<TERRAFORM_VARIABLE_NAME_FOR_CONFIGURATION>" {
account_id = "<YOUR_ACCOUNT_ID>"
name = "<NAME_OF_HYPERDRIVE_CONFIGURATION>"
origin = {
host = "<HOSTNAME_OF_TUNNEL>"
database = "<NAME_OF_DATABASE>"
user = "<NAME_OF_DATABASE_USER>"
password = "<DATABASE_PASSWORD>"
scheme = "postgres"
access_client_id = "<ACCESS_CLIENT_ID>"
access_client_secret = "<ACCESS_CLIENT_SECRET>"
}
caching = {
disabled = false
}
}Tím se vytvoří konfigurace Hyperdrive pomocí obvyklých databázových údajů (název databáze, hostitel databáze, uživatelské jméno databáze a heslo databáze).
Kromě toho nastaví i Access Client ID a Access Client Secret příslušného Service Token. Když Hyperdrive odesílá požadavky do tunelu, tyto požadavky zachytí Access a ověří je pomocí přihlašovacích údajů Service Token.
3. Vydejte dotaz na konfiguraci Hyperdrive z Workeru (volitelné)
Chcete-li otestovat konfiguraci Hyperdrive k databázi přes Cloudflare Tunnel a Access, použijte ID konfigurace Hyperdrive ve svém Workeru a nasaďte ho.
3.1. Vytvořte Hyperdrive binding
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ě:
- Hodnota (řetězec), kterou jste nastavili pro
binding(název bindingu) se použije k odkazu na tuto databázi ve vašem Workeru. V tomto tutoriálu pojmenujte bindingHYPERDRIVE. - Binding musí být platný název proměnné v JavaScriptu ↗. Například
binding = "hyperdrive"nebobinding = "productionDB"by byly oba platné názvy pro binding. - Váš binding je ve Workeru dostupný na
env.<BINDING_NAME>.
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>"3.2. Vydejte dotaz na svou databázi
Ověřte, že se z Workers můžete připojit ke své databázi a provádět dotazy.
Použijte node-postgres ↗ (pg) k odeslání testovacího dotazu, kterým ověříte, že připojení proběhlo úspěšně.
Nainstalujte node-postgres ovladač:
npm i pg@>8.16.3Pokud používáte TypeScript, nainstalujte balíček typů:
npm i -D @types/pgPř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 });
}
},
};Nyní nasaďte svůj Worker:
npx wrangler deployPokud úspěšně obdržíte seznam pg_tables z vaší databáze při přístupu k nasazenému Workeru, váš Hyperdrive je nyní nakonfigurován tak, aby se k privátní databázi bezpečně připojoval pomocí Cloudflare Tunnel a Cloudflare Access.
Použijte mysql2 ↗ k odeslání testovacího dotazu, kterým ověříte, že připojení proběhlo úspěšně.
Nainstalujte mysql2 ↗ ovladač:
npm i mysql2@>3.13.0Př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ý connection instance a předejte parametry Hyperdrive:
// mysql2 v3.13.0 or later is required
import { createConnection } from "mysql2/promise";
export default {
async fetch(request, env, ctx): Promise<Response> {
// Create a new connection on each request. Hyperdrive maintains the underlying
// database connection pool, so creating a new connection is fast.
const connection = await createConnection({
host: env.HYPERDRIVE.host,
user: env.HYPERDRIVE.user,
password: env.HYPERDRIVE.password,
database: env.HYPERDRIVE.database,
port: env.HYPERDRIVE.port,
// Required to enable mysql2 compatibility for Workers
disableEval: true,
});
try {
// Sample query
const [results, fields] = await connection.query("SHOW tables;");
// Return result rows as JSON
return Response.json({ results, fields });
} catch (e) {
console.error(e);
return Response.json(
{ error: e instanceof Error ? e.message : e },
{ status: 500 },
);
}
},
} satisfies ExportedHandler<Env>;Nyní nasaďte svůj Worker:
npx wrangler deployPokud po přístupu k nasazenému Workeru úspěšně obdržíte seznam tabulek z vaší databáze, znamená to, že je váš Hyperdrive nakonfigurován k zabezpečenému připojení k privátní databázi pomocí Cloudflare Tunnel a Cloudflare Access.
Řešení potíží
Pokud při nastavování konfigurace Hyperdrive s tunely k privátní databázi narazíte na potíže, zvažte tato běžná řešení, kromě obecné kroky pro řešení problémů pro Hyperdrive:
- Ujistěte se, že je vaše databáze nakonfigurována pro použití TLS (SSL). Hyperdrive vyžaduje k připojení TLS (SSL).