SERVER / QUICK START

Руководство по Linux-серверу

Пошаговое руководство по развёртыванию через Docker: подготовка, compose, запуск, обслуживание и частые вопросы.

Это руководство поможет вам быстро развернуть игровой сервер на Linux с помощью Docker. Даже если у вас мало технического опыта, вы сможете выполнить все шаги до конца.

1. Подготовка

  • Необходимо использовать облачный сервер, например Alibaba Cloud, Tencent Cloud, AWS или аналогичный сервис, либо VPS.
  • Обязательно: запросите действительный TOKEN авторизации игры (GAME_TOKEN) у официальной команды. Без TOKEN нельзя открыть публичный сервер.
  • Подготовьте сервер с фиксированным публичным IP-адресом, который отвечает на ping и доступен по сети, иначе заявка не пройдёт проверку.
  • Установите Docker и Docker Compose (рекомендуется) либо убедитесь, что среда выполнения сервера соответствует требованиям игры.
  • При подаче заявки на TOKEN отправьте письмо на team@nextindie.cn.

Шаблон заявки на сервер · Лицензионное соглашение и соглашение об игровых сервисах

Text
I. Основная информация о заявителе
UID пользователя: [Укажите ID пользователя вашей игровой учётной записи]
Публичный IP-адрес сервера: [Укажите уникальный фиксированный публичный IP-адрес; он должен отвечать на ping]
Физический регион сервера: [Например: Азия, Северная Америка]
Краткое описание назначения заявки и масштаба сообщества: [Например: личный сервер, сервер для определённого игрового сообщества]
II. Важно: обязательство о некоммерческой эксплуатации и уведомление о соблюдении правил
Как оператор этого сервера, я внимательно ознакомился с главой 10 Лицензионное соглашение и соглашение об игровых сервисах и торжественно принимаю на себя следующие юридически обязательные обязательства:

Полностью некоммерческий характер: Этот сервер будет иметь строго некоммерческий характер.
Разрешены только безвозмездные пожертвования: Этот сервер может принимать только добровольные и безвозмездные пожертвования без какой-либо встречной выгоды со стороны игроков, которые поддерживают сообщество. Все полученные средства могут использоваться только для покрытия прямых расходов на физический хостинг, таких как аренда серверного оборудования, сетевой трафик и защита от DDoS.
Запрещена продажа игровых активов и характеристик: Этот сервер никогда не будет прямо, косвенно или в скрытой форме продавать любых внутриигровых виртуальных существ или динозавров, данные персонажей, уровни, бонусы к характеристикам, оружие, экипировку, строительные материалы, игровые токены или любые виртуальные предметы, влияющие на баланс.
Запрещён скрытый обмен на привилегии: Этот сервер никогда не будет использовать такие формы, как розыгрыши для донатеров, бонусы за пожертвование, платные кастомные персонажи или существа, а также платный порог входа на сервер или в сообщество как условие обмена на внутриигровые виртуальные предметы или привилегии.
Механики азартных игр запрещены: Ни на этом сервере, ни в связанных с ним сообществах, таких как группы QQ или серверы Discord, не будут создаваться лутбоксы, розыгрыши, рулетки или механики возврата средств с признаками азартной игры, связанные с виртуальными игровыми ресурсами.
III. Изоляция конфиденциальности и подтверждение требований безопасности
Я уведомлён и согласен с тем, что сбор официальной стороной IP-адреса этого сервера и выдача TOKEN необходимы для античит-безопасности и исполнения договора, а такая обработка данных соответствует требованиям законодательства о конфиденциальности.
Я обязуюсь надлежащим образом хранить выданный TOKEN авторизации и ни при каких обстоятельствах не передавать, не сдавать в аренду и не раскрывать его третьим лицам. Я несу полную ответственность за любые нарушения, вызванные ненадлежащим управлением TOKEN или настройками IP.
Я понимаю, что отправка этого письма с заявкой на открытие сервера официальной команде означает мою цифровую подпись и безусловное согласие со всеми юридическими условиями Лицензионное соглашение и соглашение об игровых сервисах. При нарушении любого из перечисленных выше запретов официальная команда вправе без предварительного уведомления аннулировать TOKEN авторизации, внести IP в чёрный список, а также применить блокировку аккаунта на всей платформе и блокировку устройства.

