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.
Шаблон заявки на сервер · Лицензионное соглашение и соглашение об игровых сервисах
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):
curl -fsSL https://get.docker.com | bash После установки запустите Docker и включите автозапуск при загрузке системы:
systemctl start docker
systemctl enable docker Проверьте установку:
docker --version 2.2 Установка Docker Compose
Современные установки Docker обычно включают плагин docker compose. Если нет, установите отдельный бинарный файл docker-compose. В этом руководстве везде используется docker-compose. Если ваша система поддерживает только плагин, замените на docker compose.
Способ 1: Проверить встроенный плагин
docker compose version Способ 2: Установить отдельный бинарный файл
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):
/root/
├── docker-compose.yml ← Конфигурация Docker Compose
└── .env ← Переменные окружения (настройки сервера) 3.2 Создание файла переменных окружения .env
Файл .env содержит параметры сервера. Используйте системный редактор vi для его создания:
vi .env В открывшемся файле ниже приведены две полные готовые конфигурации. Выберите ту, что соответствует нужному режиму, вставьте её и укажите GAME_TOKEN (для публичного сервера также задайте GAME_IP с вашим реальным публичным IP):
Сервер в режиме песочницы
# 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 Сервер в режиме эволюции
# 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
vi docker-compose.yml 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 автоматически создаст привязанные каталоги, их ручное создание поможет вам заранее проверить права доступа:
mkdir -p /data/Database /data/Mods /data/Logs 4. Запуск сервера
Убедитесь, что вы находитесь в каталоге с docker-compose.yml и .env, затем выполните команду. Следуя стандартному процессу этого руководства, выполняйте команды непосредственно в каталоге входа. Если вы вошли как root, обычно это /root.
docker-compose up -d - Флаг
-dзапускает контейнер в фоновом режиме. - При первом запуске образ игрового сервера будет загружен из реестра — пожалуйста, наберитесь терпения.
- Используйте
docker-compose logs -fдля просмотра логов в реальном времени. НажмитеCtrl+Cдля выхода из просмотра без остановки контейнера.
Если всё настроено правильно, сервер завершит запуск и зарегистрируется в официальном лобби (при условии, что настроены действительные GAME_PUBLIC и GAME_TOKEN).
5. Открытие портов брандмауэра
Чтобы другие игроки могли подключиться, откройте порт UDP, соответствующий GAME_PORT, указанному в .env (по умолчанию 26666).
- При использовании облачного сервера добавьте разрешающее правило для порта UDP в группе безопасности.
- Если на сервере включен системный брандмауэр (например,
ufw), выполните следующую команду:
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. Как изменить конфигурацию
- Выполните
cd ~, затем используйтеvi .envдля открытия файла конфигурации. - После сохранения выполните
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.