Документация / Развертывание
Развертывание платформы на ваших серверах
Для администратораПервое развертываниеОколо часа на готовом сервере
Платформа ставится на ваш сервер четырьмя командами. Первая собирает описание из трех слоев, вторая проверяет сервер, третья поднимает сервисы, четвертая показывает состояние. Каждая следующая команда запускается только после того, как прошла предыдущая.
Термины этой страницы. Установка - это ваша платформа на ваших серверах. Описатель установки - это файл, в котором записано, из чего она собрана. Собранные файлы конфигурации - это то, что платформа делает из описателя и по чему поднимаются сервисы. Руками эти файлы не правятся, об этом отдельно на странице о конфигурации.
Что нужно до начала
- Linux-сервер. Для пилота обычно хватает 12 ядер, 32 ГиБ памяти и 150 ГиБ SSD. Числа взяты из замера на живом сервере, где при полном развертывании платформа заняла около 7 ГиБ диска. Остальное место уходит под ваши данные, журналы и резервные копии, а для промышленной работы числа другие и собраны на странице требований к серверу.
- Docker Engine и Compose второй версии как плагин, то есть
docker compose, а не старыйdocker-compose. Точный диапазон версий фиксируется поставкой, практическим ориентиром до этого служит Docker Engine 24 и новее. - Точное время. Подписи поставки проверяются по времени сервера. Часы, разошедшиеся с эталонным временем, дают отказ уже в середине установки образов. NTP - это протокол, которым сервер сверяет время с эталоном.
- Свободный порт 443. Это единственный порт, который платформа публикует наружу.
- Три файла описателя и манифест выпуска. Базовый слой, профиль и манифест приезжают в поставке, третий слой вы пишете под свою компанию.
- Секреты. Пароли, ключи и сертификаты платформа в описателе не хранит, там стоят только их имена. Значения кладутся в хранилище секретов до развертывания.
Порядок развертывания
- Собрать конфигурацию из описателя
Команда сливает три слоя, проверяет получившееся описание по схеме и правилам и собирает файлы, по которым поднимутся сервисы. Сервер она не трогает, поэтому выполнять ее можно сколько угодно раз.
Команда на сервере сборка конфигурацииbm-deploy render \ --base base.yaml \ --profile-layer profiles/production.yaml \ --config nasha-ustanovka.yaml \ --manifest release/manifest.yaml \ --out ./compose render: 47 артефактов services.core: N=1 - плавная замена вырождается в замену с коротким простоем
Предупреждения о плавной замене не означают отказа. Они означают, что сервис объявлен в одном экземпляре, поэтому при обновлении он будет остановлен и поднят заново, а на это время его работа прервется на несколько секунд. Для показного стенда это обычное дело. Для промышленной работы число экземпляров задается профилем, и тогда обновление идет без перерыва.
- Проверить готовность сервера
Команда проверяет сам сервер, а не описание. Если хоть одна проверка отказала, развертывание не начинается и сервер остается нетронутым.
Команда на сервере проверка готовностиbm-deploy preflight \ --base base.yaml --profile-layer profiles/production.yaml \ --config nasha-ustanovka.yaml --manifest release/manifest.yaml preflight: среда не готова - операция не начинается [ОТКАЗ] docker-versions: docker/docker compose недоступны или не сообщают версию [ОТКАЗ] disk-space: на /var/lib/bm свободно 28.9 ГиБ, требуется 674.0 ГиБ [ОТКАЗ] host-clock: состояние синхронизации не определено
Так выглядит отказ на неподготовленной машине. На готовом сервере та же команда отвечает одной строкой
preflight: входы валидны, среда готоваи перечисляет пройденные проверки. - Поднять платформу
Команда переносит образы сервисов на сервер, приводит схемы баз данных в соответствие с версией кода и поднимает сервисы по собранной конфигурации. Каждый шаг она записывает в журнал. Если развертывание прервалось, его продолжают с места отказа, и уже перенесенные образы и примененные изменения схемы второй раз не выполняются.
Команда на сервере развертываниеbm-deploy install \ --base base.yaml --profile-layer profiles/production.yaml \ --config nasha-ustanovka.yaml --manifest release/manifest.yaml \ --license license.yaml
Повторный запуск на уже развернутой версии ничего не меняет и говорит об этом сообщением
установка версии 1.8.167 уже существует - изменений ноль. - Посмотреть, что получилось
Команда состояния отвечает, что развернуто на сервере сейчас. До первого развертывания она отвечает
установка отсутствует, после развертывания печатает версию, профиль и состояние операций.Команда на сервере состояниеbm-deploy status
Что проверяет готовность
Команда выполняет следующие проверки. Та, которой в вашей установке нечего проверять, пропускается, и пропуск печатается отдельной строкой с причиной.
| Проверка | Что смотрит | Когда пропускается |
|---|---|---|
docker-versions | Docker и Compose отвечают и попадают в диапазон, объявленный поставкой | Не пропускается |
disk-space | Свободное место в каталоге данных в сравнении с объявленными томами и запасом | Не пропускается |
bundle-space | Место под распаковку поставки, когда она ставится из файла | Когда поставка не импортируется |
data-dirs | Права на запись в каталоги данных, конфигурации и состояния | Не пропускается |
perimeter-ports | Порты, которые платформа публикует наружу, свободны | Не пропускается |
host-clock | Часы сервера синхронизированы | Для закрытой сети заменяется явным подтверждением |
gpu-runtime | Драйвер и среда исполнения видеокарт | Когда видеокарт в установке не объявлено |
model-weights | Веса языковых моделей доставлены на сервер | Когда языковая модель работает не на ваших серверах |
offline-bundle | Поставка лежит в вашей сети целиком | Когда профиль допускает интернет |
Если команда отказала
Каждая команда возвращает код, по которому виден класс отказа. Код говорит главное, тронут ли сервер, и это понятно до чтения самого сообщения.
| Код | Что означает | Что делать |
|---|---|---|
| 0 | Готово | Переходить к следующему шагу |
| 1 | Шаг операции упал, состояние записано в журнал | Продолжить операцию с места отказа |
| 2 | Неверный вход, то есть ошибка в описателе или в аргументах команды. Сервер не тронут | Читать сообщение проверки, там назван код правила и точное место в описателе |
| 3 | Не хватает явного подтверждения опасного действия | Перечитать, что именно подтверждается, и повторить с подтверждением |
| 4 | Операция уже идет | Дождаться ее конца либо разобрать зависшую операцию |
| 5 | Несовместимость версий | Обновляться цепочкой через промежуточную версию |
| 6 | Найдены правки конфигурации, сделанные в обход описателя | Вернуть правку в описатель либо принять расхождение явно |
| 7 | Состояние уже достигнуто, изменений ноль | Ничего, это обычный ответ повторного запуска |
| 8 | Проверка целостности не прошла | Не продолжать, разбирать причину |
| 9 | Недоверенный вход отклонен до распаковки | Проверить подпись поставки и источник файла |
Сообщения проверки описателя устроены одинаково. В квадратных скобках стоит код правила, дальше место в описателе и причина.
[logical-dump-in-production] backup.postgres_mode: режим логического дампа допустим только для показного профиля, в промышленном и закрытом запрещен [secret-unknown] perimeter.tls: секрет "perimeter-tls-cert" отсутствует в реестре секретов
Что открыть сразу после развертывания
Зайдите в интерфейс и откройте «Обзор установки». Экран отвечает на единственный вопрос первого дня, поднялось ли все, что должно было подняться.

Если состояние установки показано как «работает с ограничениями», смотрите таблицу частей ниже на том же экране. Она называет часть с замечанием и последствие ее отказа.