2. Установка Docker и Docker Compose

2.1 Установка Docker

Если вы используете облачный сервер с предустановленным контейнерным сервисом Docker или Docker уже установлен и работает в вашей системе, вы можете пропустить этот раздел и перейти к следующему шагу.

Выполните следующую команду для загрузки и установки Docker (работает в большинстве дистрибутивов Linux):

Bash
curl -fsSL https://get.docker.com | bash

После установки запустите Docker и включите автозапуск при загрузке системы:

Bash
systemctl start docker
systemctl enable docker

Проверьте установку:

Bash
docker --version

2.2 Установка Docker Compose

Современные установки Docker обычно включают плагин docker compose. Если нет, установите отдельный бинарный файл docker-compose. В этом руководстве везде используется docker-compose. Если ваша система поддерживает только плагин, замените на docker compose.

Способ 1: Проверить встроенный плагин

Bash
docker compose version

Способ 2: Установить отдельный бинарный файл

Bash
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

3. Создание каталога сервера и файлов конфигурации

3.1 Использование каталога по умолчанию после входа

В этом руководстве предполагается использование каталога по умолчанию после входа для хранения docker-compose.yml и .env. Дополнительная папка проекта не требуется. Если вы входите как root, этот каталог обычно /root.

После входа в систему оба конфигурационных файла располагаются в вашем домашнем каталоге (например, при входе как root это /root):

Text
/root/
├── docker-compose.yml   ← Конфигурация Docker Compose
└── .env                  ← Переменные окружения (настройки сервера)

3.2 Создание файла переменных окружения .env

Файл .env содержит параметры сервера. Используйте системный редактор vi для его создания:

Bash
vi .env

В открывшемся файле ниже приведены две полные готовые конфигурации. Выберите ту, что соответствует нужному режиму, вставьте её и укажите GAME_TOKEN (для публичного сервера также задайте GAME_IP с вашим реальным публичным IP):

Сервер в режиме песочницы

INI
# TOKEN авторизации игры (запросите у официальной команды; обязателен для публичных серверов)
GAME_TOKEN=
# Название сервера
GAME_NAME=The Sandbox
# Публичный IP (127.0.0.1 только для локального теста; укажите реальный публичный IP, чтобы подключались другие)
GAME_IP=203.0.113.10
# Порт сервера (UDP)
GAME_PORT=26666

# Время исчезновения трупа (секунды)
GAME_DEAD_TIME=600
# Количество потомков: 0 = отключено, 1 = один, 2 = два и т. д.
GAME_CHILD=1

# Включить режим песочницы
GAME_MODE_SANDBOX=true

# Зарегистрировать в глобальном списке серверов
GAME_GLOBAL=true
# Максимум игроков
GAME_MAX_PLAYERS=50
# Узел сервера (только подсказка региона для игроков; без функционального эффекта)
GAME_NODE=AS
# Публичный сервер
GAME_PUBLIC=true

# Разрешить мастерство генов
GAME_GENE_SKILLFUL=true
# Разрешить получение мастерства за убийства
GAME_KILL_SKILLFUL=true
# Разрешить изучение генов
GAME_LEARN=true
# Сложность игры (чем больше, тем труднее)
GAME_HARD=1
# Без эволюционных яиц (яйца всегда остаются в текущем виде)
GAME_EVOL=false

# Название карты
GAME_MAP=Oasis
# Разрешить ИИ-спутника
GAME_AI_MATE=true

Сервер в режиме эволюции

INI
# TOKEN авторизации игры (запросите у официальной команды; обязателен для публичных серверов)
GAME_TOKEN=
# Название сервера
GAME_NAME=The Evolution
# Публичный IP (127.0.0.1 только для локального теста; укажите реальный публичный IP, чтобы подключались другие)
GAME_IP=203.0.113.10
# Порт сервера (UDP)
GAME_PORT=26666

