# Управляемые дополнения: Postgres и Redis

Source: https://support.kapsulehost.com/ru-ru/site-addons

Вкладка Addons позволяет подключить к сайту управляемую базу данных PostgreSQL или управляемый инстанс Redis без необходимости создавать и обслуживать для этого отдельный сервер. KapsuleHost выделяет ресурсы, выдаёт строку подключения и аккуратно демонтирует их при удалении.

## Где находятся дополнения

Откройте **Веб-сайты**, выберите сайт, откройте группу **Приложения** в левом меню сайта и перейдите в **Дополнения**. Страница называется **Управляемые дополнения**.

В каталоге доступны два варианта:

| Дополнение | Типичное использование |
|---|---|
| PostgreSQL | Основное хранилище данных для приложения, которое не использует MySQL |
| Redis | Кэширование, хранение сессий и очереди фоновых задач |

Это отдельные сущности, не связанные с базой данных MySQL, которая идёт в комплекте со стандартным хостинг-сайтом. Та база находится на вкладке **База данных** и не требует подготовки: см. [Подключение к базе данных через SSH-туннель](https://support.kapsulehost.com/ru-ru/database-ssh-tunnel).

![Страница управляемых дополнений для сайта в KPanel](https://support.kapsulehost.com/help/screenshots/site-addons.3f3b5ee3.webp)

## Запрос дополнения

1. Найдите дополнение в разделе **Добавить управляемую базу данных**.
2. Нажмите **Добавить на сайт**.

Запрос фиксируется немедленно, и дополнение появляется в разделе **Ваши дополнения** со значком **PENDING** и пометкой *Waiting for provisioner*. Страница обновляется автоматически каждые пятнадцать секунд, так что её можно оставить открытой.

Фоновая задача обрабатывает ожидающие запросы каждые несколько минут, создаёт отдельную базу данных и отдельного пользователя для вашего сайта и записывает зашифрованную строку подключения. После этого статус меняется на **ACTIVE**.

> **Note:** Для запроса или удаления дополнения требуется право **sites:write**. Участники команды с доступом только для чтения видят, какие дополнения существуют и их статус, но кнопки для них скрыты.

### По одному дополнению каждого типа на сайт

На одном сайте может быть только одно дополнение PostgreSQL и одно дополнение Redis. Запрос второго дополнения того же типа будет отклонён с сообщением о том, что оно уже подготовлено, а каталог скрывает вариант после его установки. Когда установлены оба дополнения, раздел каталога отображает надпись **All available addons are installed**.

## Чтение статуса

| Статус | Значение |
|---|---|
| PENDING | Запрошено, в очереди на подготовку |
| PROVISIONING | Создаётся прямо сейчас |
| ACTIVE | Готово к использованию |
| FAILED | Подготовка не завершена; причина указана в строке |
| DELETED | Удалено, больше не отображается |

Строка со статусом **FAILED** показывает под собой фактический текст ошибки, а не общее сообщение. Если причина не позволяет предпринять самостоятельные действия, процитируйте её дословно в обращении в поддержку: см. [Создание обращения в поддержку](https://support.kapsulehost.com/ru-ru/opening-a-support-ticket).

## Получение строки подключения

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

Нажмите **Копировать подключение**, чтобы скопировать полную строку подключения в буфер обмена. Она расшифровывается на сервере только для этого конкретного запроса и никогда не выводится на странице, поэтому демонстрация экрана и скриншоты её не раскроют. Каждое раскрытие записывается в журнал аудита сайта и отображается в [Журнале активности сайта](https://support.kapsulehost.com/ru-ru/site-activity-log).

Строка имеет обычный URL-формат для каждого движка и содержит хост, порт, пользователя, пароль и имя базы данных, созданные для этого сайта.

## Использование в вашем приложении

Вставьте строку подключения туда, откуда ваше приложение считывает конфигурацию. Для сайта на Node.js правильное место для неё, вкладка [Secrets](https://support.kapsulehost.com/ru-ru/site-secrets), под ключом вроде `DATABASE_URL` или `REDIS_URL`, в окружении **production**.

> **Warning:** Не прописывайте строку подключения непосредственно в файл, который вы коммитите. Она содержит действующий пароль. Если она попадёт в удалённый репозиторий git, её нужно считать скомпрометированной, и единственное настоящее решение, удалить дополнение и запросить новое, поскольку учётные данные нельзя заменить на месте из панели.

## Удаление дополнения

Нажмите **Delete** в соответствующей строке. KPanel попросит подтверждение и прямо предупредит о последствиях: это удалит управляемую базу данных, и данные будет невозможно восстановить.

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

> **Important:** При удалении управляемого дополнения резервная копия не создаётся, и отменить действие невозможно. Если в нём есть что-то, что вы хотите сохранить, сначала выгрузите данные с помощью `pg_dump` или `redis-cli --rdb`, пока дополнение ещё активно, а строка подключения ещё работает.

## Выбор между вариантами

**Используйте PostgreSQL**, когда вашему приложению нужна реляционная база данных и оно написано под Postgres: строгие ограничения, транзакции, столбцы JSON и полнотекстовый поиск, которые иначе пришлось бы реализовывать отдельно.

**Используйте Redis** для того, что может исчезнуть без потерь: кэшированные фрагменты, счётчики ограничения частоты запросов, хранение сессий и очереди задач. Относитесь к нему как к быстрому, но непостоянному хранилищу, а не как к системе учёта.

**Используйте встроенную базу данных MySQL** для WordPress и для всего, что уже написано под MySQL. Добавление дополнения Postgres на сайт WordPress не даёт никакой пользы, потому что WordPress не умеет с ним взаимодействовать.

## Устранение неполадок

**Дополнение долгое время находится в статусе PENDING.** Обработчик запускается по расписанию, а не мгновенно. Оставьте страницу открытой, поскольку она обновляется сама, и проверьте позже. Если статус не изменился после нескольких проходов, создайте обращение в поддержку, указав домен сайта и тип дополнения.

**Подготовка завершилась ошибкой FAILED.** Прочитайте текст ошибки в строке. Удалите неудачное дополнение и запросите его снова, это безопасно: за строкой со статусом FAILED никогда не стояла действующая база данных.

**Кнопка "Копировать подключение" не работает.** Некоторые браузеры блокируют запись в буфер обмена, если вкладка не находится в фокусе. Сначала щёлкните на странице, затем снова нажмите кнопку.

**Приложение не может подключиться.** Проверьте по порядку три вещи: что статус дополнения **ACTIVE**, что вы скопировали строку, а не ввели её вручную, и что ваше приложение считывает именно то значение, которое вы установили, а не устаревшее значение из предыдущего развёртывания. Обычно для применения новой конфигурации требуется перезапуск.

**После повторного развёртывания в подключении отказано.** Убедитесь, что строка подключения в вашей конфигурации по-прежнему совпадает с той, что указана на этой странице. Удаление и повторный запрос дополнения создают нового пользователя и новый пароль, поэтому старая строка работать не будет.

## Что дальше

- [Хранение секретов приложения для сайта](https://support.kapsulehost.com/ru-ru/site-secrets), подходящее место для хранения строки подключения.
- [Подключение к базе данных через SSH-туннель](https://support.kapsulehost.com/ru-ru/database-ssh-tunnel) для встроенной базы данных MySQL.
- [Настройки сайта](https://support.kapsulehost.com/ru-ru/site-settings) для остальных параметров конфигурации на уровне сайта.
