# PostgreSQL Облако Amvera поддерживает создание управляемого кластера postgres с одной или несколькими запущенными репликами СУБД. Создание кластера происходит в несколько простых шагов: ## Разворачивание кластера 1. На главной странице нажать на кнопку "Создать". 2. Задать "Название проекта", выбрать "Тип сервиса" "PostgreSQL" и подходящий тариф. ![postgresql](../img/postgresql.png) ```{eval-rst} .. admonition:: Внимание :class: attention Стабильная работа возможна на тарифах не ниже "Начальный". ``` 3. Задать параметры СУБД PostgreSQL ```{eval-rst} .. admonition:: Внимание :class: attention Имя базы данных и имя пользователя `postgres` зарезервировано и не могут быть указаны. ``` - `Имя создаваемой БД` - имя для базы данный, которая будет создана в кластере. - `Имя пользователя` - имя для пользователя, под которым будет реализовываться вход в СУБД. - `Пароль пользователя` - пароль для указанного выше пользователя, под которым будет реализовываться вход в СУБД. - `Размер кластера СУБД` - количество реплик СУБД. При этом одна из реплик будет мастером и в связи с особенностями СУБД доступ на запись будет доступен только через неё. ```{eval-rst} .. admonition:: Важно :class: warning Тарификация происходит отдельно за каждую реплику согласно выбранному тарифу ``` - `Активировать Superuser Access` - активировать доступ суперпользователя с именем пользователя `postgres`. - `Пароль для Superuser` - пароль для пользователя `postgres`, под которым возможен вход в СУБД с правами суперпользователя. 4. Нажать кнопку "Завершить" и дождаться перехода кластера в статус "PostgreSQL запущен". ## Подключение к кластеру Для доступа к базе данных из других проектов Амвера достаточно указать одно из трех доменных имен: - Для чтения/записи: `amvera--cnpg--rw` - Только для чтения в режиме hot standby: `amvera--cnpg--ro` - Для чтения с произвольной из развернутых нод: `amvera--cnpg--r` Для доступа к базе данных из сети Интернет необходимо создать [доменное имя](../applications/configuration/network.md) с типом POSTGRES. Клиент, которым будет выполняться подключения к БД должен поддерживать SSL. ```{eval-rst} .. admonition:: Важно :class: attention При подключении из локального pgAdmin, укажите это доменное имя без https вначале. ``` В pgAdmin Desktop указывается - Host name: `-.db-msk0.amvera.tech` - SSL mode: `prefer` ```{eval-rst} .. admonition:: Внимание :class: attention Рекомендуется использовать версию pgAdmin не выше `8.12`, поскольку версии выше используют v17 libpq. Именно на этой версии при попытке подключиться к БД возвращается ошибка `SSL error: tlsv1 alert no application protocol`. ``` ```{eval-rst} .. admonition:: Внимание :class: attention Если у вас не получается подключиться с использованием pgAdmin, используйте DBeaver. ``` ## Развертывание pgAdmin ```{eval-rst} .. youtube:: QfGv3qsDye8 :align: center :width: 100% ``` ### 1. Создать приложение с подходящим тарифом. ```{eval-rst} .. admonition:: Внимание :class: attention Для работы pgadmin требуется контейнер с тарифом не ниже "Начальный". ``` ### 2. На этапе "Загрузка данных" выбрать "Через Git" ![db_create](../img/db_create.png) ### 3. На этапе "Конфигурация" выбрать "db" и "pgadmin" и нажать "Завершить" При развертывании используется [образ](https://hub.docker.com/r/dpage/pgadmin4) Docker `dpage/pgadmin4:${meta.toolchain.version}` ```{eval-rst} .. admonition:: Внимание :class: attention Рекомендуется использовать версию не выше `8.12`, поскольку версии выше используют v17 libpq. Именно на этой версии при попытке подключиться к БД возвращается ошибка `SSL error: tlsv1 alert no application protocol`. ``` ### 4. Указать необходимые параметры окружения. В разделе "Переменные" у проекта необходимо задать следующие [переменные окружения](../applications/configuration/variables.md): * Переменная `PGADMIN_DEFAULT_EMAIL` - почта администратора pgAdmin * Секрет `PGADMIN_DEFAULT_PASSWORD` - пароль для доступа к pgAdmin (не имеет ничего общего с паролем от БД) ## Настройка pgAdmin 1. В разделе "Настройки" приложения активируем [бесплатное доменное имя](../applications/configuration/network.md#бесплатное-доменное-имя-амвера) или [добавляем свое](../applications/configuration/network.md#свое-доменное-имя). ![db_create](../img/pgadmin_domain.png) 2. Дожидаемся окончания привязки доменного имени и переходим по нему. 3. Вводим данные для входа в pgAdmin. 4. Слева правой кнопкой мыши Server->Register->Server... 5. В окне в разделе General указываем название для подключаемой БД. В разделе Connection указываем: * Host name/address - внутреннее [доменное имя проекта с postgreSQL](#подключение-к-кластеру). Внутреннее доменное имя вы можете найти на странице "Инфо" СУБД. * Maintenance database - название БД (по умолчанию `postgres`) * Username - имя пользователя, которое указывалось на этапе создания СУБД (если был активирован Superuser, то может быть как ваш, так и`postgres`). Важно учесть регистр. * Password - пароль указанного выше пользователя. Важно учесть регистр. 6. Нажимаем кнопку "Save" ```{eval-rst} .. admonition:: Хитрость :class: hint Чтобы экономить на потреблении проекта с pgAdmin рекомендуем ставить его на паузу после окончания работы. ``` ## Бэкапы ### Бэкапы по расписанию Сервис предоставляет возможность создания бесплатных бэкапов по расписанию. Бэкапы начнут создаваться со следующего дня в час их активации. Сервис хранит крайние **три** бэкапа. ```{eval-rst} .. admonition:: Важно :class: warning После остановки кластера ежедневные бэкапы будут отключены. Не забудьте активировать их после запуска кластера. ``` ### Бэкапы по клику Для создания бэкапа нажмите на кнопку "Создать бэкап" и введите его описание, чтобы отличить его от других. Имя бэкапа будет сгенерировано автоматически. Максимально вы можете создать **три** бэкапа, они также являются бесплатными. ![backups](../img/postgresql_backups.png) ## Восстановление кластера ```{eval-rst} .. admonition:: Внимание :class: attention После восстановления кластера будет создан новый сервис. Для подключения к восстановленному кластеру не забудьте изменить url в вашем проекте. Пользователь и пароли будут восстановлены автоматически. ``` Восстановить кластер можно по клику на иконку необходимого бэкапа. Если восстановление идет более 20 минут (время зависит от размера БД), то обратитесь в поддержку. ![restore](../img/postgresql_restore.png)