> For the complete documentation index, see [llms.txt](https://docs.edgegap.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.edgegap.com/ru/godot.md).

# Godot — Начало работы

Учитесь на практике и разверните свой первый выделенный сервер на Edgegap. К концу этого руководства вы бесплатно развернёте выделенный сервер с Edgegap.

## ✔️ Подготовка

Прежде чем начать, убедитесь, что вы [создали бесплатный аккаунт на Edgegap](https://app.edgegap.com/auth/register) (кредитная карта не требуется).

**Настройте несколько основных вещей на вашей машине для разработки:**

<details>

<summary><a href="https://www.docker.com/products/docker-desktop/">Установите Docker Desktop (или Docker CLI)</a></summary>

* [Установите Docker Desktop из официального источника](https://www.docker.com/products/docker-desktop/) (аккаунт не требуется).
* Перезагрузите компьютер после завершения установки.

</details>

<details>

<summary><a href="https://github.com/edgegap/edgegap-godot-plugin">Установите плагин быстрого старта выделенных серверов Edgegap для Godot</a></summary>

Этот плагин был протестирован и поддерживает версии Godot 4.x.x и новее.

Вариант 1) Установка из ZIP:

1. [Скачайте последний ZIP-архив.](https://github.com/edgegap/edgegap-godot-plugin/archive/refs/heads/main.zip)
2. Распакуйте ZIP в папку `addons` вашего проекта.

{% hint style="info" %}
Чтобы обновить плагин, установленный из ZIP, удалите старый плагин и замените его новым ZIP.
{% endhint %}

Вариант 2) Установка из исходников:

1. [Установите git-клиент (например, git-scm)](https://git-scm.com/).
2. Склонируйте наш репозиторий плагина в папку `addons` вашего проекта.

```
git clone git@github.com:edgegap/edgegap-godot-plugin.git
```

{% hint style="info" %}
Чтобы обновить плагин, установленный через git, откройте командную строку в папке плагина и выполните `git pull`.
{% endhint %}

</details>

{% hint style="info" %}
**Включите новый плагин Edgegap Servers Quickstart в разделе Project / Project Settings / Plugins.** Новая вкладка с названием "Edgegap" появится в правой панели рядом с Inspector. Если позже вы закроете панель и захотите открыть её снова, нужную опцию можно найти в Project / Tools / Edgegap.
{% endhint %}

## ⚙️ 1. Подключите аккаунт

☑️ Войдите в систему и убедитесь, что в Output нет новых ошибок, связанных с плагином Edgegap.

✅ Теперь можно перейти к следующему шагу.

## 🔧 2. Сборка игрового сервера

Независимо от того, используете ли вы Windows, Mac или Linux-машину, вам **нужно собрать сервер для Linux runtime**, поскольку большинство облачных провайдеров сегодня (включая Edgegap) работают на Linux. Не беспокойтесь, для этого с нашим плагином не требуется знание Linux.

☑️ **Проверьте Export Templates, чтобы убедиться, что плагин правильно настроил шаблон вашего Linux-сервера.**

{% hint style="info" %}
**Продвинутые пользователи** - при желании настройте [шаблон экспорта](https://docs.godotengine.org/en/latest/tutorials/export/exporting_projects.html). Внимание! Это может сломать вашу сборку.
{% endhint %}

☑️ **Добавьте в свой проект новый bootstrap-скрипт, чтобы автоматически запускаться как выделенный сервер.** Создайте новый узел в вашей главной сцене и привяжите новый скрипт в Inspector / Script / Load.

{% tabs %}
{% tab title="Пример стандартного bootstrap" %}
Это минимальный шаблон скрипта, который можно расширить в соответствии с потребностями вашего проекта.

{% file src="/files/a8dceb63cbea51009186e6f0c2cc2bdaf033645c" %}
{% endtab %}

{% tab title="Пример Netfox Forest Brawl" %}
Это кастомизированная версия bootstrap-скрипта для [netfox forest brawl](#netfox-forest-brawl-example) демо.

{% file src="/files/00bc477ce891e7aded2e9d041822391b636dfbd3" %}
{% endtab %}
{% endtabs %}

{% hint style="success" %}
Сборки сервера обычно по умолчанию используют порт `7777`. Если вы измените порт, пожалуйста, укажите тот же~~же~~ в вашем [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md#port-mapping) когда вы [#id-5.-upload-to-edgegap](#id-5.-upload-to-edgegap "mention").
{% endhint %}

☑️ Когда вас устроит конфигурация, нажмите **Собрать сервер**, дождитесь завершения процесса и убедитесь, что в Output нет новых ошибок. Выполнение этого шага приведёт к **появлению новой сборки в вашем проекте в папке** `build`**.**

✅ Теперь можно перейти к следующему шагу.

## 🐋 3. Контейнеризация сервера

Работа в команде разработчиков предполагает совместное использование кода. Когда что-то идет не так, последнее, что вы хотите услышать — «у меня работает». Серверы игр должны надежно запускаться на любой машине, поскольку успешные игровые серверы работают на тысячах серверов по всему миру.

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

{% hint style="info" %}
Мы рекомендуем посмотреть [«Никогда не устанавливайте локально» (видео)](https://www.youtube.com/watch?v=J0NuOlA2xDc\&ab_channel=Coderized). **Вам НЕ нужно использовать Dockerhub с Docker**.  Docker ≠ Dockerhub. Думайте о Docker как о движке для программирования, а о Dockerhub — как о его магазине приложений.
{% endhint %}

☑️ Начните с нажатия кнопки **Проверить Docker** чтобы убедиться, что вы завершили [#preparation](#preparation "mention").

<details>

<summary><a href="https://www.docker.com/products/docker-desktop/">Установите Docker Desktop (или Docker CLI)</a></summary>

* [Установите Docker Desktop из официального источника](https://www.docker.com/products/docker-desktop/) (аккаунт не требуется).
* Перезагрузите компьютер после завершения установки.

</details>

☑️ Вы можете настроить следующие параметры (или оставить значения по умолчанию):

* **Имя образа** — это уникальный идентификатор на ваш выбор, обозначающий вашу серверную сборку перед отправкой.
  * Обычно сюда входит название вашей игры — например, “my-game-server”.
* **Тег образа** — это идентификатор, указывающий на конкретную версию вашего образа.
  * Термин “артефакт сборки” иногда используется для обозначения конкретной версии вашего образа.
  * Отметки времени — отличный вариант для тегирования, например `2026.07.30-16.25.00-UTC` .
* **Путь к Dockerfile** можно использовать для настройки рецепта для ваших образов.
  * Мы рекомендуем пока оставить значение по умолчанию, подробнее вы сможете прочитать позже в разделе [#customize-image](#customize-image "mention").
* **Необязательные параметры сборки Docker** можно использовать, чтобы дополнительно указать Docker более тонкие нюансы.
  * Мы рекомендуем пока оставить значение по умолчанию, вы можете [прочитать подробнее позже в документации Docker](https://docs.docker.com/reference/cli/docker/image/build/#options).

{% hint style="info" %}
**Пересобрать из исходного кода** будет автоматически собирать и контейнеризовать, чтобы **ускорить вашу следующую сборку**.
{% endhint %}

☑️ Когда вас устроит конфигурация, нажмите **Контейнеризовать с Docker**, дождитесь завершения процесса и убедитесь, что в Output нет новых ошибок. Выполнение этого шага приведёт к **новый образ, появляющийся на вашей локальной машине**. Вы можете проверить это либо в Docker Desktop, на вкладке Images в разделе Local (по умолчанию), либо в CLI docker, выполнив `docker images` .

✅ Теперь можно перейти к следующему шагу.

## 🧪 4. Локальный тест сервера

Давайте попробуем развернуть локально (на вашей машине) и подключить игровой клиент, чтобы убедиться, что образ сервера работает правильно, прежде чем мы загружать и развертывать (что может занять некоторое время).

☑️ Вы можете настроить следующие параметры (или оставить значения по умолчанию):

* **Тег образа сервера** из предыдущего шага.
  * По умолчанию используется последний тег, который вы собрали с помощью плагина.
  * :cloud: появляющийся перед именем вашего образа, означает, что этот образ был загружен.
* **Необязательные параметры docker run** можно указать для публикации нескольких портов или запуска вашего образа на машинах macOS.
  * При необходимости вы можете опубликовать несколько портов для вашего контейнера, просто добавьте параметр `-p {internal port}/{protocol}` для каждого, например `-p 8080/tcp -p 7777/udp` чтобы опубликовать и сопоставить порт вашего сервера `8080` с произвольным внешним портом для TCP-соединения и портом сервера `7777` с произвольным внешним портом для UDP-соединения одновременно. **Найдите конфигурацию порта сервера в вашем bootstrap-скрипте.**
  * Если вы используете машину с архитектурой ARM (macOS M1, M2, M3 и т. д.), вы должны увидеть этот необязательный параметр, включённый в ваши Необязательные параметры сборки Docker: `--platform=linux/amd64` .

☑️ Когда вас устроит конфигурация, нажмите **Развернуть локальный контейнер**, дождитесь завершения процесса и убедитесь, что в Output нет новых ошибок. Выполнение этого шага приведёт к **запуску нового контейнера** на вашей машине разработки.

{% hint style="info" %}
Для более подробной информации см. Docker Desktop / Containers или команду Docker CLI `docker ps` .
{% endhint %}

☑️ Теперь пришло время **подключить игровой клиент Godot Editor к вашему локальному Docker-контейнеру** чтобы убедиться, что ваш серверный образ работает правильно. Найдите данные подключения клиента и введите:

* `localhost` или `0.0.0.0` (в большинстве случаев эквивалентно) вместо IP-адреса сервера,
* случайное внешнее значение порта, указанное в Docker Desktop / Containers.

<figure><img src="/files/240860673d9f8564b1fa79c869375fa725044aa3" alt=""><figcaption></figcaption></figure>

☑️ Как только вы убедитесь, что можете подключиться к локальному серверному контейнеру и играть без проблем, вы можете удалить контейнер 🗑️, чтобы освободить ресурсы на вашей машине для других программ.

✅ Теперь можно перейти к следующему шагу.

## ☁️ 5. Загрузить в Edgegap

Пора разместить ваш сервер в интернете! Теперь, когда ваш образ успешно может обслуживать игроков, мы можем загрузить его в Edgegap и начать запускать в любой точке мира. В этом руководстве мы будем использовать [**Реестр контейнеров Edgegap**](/ru/learn/advanced-features/edgegap-container-registry.md) (хранилище для образов).

☑️ Вы можете настроить следующие параметры (или оставить значения по умолчанию):

* **Имя приложения** на Edgegap может совпадать с именем вашего образа или быть изменено.
  * Пока мы решили скопировать имя вашего образа.
* **Версия приложения** на Edgegap может совпадать с вашим тегом или быть изменено.
  * Отметки времени — отличный вариант для имён версий приложения, например `2024.01.30-16.50.20-UTC` .
  * Несколько версий приложения могут указывать на один и тот же тег образа, например `v1.1.0` и `dev` .
  * Узнайте больше о [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md) позже.
* **Серверный образ** из шага [#id-3.-containerize-server](#id-3.-containerize-server "mention").

{% hint style="success" %}
Найдите любое имя образа и тег, хранящиеся на вашем компьютере в **Docker Desktop / Образы**.
{% endhint %}

☑️ Когда вас устроит конфигурация, нажмите **Загрузить образ и создать версию приложения**, дождитесь завершения процесса и убедитесь, что в Output нет новых ошибок.

☑️ Вас перенаправят в наш [Dashboard](https://app.edgegap.com/), где вы можете настроить дополнительные параметры. Выполнение этого шага приведёт к [созданию новой версии приложения](https://app.edgegap.com/application-management/applications/list), а также к тому, что ваш [артефакт сборки будет помечен тегом и загружен в Container Registry Edgegap](https://app.edgegap.com/registry-management/repositories/list).

* **Версия приложения** на Edgegap может совпадать с вашим тегом или быть изменено.
  * Отметки времени — отличный вариант для имён версий приложения, например `2024.01.30-16.50.20-UTC` .
  * Несколько версий приложения могут указывать на один и тот же тег образа, например `v1.1.0` и `dev` .
  * Узнайте больше о [Приложения и версии](/ru/learn/orkestraciya/application-and-versions.md) позже.

☑️ Теперь вам будет предложено указать порт для новой версии приложения. Убедитесь, что указан тот же самый порт сервера, что и на шаге [#id-4.-test-server-locally](#id-4.-test-server-locally "mention") (по умолчанию 7777).

✅ Теперь можно перейти к следующему шагу.

## 🚀 6. Развернуть в облаке

Это последний шаг в этом руководстве, после которого у вас будет сервер, развернутый в облаке Edgegap, к которому игроки из любой точки мира смогут подключаться.

☑️ **Выберите приложение и версию** из предыдущего шага для развертывания.

☑️ Как только будете готовы, нажмите **Развернуть в облаке**, дождитесь достижения [/pages/4ad5d792bc82dceeaec6d7dd56165ae188da0417#id-3.-deployment-ready](https://docs.edgegap.com/ru/pages/4ad5d792bc82dceeaec6d7dd56165ae188da0417#id-3.-deployment-ready "mention"). Выполнение этого шага приведёт к [запуску нового Развертывания](https://app.edgegap.com/deployment-management/deployments/list) в вашей учетной записи Edgegap.

☑️ Убедитесь, что в выводе консоли нет новых ошибок. Также проверьте, что ваши [Развертывания](/ru/learn/orkestraciya/deployments.md#container-logs) не показывают ошибок и ваши [Развертывания](/ru/learn/orkestraciya/deployments.md#container-metrics) не указывают на 100% загрузку ресурсов (vCPU или память), иначе новые подключения игроков могут быть отклонены, или ваш сервер застрянет в цикле перезапуска. См. ниже шаги по устранению неполадок для решения любых проблем.

☑️ Теперь мы выполним финальный тест и **подключим игровой клиент Godot Editor к вашему облачному развёртыванию**. Найдите данные подключения клиента и введите:

* **Хост** **URL** указывающий на IP-адрес сервера,
* **Внешний порт** сопоставляемый с [внутренним портом прослушивания сервера](/ru/learn/orkestraciya/application-and-versions.md#port-mapping).

<figure><img src="/files/98226953355fc223bd5fc85adc8bffb6b90d8bec" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Внешний порт вашего развёртывания в облаке Edgegap будет выбран случайным образом, чтобы потенциальный злоумышленник (хакер) замедлялся и обнаруживался до того, как сможет нанести ущерб.
{% endhint %}

{% hint style="warning" %}
**Отключите VPN при тестировании** для более реалистичных условий и получения [развёртывания с низкой задержкой](/ru/learn/orkestraciya/deployments.md#server-placement).
{% endhint %}

☑️ Как только вы убедитесь, что можете подключиться к вашему развёртыванию без проблем и завершите тестирование, **Остановите ваше развёртывание** чтобы освободить ресурсы в вашем аккаунте для следующей сборки.

* Если вы столкнётесь с проблемами, [просмотрите логи на Панели управления вашего развёртывания](https://app.edgegap.com/deployment-management/deployments/list).
* Если вы не сможете разобраться с проблемой, мы сидим в нашем [сообществе Discord](https://discord.gg/NgCnkHbsGp) и будем рады помочь.

🙌 Поздравляем с вашим первым развёртыванием в Edgegap! Если хотите узнать больше, продолжайте чтение.

## 👉 Следующие шаги

После того как у вас настроена рабочая клиент/серверная система, убедитесь, что **сохранили копию вашего проекта** (используя систему контроля версий, такую как git), чтобы вы всегда могли проследить свои шаги в случае возникновения проблем.

Продолжайте чтение, чтобы узнать больше о темах, связанных с жизненным циклом сервера и обнаруживаемостью.

{% hint style="info" %}
Если вам нужна помощь, [свяжитесь с нами через Discord](https://discord.gg/MmJf8fWjnt). Для поддержки по играм в реальном времени см. нашу [систему тикетов](https://edgegap.atlassian.net/servicedesk/customer/portal/3).
{% endhint %}

### Остановка развёртываний

Когда матч закончится (или игроки уйдут), ваше развёртывание можно остановить, чтобы сэкономить средства. [Запуск пустого или лишь частично заполненного сервера может неоправданно увеличить ваши расходы!](https://edgegap.com/blog/how-session-fill-rate-affects-your-multiplayer-hosting-costs)

{% hint style="success" %}
Примеры для Godot Script скоро появятся!
{% endhint %}

{% hint style="warning" %}
Подключите свой [Endpoint Storage](/ru/docs/endpoint-storage.md) чтобы сохранять журналы развертывания, иначе они будут удалены!
{% endhint %}

### Внедрённые переменные

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

* [Переменные развёртывания](/ru/learn/orkestraciya/deployments.md#injected-environment-variables) — автоматически предоставляются Edgegap,
* [Переменные матчмейкинга](/ru/learn/podbor-igrokov/matchmaker-in-depth.md#injected-environment-variables) — автоматически предоставляются Edgegap при использовании [Подбор игроков](/ru/learn/podbor-igrokov.md),
* [Переменные версии приложения](/ru/learn/orkestraciya/application-and-versions.md#injected-variables) — настраиваемые пары ключ-значение, задаваемые вами.

{% hint style="success" %}
Примеры для Godot Script скоро появятся!
{% endhint %}

### Автоматизация сессий

{% hint style="warning" %}
**Ручной запуск ваших развертываний с вставкой URL и портов не подойдёт для игры в реальном времени.**
{% endhint %}

Автоматизируйте популярные игровые сценарии для управления сессиями и масштабирования по требованию с помощью одного из:

{% columns %}
{% column width="33.33333333333333%" %}
[Подбор игроков](/ru/learn/podbor-igrokov.md):

* Короткие раунды
* Матчи по запросу
* Рейтинговая система и/или\
  Пользовательские правила
  {% endcolumn %}

{% column width="33.33333333333333%" %}
[Server Browser](/ru/learn/server-browser.md):

* Постоянные или раунды
* Региональные социальные хабы
* Автоматическое назначение и/или\
  Пользовательский поиск
  {% endcolumn %}

{% column width="33.33333333333333%" %}
Собственный бэкенд:

* Миграция игр в реальном времени
* [Развёртывайте с помощью API v2](/ru/docs/api/vydelennye-servery.md)
* [Наблюдайте за вебхуками](/ru/learn/orkestraciya/deployments.md#webhooks)
  {% endcolumn %}
  {% endcolumns %}

{% hint style="success" %}
Примеры для Godot Script скоро появятся!
{% endhint %}

### Оптимизация использования

Несколько советов, которые помогут начать оптимизацию использования вашего сервера:

**Более высокий tick rate означает больше обновлений, а значит большее потребление CPU и исходящего трафика.**

* По умолчанию Godot использует 60 тиков в секунду, что отлично подходит для динамичных шутеров или игр с высокой чувствительностью к задержкам. Другим жанрам может хватить 30 Гц или даже 15 Гц.
* Скрытая цена более высокого tick rate — большее количество циклов CPU (в секунду) для (распаковки) данных и пересчёта сервер-авторитетных свойств и процедур. Будьте осторожны, если в вашей игре много игроков в матче (10+), много узлов с коллайдерами, сложные физические симуляции или много ботов/союзников.
* Проверьте отзывчивость игры при разных tick rate в настройках netcode. Для ENET см. Project Settings / Physics / Common / Physics Ticks Per Second.

**Как выбрать правильный сетевой протокол? Сначала сделайте рабочий вариант, потом улучшайте.**

* Встроенный ENET Godot с протоколом UDP по умолчанию — отличный выбор по умолчанию, обеспечивающий производительность и совместимость на самом широком диапазоне устройств и сценариев использования.
* Некоторым играм может быть интересно поэкспериментировать с TCP, WS, WebRTC или другими протоколами. Это может повысить надёжность соединения с мобильными устройствами и консолями, особенно в публичных сетях (сотовых, корпоративных, кафе, гостиничный Wi‑Fi и т. д...), но это, безусловно, потребует дополнительных усилий по разработке. Спросите себя, критично ли это для вашей целевой аудитории.
* Использование нескольких протоколов параллельно, чтобы важные обновления доставлялись с приоритетом, может улучшить пользовательский опыт в некоторых жанрах (например, MMO), но это требует значительных дополнительных усилий по разработке и может сильно усложнить ваш проект.
* Выбирайте свои битвы с умом: в разработке игр и без того хватает сложностей.

### Настроить образ

Мы также поддерживаем добавление собственного Dockerfile для пользователей, которым нужно больше контроля над своими образами из-за оптимизации размера сборки, лишних зависимостей или необходимости более сложного процесса запуска. При желании вы можете указать путь к собственному Dockerfile на шаге [#id-3.-containerize-server](#id-3.-containerize-server "mention"). Теперь мы поделимся несколькими советами и лучшими практиками “сделай сам”.&#x20;

**Всегда убедитесь, что вы работаете с рабочей сборкой сервера.**

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

**Всегда тестируйте локально перед загрузкой.**

* Локальное тестирование вашего образа сэкономит вам массу времени, пока вы ждёте завершения загрузки. Это также совершенно бесплатно ✨, поскольку не требует ресурсов Edgegap.
* При локальном тестировании обязательно правильно задайте внутренний порт:

  ```bash
  docker run \
    -p 7777/udp \
    -e ARBITRIUM_PORTS_MAPPING='{"ports":{"gameport":{"internal":7777}}}' \
    'registry.edgegap.com/<repository>:<tag>'
  ```

**Убедитесь, что у вас есть базовые навыки. Каждый Dockerfile нуждается в нескольких обязательных командах:**

* `FROM {image}` — это ваш базовый образ; обычно мы используем долгосрочно поддерживаемый Linux, но подойдёт любой базовый образ на Linux. Обычно это публичные образы, хранящиеся на Docker Hub. Справочник по Dockerfile здесь. [Справочник по Dockerfile здесь](https://docs.docker.com/reference/dockerfile/#from).
* `COPY {source} {destination}` чтобы скопировать вашу серверную сборку Linux с хост-машины внутрь образа, чтобы вы могли запустить её позже. [Справочник по Dockerfile здесь](https://docs.docker.com/reference/dockerfile/#copy).
* `USER {user}` должен следовать после команды [useradd (ubuntu)](https://manpages.ubuntu.com/manpages/bionic/man8/useradd.8.html) или эквивалентной; лучше не запускать всё от `root` на случай большей безопасности. [Справочник по Dockerfile здесь](https://docs.docker.com/reference/dockerfile/#user).
* `CMD {command}` будет последней строкой, скорее всего вызывающей `StartServer.sh` или какой-то скрипт запуска, чтобы убедиться, что ваш сервер корректно инициализируется после завершения настройки. [Справочник по Dockerfile здесь](https://docs.docker.com/reference/dockerfile/#cmd).
* НЕ используйте `VOLUME` — вы не сможете смонтировать таким образом какое-либо локальное хранилище на Edgegap; вместо этого рассмотрите нашу функцию Endpoint Storage и используйте S3 bucket, см. [Endpoint Storage](https://docs.edgegap.com/docs/deployment/endpoint-storage),
* `EXPOSE 7777/UDP`  не требуется! На самом деле это не сделает внутренний порт сервера доступным извне контейнера; это лишь подсказка для разработчика, а порт должен быть
  * опубликован при локальном тестировании с помощью `docker run <image> -p 7777/udp` ,
  * или сопоставлен в [Сопоставлении портов Edgegap](/ru/learn/orkestraciya/application-and-versions.md#other-parameters-optional).

**Откладывайте объявление параметров до самого последнего возможного момента. Из-за долгого времени сборки сервера конфигурируемость важнее компонуемости.** [**Применяйте этот подход к командам Dockerfile, чтобы быстрее собирать и загружать.**](https://medium.com/@esotericmeans/optimizing-your-dockerfile-dc4b7b527756)

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

**НЕ запускайте базы данных в развертываниях Edgegap.**

* Развертывания Edgegap не предназначены для длительно работающих процессов и могут быть завершены после долгого времени работы без предварительного уведомления. База данных (даже распределённая), работающая таким образом, может быть завершена, что приведёт к необратимой потере данных. Если вам нужна база данных, рассмотрите сторонний DBaaS.
* Рассмотрите использование наших [Управляемых кластеров](https://app.edgegap.com/cluster-management/clusters/list) для размещения баз данных и длительно работающих сервисов.
