Skip to main content

Подключение к базе

Раздел в тестировании

Базы данных и Data API открыты пока не всем: раздел проходит закрытый пилот на нескольких аккаунтах. Если в меню панели нет пункта «Базы данных» — доступа у вас ещё нет, и создать базу не получится ни из панели, ни из CLI.

Чтобы попасть в пилот, напишите нам в чат «💬» в правом нижнем углу панели — включим вручную. Другого способа получить доступ сейчас нет.

Всё, что описано на этих страницах, уже работает — но названия, кнопки и ответы ручек ещё меняются. Страница может отстать от продукта на несколько дней; заметили расхождение — напишите тем же чатом, это помогает.

Строка подключения лежит в панели, на странице базы, и выглядит так:

postgresql://<роль>:<пароль>@db.layero.ru:5432/<база>?sslmode=verify-full

db.layero.ru — единый вход для всех баз Layero. Адрес сервера, на котором лежит именно ваша база, наружу не выдаётся: он может смениться, а строка подключения — нет.

Приложениям, задеплоенным на Layero, эта строка приезжает сама в переменной LAYERO_DATABASE_URL, как только вы подключите базу к проекту. Вписывать её руками нужно только там, где приложение живёт не у нас.

Вторая база того же проекта получает суффикс по слагу — LAYERO_DATABASE_URL_<СЛАГ>, — чтобы две строки не спорили за одно имя.

:::note Почему не DATABASE_URL Так называется переменная у половины хостингов и библиотек, и подставленная нами она молча перекрывала бы ту, что человек задал сам. Связи, заведённые до этого правила, своё прежнее имя сохраняют — в карточке проекта видно, какое имя приезжает вашему приложению. :::

Шифрование обязательно

Шифрование — не рекомендация: подключение без TLS сервер отклоняет. Это относится и к psql, и к любому драйверу. Вопрос только в том, проверяет ли клиент, чей сертификат ему предъявили, — об этом ниже.

require шифрует канал, но не проверяет собеседника

Разница неочевидна.

  • require — трафик зашифрован, но клиент не проверяет, чей сертификат ему предъявили. От чтения на промежуточном узле защищает, от подмены сервера — нет.
  • verify-full — клиент проверяет и подпись сертификата, и совпадение имени. Защищает и от подмены.

По умолчанию мы выдаём verify-full — самый строгий режим.

⚠️ Кроме принесённой базы. Про чужой сервер мы не знаем ни кто его подписал, ни лежит ли у вас его корень, — проверять нечем и советовать нечего. Панель говорит об этом прямо в окне подключения, а переключатель там погашен.

До 06.09.2026 то же самое относилось и к выделенному инстансу: его строка вела прямо на кластер поставщика с самоподписанным сертификатом. Теперь она ведёт на общий вход db.layero.ru, шифрование заканчивается на нашем сертификате — и verify-full работает на любом размещении, кроме принесённой базы.

⚠️ И у него есть цена, о которой надо знать заранее. verify-full требует, чтобы у клиента был корневой сертификат в том месте, где его ищет библиотека. libpq ищет его в ~/.postgresql/root.crt и в системное хранилище не смотрит, а sslrootcert=system понимают не все драйверы — asyncpg, например, не понимает. То есть без шага ниже строка не подключится у части клиентов, и выглядеть это будет как «база не работает».

Рецепт — следующим разделом, он занимает одну команду. Если корень положить некуда (чужой контейнер, managed-раннер), режим переключается на require в панели: канал останется зашифрованным, проверки подлинности сервера не будет.

Приложениям, задеплоенным на Layero, платформа подставляет require сама: класть корневой сертификат в образ, который собираете вы, мы не можем.

Как включить verify-full

Сертификат db.layero.ru выпущен Let's Encrypt, корень — ISRG Root X1.

1. Положить корень туда, где его ищет клиент

mkdir -p ~/.postgresql
curl -fsSL https://letsencrypt.org/certs/isrgrootx1.pem -o ~/.postgresql/root.crt

Проверьте, что файл действительно корневой сертификат:

openssl x509 -in ~/.postgresql/root.crt -noout -subject
# subject=C = US, O = Internet Security Research Group, CN = ISRG Root X1

2. Поменять строку подключения

postgresql://<роль>:<пароль>@db.layero.ru:5432/<база>?sslmode=verify-full

Драйверы

КлиентЧто нужно
psql, libpqшаг 1 выше, дальше sslmode=verify-full работает
asyncpgшаг 1 обязателен: sslrootcert=system не понимает
node-pgберёт системные корни сам, шаг 1 не нужен
Prismasslmode=verify-full в DATABASE_URL, корень по шагу 1
Drizzleзависит от драйвера под ним — смотрите его строку в этой таблице

В контейнере, где нет домашнего каталога

Положите корень в образ и укажите путь явно:

postgresql://<роль>:<пароль>@db.layero.ru:5432/<база>?sslmode=verify-full&sslrootcert=/etc/ssl/certs/isrgrootx1.pem

Кого пускать к базе

На странице базы, во вкладке «Сеть», три режима:

РежимКто может подключиться
Только ресурсы Layeroприложения, подключённые к этой базе, и сервисы платформы
Список адресовони же плюс адреса, которые вы перечислили
Открыто всемкто угодно, если знает пароль

Новые базы заводятся в режиме «Только ресурсы Layero»: приложение работает сразу, а доступ снаружи — с ноутбука, из CI, из чужого хостинга — вы открываете сами и осознанно.

У правила в списке адресов может быть срок: удобно, когда доступ нужен подрядчику на неделю, а не навсегда.

:::tip Не знаете свой адрес Домашний и офисный адреса обычно меняются. Если подключение перестало проходить после смены провайдера или переезда, сначала проверьте, что ваш текущий адрес всё ещё в списке. :::

Если подключение не проходит

Что говорит клиентЧто это значит
login rejectedваш адрес не подходит ни под одно правило — проверьте вкладку «Сеть»
SASL authentication failedадрес разрешён, не подошёл пароль
no such userопечатка в имени роли
ошибка проверки сертификатавы включили verify-full, но не положили корень — см. шаг 1
соединение висит и отваливаетсяслишком много подключений с одного адреса; закройте лишние