← Hyperdrive (Postgres & MySQL) / hyperdrive / configuration
Подключение к частной базе данных через Tunnel
Hyperdrive может безопасно подключаться к вашим приватным базам данных с помощью Cloudflare Tunnel и Cloudflare Access.
Как это работает
Если ваша база данных изолирована в частной сети (например, виртуальное частное облако ↗ или локальной сети), необходимо включить защищённое соединение от вашей сети к Cloudflare.
- Cloudflare Tunnel используется для установления безопасного туннельного соединения.
- Cloudflare Access используется для ограничения доступа к вашему туннелю так, чтобы к нему могли обращаться только определённые конфигурации Hyperdrive.
Запрос от Cloudflare Worker к исходной базе данных проходит через Hyperdrive, Cloudflare Access и Cloudflare Tunnel, установленный cloudflared. cloudflared должен быть запущен в приватной сети, в которой доступна ваша база данных.
Cloudflare Tunnel устанавливает исходящее двунаправленное соединение из вашей частной сети с Cloudflare. Cloudflare Access защищает Cloudflare Tunnel, ограничивая доступ к нему только конфигурацией Hyperdrive.
Прежде чем начать
Во всех руководствах предполагается, что вы уже выполнили Руководство по началу работы, который поможет вам настроить аккаунт Cloudflare Workers, C3 ↗, а также Wrangler.
Предварительные требования
- База данных в вашей частной сети, настроен на использование TLS/SSL.
- Имя хоста в вашем аккаунте Cloudflare, через которое запросы будут направляться к вашей базе данных.
1. Создание туннеля в приватной сети
1.1. Создание туннеля
Сначала создайте Cloudflare Tunnel в вашей приватной сети, чтобы установить безопасное соединение между вашей сетью и Cloudflare. Ваша сеть должна быть настроена так, чтобы туннель имел разрешения на исходящий трафик к сети Cloudflare и доступ к базе данных внутри вашей сети.
-
Войдите в панель управления Cloudflare и перейдите в Сеть > Tunnels.
Перейдите в Tunnels ↗ -
Выберите Создать туннель.
-
Введите имя туннеля. Рекомендуем выбрать имя, отражающее тип ресурсов, которые вы хотите подключить через этот туннель (например,
enterprise-VPC-01). -
Выберите Create Tunnel.
-
Выберите операционную систему, затем скопируйте команду установки и выполните её в терминале на вашем исходном сервере.
-
Дождитесь подключения туннеля. После установления соединения выберите Продолжение.
1.2. Подключение базы данных с помощью публичного имени хоста
Туннель должен быть настроен на использование публичного hostname в Cloudflare, чтобы Hyperdrive мог направлять на него запросы. Если у вас ещё нет hostname в Cloudflare, вам нужно будет зарегистрируйте новое имя хоста или добавить зону в Cloudflare, чтобы продолжить.
-
В Опубликованные маршруты приложения вкладке выберите Домен и укажите поддомен или путь, если это необходимо. Эта информация будет использована в конфигурации Hyperdrive для маршрутизации к этому туннелю.
-
В Сервис раздел и укажите Тип
TCPа также URL и настроенный порт вашей базы данных, например,localhost:5432илиmy-database-host.database-provider.com:5432. Этот адрес будет использоваться туннелем для маршрутизации запросов к вашей базе данных. -
Выберите Сохранить туннель.
2. Создание и настройка Hyperdrive для подключения к Cloudflare Tunnel
Чтобы ограничить для Hyperdrive доступ к Cloudflare Tunnel, потребуется Приложение Cloudflare Access должен быть настроен с Политика который требует, чтобы запросы содержали действительный Токен Service Auth.
Панель управления Cloudflare может автоматически создать и настроить базовый Приложение Cloudflare Access, Токен Service Auth, а также Политика от вашего имени. Либо вы можете вручную создать приложение Access и настроить Policies.
Автоматическое создание
2.1. (Автоматически) Создание конфигурации Hyperdrive в панели управления Cloudflare
Создайте конфигурацию Hyperdrive в панели управления Cloudflare, чтобы автоматически настроить подключение Hyperdrive к вашему Cloudflare Tunnel.
- В Панель управления Cloudflare ↗, перейдите в Storage & Databases > Hyperdrive и нажмите Создать конфигурацию.
- Выберите Приватная база данных.
- В Сведения о сети раздел и выберите туннель, к которому вы подключаетесь.
- В Сведения о сети раздел и выберите хост, связанный с туннелем. Если для вашей базы данных хоста нет, вернитесь к шагу 1.2. Подключение базы данных с помощью публичного имени хоста.
- В Access Service Authentication Token разделе выберите Create new (automatic).
- В Access Application разделе выберите Create new (automatic).
- В Данные подключения к базе данных раздел и укажите базу данных имя, пользователь, а также password.
Ручное создание
2.1. (Вручную) Создание токена службы
Токен сервиса будет использоваться для ограничения запросов к туннелю и понадобится для следующего шага.
-
В Панель управления Cloudflare ↗, перейдите в Zero Trust > Контроль доступа > Учетные данные службы > Service Tokens.
-
Выберите Create Service Token.
-
Назовите токен службы. Название позволит легко находить в журналах события, связанные с этим токеном, и отзывать его отдельно.
-
Задайте Service Token Duration
Non-expiring. Это предотвращает истечение срока действия токена службы и гарантирует возможность его использования на всем протяжении существования конфигурации Hyperdrive. -
Выберите Создать токен. Появятся сгенерированные Client ID и Client Secret для токена службы, а также соответствующие заголовки запроса.
-
Скопируйте Access Client ID и Access Client Secret. Они понадобятся при создании конфигурации Hyperdrive.
2.2. (Вручную) Создание приложения Access для защиты туннеля
Cloudflare Access будет использоваться для проверки того, что запросы к туннелю исходят от Hyperdrive, с использованием токена службы, созданного выше.
-
В Панель управления Cloudflare ↗, перейдите в Zero Trust > Контроль доступа > Приложения.
-
Выберите Создать новое приложение.
-
Выберите Самостоятельный хостинг и конфиденциальность.
-
Выберите Добавьте общедоступное имя хоста и введите поддомен и домен, которые ранее были заданы для приложения туннеля.
-
Выберите Создать новую политику.
-
Введите Название политики и задайте Действие к Service Auth.
-
Создайте Включить правило. Укажите Селектор Service Token и Значение сервисного токена, который вы создали на шаге 2. Создание токена службы.
-
Сохраните политику.
-
В Поставщики удостоверений, отключите Принимать все доступные провайдеры идентификации и удалите всех провайдеров идентификации.
-
В Длительность сессии, выберите
No duration, expires immediately. -
(Необязательно) Перейдите в Дополнительные настройки. Отключите Показать приложение в App Launcher.
-
Выберите Создание.
2.3. (Вручную) Создание конфигурации Hyperdrive
Чтобы создать конфигурацию Hyperdrive для приватной базы данных, при создании нужно будет указать приложение Access и данные 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
}
}В результате будет создана конфигурация Hyperdrive со стандартными данными базы данных (имя базы данных, хост базы данных, пользователь базы данных и пароль базы данных).
Кроме того, будут заданы Access Client ID и Access Client Secret для Service Token. Когда Hyperdrive отправляет запросы в туннель, они перехватываются Access и проверяются с использованием учетных данных Service Token.
3. Выполнение запроса к конфигурации Hyperdrive из Worker (необязательно)
Чтобы протестировать подключение конфигурации Hyperdrive к базе данных через Cloudflare Tunnel и Access, укажите идентификатор этой конфигурации Hyperdrive в своём Worker и разверните его.
3.1. Создание привязки Hyperdrive
Необходимо создать привязку в конфигурационный файл Wrangler чтобы ваш Worker мог подключиться к конфигурации Hyperdrive. Bindings позволяют вашим Workers обращаться к ресурсам платформы разработчика Cloudflare, таким как Hyperdrive.
Чтобы привязать конфигурацию Hyperdrive к своему Worker, добавьте следующее в конец файла Wrangler:
{
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "<YOUR_DATABASE_ID>" // the ID associated with the Hyperdrive you just created
}
]
}[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<YOUR_DATABASE_ID>"А именно:
- Значение (строка), которое вы задали для
binding(имя привязки) будет использоваться для обращения к этой базе данных в вашем Worker. В этом руководстве назовите привязкуHYPERDRIVE. - Привязка должна быть допустимое имя переменной JavaScript ↗. Например,
binding = "hyperdrive"илиbinding = "productionDB"оба варианта были бы допустимыми именами для привязки. - Привязка доступна в Worker по адресу
env.<BINDING_NAME>.
Если вы хотите использовать локальную базу данных при разработке, вы можете добавить localConnectionString в вашу конфигурацию Hyperdrive со строкой подключения к вашей базе данных:
{
"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. Запрос к базе данных
Убедитесь, что можете подключиться к базе данных из Workers и выполнять запросы.
Используйте node-postgres ↗ (pg) для отправки тестового запроса и проверки успешности подключения.
Установите node-postgres драйвер:
npm i pg@>8.16.3При использовании TypeScript установите пакет типов:
npm i -D @types/pgДобавьте необходимые флаги совместимости Node.js и привязку Hyperdrive в свой wrangler.jsonc файле:
{
// 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>"Создайте новый Client экземпляр и передайте 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 });
}
},
};Теперь разверните свой Worker:
npx wrangler deployЕсли вы успешно получаете список pg_tables из вашей базы данных при обращении к развёрнутому Worker, ваш Hyperdrive теперь настроен для безопасного подключения к приватной базе данных с помощью Cloudflare Tunnel и Cloudflare Access.
Используйте mysql2 ↗ чтобы отправить тестовый запрос и убедиться, что подключение выполнено успешно.
Установите mysql2 ↗ драйвер:
npm i mysql2@>3.13.0Добавьте необходимые флаги совместимости Node.js и привязку Hyperdrive в свой wrangler.jsonc файле:
{
// 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>"Создайте новый connection экземпляр и передайте параметры 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>;Теперь разверните свой Worker:
npx wrangler deployЕсли при обращении к развернутому Worker вы успешно получаете список таблиц из своей базы данных, значит Hyperdrive теперь настроен для безопасного подключения к приватной базе данных с использованием Cloudflare Tunnel и Cloudflare Access.
Устранение неполадок
Если при настройке конфигурации Hyperdrive с туннелями к приватной базе данных возникают проблемы, попробуйте эти распространенные решения в дополнение к общие шаги по устранению неполадок для Hyperdrive:
- Убедитесь, что база данных настроена на использование TLS (SSL). Для подключения Hyperdrive требуется TLS (SSL).