> 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.

{% embed url="<https://youtu.be/fcwnUrlkjhA>" %}

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

Прежде чем начать, обязательно [создайте бесплатную учетную запись в Edgegap](https://app.edgegap.com/auth/register) (кредитная карта не требуется). Вы можете [позже пригласить членов вашей команды](https://app.edgegap.com/user-settings?tab=organizations), даже если у них ещё нет учётной записи Edgegap.

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

<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://store.godotengine.org/asset/edgegap-godot/dedicated-game-server-hosting-for-godot/">Установите плагин Edgegap Godot Dedicated Servers Quickstart</a></summary>

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

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

1. Откройте свой проект в редакторе Godot.
2. Откройте вкладку Asset Store и найдите "edgegap".
3. Выберите "Game Server Hosting for Godot" и скачайте.

{% hint style="info" %}
Чтобы обновить плагин, перейдите в Project / Project Settings / Plugins / Edit и выберите Update.
{% endhint %}

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

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

```bash
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”.
* **Тег образа** — это идентификатор, указывающий на конкретную версию вашего образа.
  * Термин “build artifact” иногда используют для обозначения конкретной версии вашего образа.
  * Временные метки — отличный вариант по умолчанию для тегов, например `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 (по умолчанию), либо через docker CLI, выполнив `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 и т. д.), вы должны увидеть этот дополнительный параметр в разделе Additional docker build parameters: `--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="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2FCDGTUe5ests3DI3u9rTV%2Fimage.png?alt=media&amp;token=8c4799d8-0622-4142-91a5-93fd1816149c" 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 к вашему облачному развертыванию**. Возьмите **Host развертывания** вместо IP сервера и **внешний порт развертывания**, укажите их в данных подключения клиента и играйте.

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fz9xjzvZwKSIp9IeC9qo8%2Fimage.png?alt=media&amp;token=e3f345ac-848d-4469-b66f-3655cd393cf3" 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" %}
Подключите свой [Хранение конечных точек](/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%" %}
[Браузер серверов](/ru/learn/brauzer-serverov.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 Hz или даже 15 Hz.
* Скрытая цена более высокого tick rate — большее число циклов CPU (в секунду) для упаковки и распаковки данных, а также пересчёта сервер-авторитетных свойств и процедур. Будьте осторожны, если в вашей игре много игроков на матч (10+), много узлов с коллайдерами, сложные физические симуляции или много ботов/союзников.
* Проверьте отзывчивость игры при разных tick rate в настройках netcode. Для ENET см. Project Settings / Physics / Common / Physics Ticks Per Second.

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

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

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

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

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

* Прежде чем предполагать, что проблема связана с пользовательским 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) для размещения баз данных и длительно работающих сервисов.
