Подключение к базе
Базы данных — в бета-версии: всё, что здесь описано, работает, но интерфейс и отдельные возможности ещё меняются. Подробнее — на странице «Базы данных».
Строка подключения лежит в панели: меню карточки базы → Подключить. Выглядит она так:
postgresql://<роль>:<пароль>@db.layero.ru:5432/<база>?sslmode=verify-full
db.layero.ru — единый вход для всех баз Layero. Адрес сервера, на котором
лежит именно ваша база, наружу не выдаётся: он может смениться, а строка
подключения — нет.
Приложениям на Layero строка подключения приезжает сама — в переменной
LAYERO_DATABASE_URL (с режимом require, см. ниже), со следующего деплоя
после того, как вы подключите базу к проекту. Вписывать её
руками нужно только там, где приложение живёт не у нас.
Вторая база того же проекта получает суффикс по слагу,
LAYERO_DATABASE_URL_<СЛАГ>, чтобы две строки не спорили за одно имя.
DATABASE_URLТак называется переменная у половины хостингов и библиотек, и подставленная нами она молча перекрывала бы ту, что человек задал сам. Связи, заведённые до этого правила, своё прежнее имя сохраняют — в карточке проекта видно, какое имя приезжает вашему приложению.
Что может приложение
У каждого подключённого проекта свой пользователь базы. Он работает от имени владельца базы и может то же, что SQL-редактор в панели:
- создавать и менять таблицы. Миграции, которые приложение запускает само
при старте, проходят той же строкой
LAYERO_DATABASE_URL, отдельная строка для миграций не нужна; - работать с таблицами, созданными в редакторе, и наоборот. Всё, что создало приложение, принадлежит владельцу базы: такие таблицы видны в редакторе, их можно изменить или удалить.
Отключение проекта отзывает только его пользователя. Другие проекты и редактор продолжают работать, таблицы остаются в базе.
⚠️ У таких прав две особенности, как и у владельца базы в других сервисах:
- Политики доступа к строкам (RLS) на пользователя проекта не действуют. Если приложение на них опирается, заведите на странице «Роли» отдельную роль с нужными правами и подключайтесь ею.
- Приложение может сменить пароль владельца базы. После этого SQL-редактор перестанет подключаться, пока вы не сбросите пароль в панели.
Шифрование обязательно
Подключение без TLS сервер отклоняет — и у psql, и у любого драйвера. Вопрос только в том, проверяет ли клиент, чей сертификат ему предъявили. Об этом ниже.
require шифрует канал, но не проверяет собеседника
require— трафик зашифрован, но клиент не проверяет, чей сертификат ему предъявили. От чтения на промежуточном узле защищает, от подмены сервера — нет.verify-full— клиент проверяет и подпись сертификата, и совпадение имени. Защищает и от подмены.
По умолчанию мы выдаём verify-full — самый строгий режим.
Режим одинаков для общей и выделенной базы: обе подключаются через общий
вход db.layero.ru, и шифрование заканчивается на нашем сертификате.
⚠️ Кроме принесённой базы. Про чужой сервер мы не знаем ни кто подписал его сертификат, ни лежит ли у вас корневой, — проверять нечем. Строку подключения такой базы мы показываем в том виде, в каком вы её сохранили, и переключатель режима в панели для неё погашен.
⚠️ У 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. Проверить строку подключения
Если вы не переключали режим в панели, sslmode=verify-full в строке
уже есть:
postgresql://<роль>:<пароль>@db.layero.ru:5432/<база>?sslmode=verify-full
Драйверы
| Клиент | Что нужно |
|---|---|
psql, libpq | шаг 1 выше, дальше sslmode=verify-full работает |
asyncpg | шаг 1 обязателен: sslrootcert=system не понимает |
node-pg | берёт системные корни сам, шаг 1 не нужен |
Prisma | sslmode=verify-full в DATABASE_URL, корень по шагу 1 |
Drizzle | зависит от драйвера под ним — смотрите его строку в этой таблице |
В контейнере, где нет домашнего каталога
Положите корень в образ и укажите путь явно:
postgresql://<роль>:<пароль>@db.layero.ru:5432/<база>?sslmode=verify-full&sslrootcert=/etc/ssl/certs/isrgrootx1.pem
Кого пускать к базе
Снаружи — с ноутбука, из CI, с чужого хостинга — к базе подключаются только адреса из её списка: страница базы → Настройки → Разрешённые адреса. Приложения ваших проектов на Layero подключаются всегда, добавлять их в список не нужно.
С чем база приходит:
| База | Список после создания |
|---|---|
| Общая | один адрес — тот, с которого базу завели. Панель скажет об этом во всплывающем сообщении |
| Выделенная | строка 0.0.0.0/0 с пометкой «Открыта всем при создании»: подключиться может любой, кто знает пароль |
⚠️ Если выделенную базу не нужно открывать всему интернету, сразу после
создания удалите строку 0.0.0.0/0 и добавьте свои адреса.
Как добавить адрес:
- Настройки → Разрешённые адреса → Добавить.
- Впишите адрес или подсеть. Есть быстрые варианты: «Мой адрес»
и «Весь интернет» (
0.0.0.0/0), для второго панель переспросит. - При желании укажите, зачем нужен адрес и до какого числа он действует. Срок удобен, когда доступ нужен подрядчику на неделю, а не навсегда.
Изменения начинают действовать в течение минуты. Адреса IPv6 пока не поддерживаются — только IPv4.
Домашний и офисный адреса часто меняются. Если подключение перестало проходить после смены провайдера или переезда, сначала проверьте, что ваш текущий адрес всё ещё в списке.
Автоматическая блокировка
После 10 неверных паролей за 5 минут адрес блокируется на 30 минут, повторные блокировки длиннее, до 16 часов. Так перебор паролей не доходит до базы. Заблокированные адреса видны в Настройках базы: свой можно разблокировать кнопкой, когда пароль уже исправлен.
Если подключение не проходит
| Что говорит клиент | Что это значит |
|---|---|
login rejected | ваш адрес не в списке разрешённых или заблокирован — проверьте «Настройки» базы |
SASL authentication failed | адрес разрешён, не подошёл пароль |
no such user | опечатка в имени роли |
| ошибка проверки сертификата | в строке verify-full, а корневого сертификата у клиента нет — см. шаг 1 |
| соединение висит и отваливается | слишком много подключений с одного адреса или исчерпан предел базы — см. «Лимиты» |