# Время исчезновения трупа (секунды)
GAME_DEAD_TIME=1200
# Количество потомков: 0 = отключено, 1 = один, 2 = два и т. д.
GAME_CHILD=1

# Включить режим эволюции
GAME_MODE_EVOL=true
# Разрешить появление эволюционных яиц в кладке (это НЕ переключатель режима эволюции)
GAME_EVOL=true
# Включить первобытный режим
GAME_MODE_PRIMEVAL=true

# Зарегистрировать в глобальном списке серверов
GAME_GLOBAL=true
# Максимум игроков
GAME_MAX_PLAYERS=50
# Узел сервера (только подсказка региона для игроков; без функционального эффекта)
GAME_NODE=AS
# Публичный сервер
GAME_PUBLIC=true

# Сложность игры (чем больше, тем труднее)
GAME_HARD=0
# Разрешить ИИ-спутника
GAME_AI_MATE=true

Чтобы сохранить и выйти: нажмите i для входа в режим редактирования. После редактирования нажмите Esc, введите :wq и нажмите Enter. Полный список параметров см. в Руководстве по настройке игрового сервера. Для параметров-переключателей просто укажите имя переменной и присвойте любое значение (например, 1) для включения.

💡 Совет: Нажмите кнопку Скачать на блоках кода выше, чтобы сохранить пример как файл. Скачанные файлы .env получат имя sandbox.env или evolution.env — переименуйте в .env перед развёртыванием.

3.3 Создание файла docker-compose.yml

Bash
vi docker-compose.yml
YAML
services:
  # Игровое приложение
  gameserv:
    image: hkccr.ccs.tencentyun.com/mesozoicdawn/gameserver:latest
    container_name: gameserv
    # Файл окружения (если вы переименовали его, например sandbox.env, измените имя ниже)
    env_file:
      - .env
    volumes:
      - /data/Database:/app/GameServ_Data/Database
      - /data/Mods:/app/GameServ_Data/StreamingAssets/Mods
      - /data/Logs:/app/GameServ_Data/Logs
      # Монтировать часовой пояс хоста
      - /etc/localtime:/etc/localtime:ro
      # Сигналы уведомлений об обновлении Watchtower
      - /data/Signals:/app/GameServ_Data/Signals
      - /data/Signals:/signals
    environment:
      - GAME_AUTO_RESTART=1
      - TZ=Asia/Shanghai

    labels:
      - "com.centurylinklabs.watchtower.scope=gameserv"
      - "com.centurylinklabs.watchtower.enable=true"
      # Уведомить игровой сервер о сохранении перед обновлением
      - "com.centurylinklabs.watchtower.lifecycle.pre-update=/usr/local/bin/watchtower-pre-update gameserv"
      - "com.centurylinklabs.watchtower.lifecycle.pre-update-timeout=2"

    restart: unless-stopped
    stop_grace_period: 60s

    healthcheck:
      test: ["CMD-SHELL", "pgrep -f GameServ.x86_64 || exit 1"]
      interval: 50s
      timeout: 5s
      retries: 3
      start_period: 60s

    # Режим хоста (снижает задержку)
    network_mode: host

    deploy:
      resources:
        limits:
          cpus: '1.8'
          memory: 3800M

  # Watchtower — автообновление
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      # Docker 26+ требует явно указать версию API
      - DOCKER_API_VERSION=1.40
      - WATCHTOWER_POLL_INTERVAL=300
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_TIMEOUT=120s

    command:
      - "--label-enable"
      - "--scope"
      - "gameserv"
      - "--cleanup"
      # Включить хуки жизненного цикла
      - "--enable-lifecycle-hooks"

    restart: unless-stopped

    deploy:
      resources:
        limits:
          cpus: '0.2'
          memory: 128M
  • network_mode: host означает, что контейнер использует сеть хоста напрямую, поэтому GAME_PORT в .env должен соответствовать порту, открытому в брандмауэре.
  • Каталоги данных (/data/Database, /data/Mods, /data/Logs и /data/Signals) сохраняются на хосте. Docker создаст их автоматически — ручное создание не требуется.
  • deploy.resources.limits.memory: 3800M ограничивает память игрового сервера примерно до 3,8 ГБ, а cpus: '1.8' ограничивает ЦП до 1,8 ядра. Настройте эти значения в разделе deploy.resources.limits под ваше оборудование.

3.4 Создание каталогов данных (необязательно)

Хотя Docker автоматически создаст привязанные каталоги, их ручное создание поможет вам заранее проверить права доступа:

Bash
mkdir -p /data/Database /data/Mods /data/Logs

4. Запуск сервера

Убедитесь, что вы находитесь в каталоге с docker-compose.yml и .env, затем выполните команду. Следуя стандартному процессу этого руководства, выполняйте команды непосредственно в каталоге входа. Если вы вошли как root, обычно это /root.

Bash
docker-compose up -d
  • Флаг -d запускает контейнер в фоновом режиме.
  • При первом запуске образ игрового сервера будет загружен из реестра — пожалуйста, наберитесь терпения.
  • Используйте docker-compose logs -f для просмотра логов в реальном времени. Нажмите Ctrl+C для выхода из просмотра без остановки контейнера.

Если всё настроено правильно, сервер завершит запуск и зарегистрируется в официальном лобби (при условии, что настроены действительные GAME_PUBLIC и GAME_TOKEN).

5. Открытие портов брандмауэра

Чтобы другие игроки могли подключиться, откройте порт UDP, соответствующий GAME_PORT, указанному в .env (по умолчанию 26666).

  • При использовании облачного сервера добавьте разрешающее правило для порта UDP в группе безопасности.
  • Если на сервере включен системный брандмауэр (например, ufw), выполните следующую команду:
Bash
ufw allow 26666/udp

6. Команды повседневного управления

ОперацияКоманда
Запустить серверdocker-compose up -d
Остановить серверdocker-compose down
Перезапустить серверdocker-compose restart
Просмотр логовdocker-compose logs -f --tail=100
Обновить образ и перезапуститьdocker-compose pull затем docker-compose up -d
Войти в оболочку контейнераdocker exec -it gameserv bash
  • При остановке сервера Docker резервирует 60 секунд для сохранения данных. Не используйте принудительный kill.
  • Контейнер watchtower автоматически отслеживает обновления образов и загружает новые версии с перезапуском с интервалом в 5 минут.

7. Как изменить конфигурацию

  1. Выполните cd ~, затем используйте vi .env для открытия файла конфигурации.
  2. После сохранения выполните docker-compose down, затем docker-compose up -d для перезагрузки переменных окружения.

Необходимо сначала выполнить down, а затем up. Прямой restart может не перезагрузить новые переменные окружения.

8. Частые вопросы

8.1 Сервер запущен, но не отображается в лобби?

  • Проверьте, правильно ли заполнен GAME_TOKEN в .env и запросили ли вы его у официальной команды.
  • Проверьте, установлен ли GAME_PUBLIC=1.
  • Проверьте, соответствует ли публичный IP сервера GAME_IP. Используйте curl ifconfig.me для проверки.
  • Проверьте, открыт ли порт UDP в брандмауэре и группе безопасности.
  • Просмотрите логи: docker-compose logs -f gameserv.

8.2 Порт уже занят?

Измените GAME_PORT в .env на другой порт и соответствующим образом обновите правила брандмауэра.

8.3 Контейнер завершается из-за нехватки памяти?

  • Настройте mem_limit в docker-compose.yml.
  • Уменьшите ресурсоёмкие параметры, такие как GAME_MAX_PLAYERS.

8.4 Как установить моды?

Поместите файлы модов в каталог /data/Mods на хосте, добавьте GAME_MODS=ИмяМода1,ИмяМода2 в .env и перезапустите сервер.

8.5 Как сделать резервную копию данных?

Сделайте резервную копию каталога /data/Database на хосте. Он содержит персонажей игроков, гнёзда, яйца и другие данные. Рекомендуется периодически архивировать его и загружать в облачное хранилище.

9. Получение помощи

  • См. полный справочник параметров: Руководство по настройке игрового сервера.
  • Присоединяйтесь к официальному сообществу Discord или группе QQ для получения актуального адреса реестра образов и инструкций по запросу TOKEN.