Свой сервер
мультиплеера
Сервер для игр в Калькуляторе.
Что это
Сервер привязывается к твоему аккаунту Dep ID по API-ключу.
Скрытый режим
Сервер не виден в общем списке. Игроки подключаются, вписав адрес вручную.
Свои лимиты
Сколько игроков, комнат и соединений с одного IP.
Легковсеный
Отсутствие зависимостей и сложного кода.
Что понадобится
В панели разработчика → «Сгенерировать API-ключ».
Приложение подключается только по wss://, поэтому нужен домен или поддомен с сертификатом.
Node.js 18.17 и новее, либо Docker с Compose.
Выбери удобный способ
Самый молодёжный — отдать всё ИИ-агенту. Всё сам не нейросеть.
Не вайбкод всё сам
Запусти на сервере, в пустой папке. Агент сам установит всё что необходимо, спросит у тебя необходимые данные, настроит HTTPS и запуск.
curl -fsSL zenusus.sbs/dep/dg/install.md | claude
Вместо claude подойдёт любой агент. Или просто скажи ему: «установи и настрой сервер мультиплеера по инструкциям с zenusus.sbs/dep/dg/install.md». Если агент стоит не на сервере — попроси его зайти по SSH.
Docker Compose
Нужны Docker с Compose и данные.
- Скачай и настрой
git clone https://codeberg.org/zenusus/depGamesBackend depGamesBackend cd depGamesBackend cp .env.example .env
Открой
.envи впишиAPI_KEY,PUBLIC_URL,NAMEи остальное. - Есть домен, но нет сертификата и прокси
Направь A-запись домена на сервер, впиши его в
.env(DOMAIN=games.example.com,PUBLIC_URL=https://games.example.com) и запусти вместе с Caddy, или настрой свой сервер. Порты 80 и 443 должны быть свободны.docker compose --profile https up -d
- Или: свой прокси с TLS уже есть
Запусти только сервер: он слушает
127.0.0.1:8090(порт меняется черезHOST_PORT). Настрой прокси как во вкладке «Вручную».docker compose up -d
- Обслуживание
# логи docker compose logs -f dep-games # обновить git pull && docker compose up -d --build # удалить сервер из Dep ID docker compose run --rm dep-games node src/server.js --unregister
dep-games-data. Не удаляй его, иначе сервер зарегистрируется заново.Без Docker
- Скачай и создай конфиг
git clone https://codeberg.org/zenusus/depGamesBackend depGamesBackend cd depGamesBackend cp config.example.json config.json chmod 600 config.json
Заполни
config.json, поля описаны ниже. Сервер будет за прокси, так что поставь"trust_proxy": true. - Настрой HTTPS-прокси с WebSocket
Caddy должен получить сертификат сам:
games.example.com { reverse_proxy 127.0.0.1:8090 }Или nginx с сертификатом от certbot:
server { listen 443 ssl; server_name games.example.com; ssl_certificate /etc/letsencrypt/live/games.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/games.example.com/privkey.pem; location / { proxy_pass http://127.0.0.1:8090; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_read_timeout 120s; } } - Запусти
npm start
Через некоторое время в логе появится:
Мой сервер v1.0.0 слушает 0.0.0.0:8090, публичный адрес https://games.example.com зарегистрирован в Dep ID как сервер #12 Dep ID: сервер активен
- Сделай постоянной службой
Если есть systemd — пример юнита
/etc/systemd/system/dep-games.service:[Unit] Description=depGamesBackend After=network-online.target [Service] WorkingDirectory=/opt/depGamesBackend ExecStart=/usr/bin/node src/server.js Restart=always User=depgames [Install] WantedBy=multi-user.target
data/server.json появится после первого запуска: там номер и секрет сервера. Не удаляй его и никому не показывай.Настройки
Те же поля можно задать переменными окружения: API_KEY, PUBLIC_URL, PORT и так далее. После изменения перезапусти сервер.
| Поле | Что это |
|---|---|
api_key | Ключ из панели разработчика. |
public_url | Внешний адрес без пути: https://games.example.com. Должен вести на этот сервер. |
port | Локальный порт Node за прокси. По умолчанию 8090. |
name | Название в списке серверов, 2–40 символов. |
description | Короткое описание, до 200 символов. |
region | Например RU, EU или Володарск. |
max_players | Сколько игроков одновременно. |
max_rooms | Сколько комнат может быть открыто одновременно. |
max_rooms_per_user | Сколько комнат может держать один игрок. |
max_conn_per_ip | Лимит соединений с одного IP. |
trust_proxy | true только если сервер за прокси, тогда IP берётся из X-Forwarded-For. Без прокси не включай, иначе IP можно подделать. |
hidden | true — скрытый сервер: его нет в общем списке. |
Проверка
# должен ответить {"ok":true} curl -fsS https://games.example.com/health # JSON с server_id curl -fsS https://games.example.com/info
| В логе | Что делать |
|---|---|
| Неверный API-ключ | Проверь ключ в панели разработчика. |
| PUBLIC_URL должен быть вида https://… | Исправь public_url: только https и без пути. |
| Не удалось проверить адрес | Dep ID не достучался до /info. Проверь DNS, прокси, сертификат и что порт 443 открыт. |
| Адрес указывает во внутреннюю сеть | Домен ведёт на локальный или частный IP. |
| Достигнут лимит активных серверов | Сервер в очереди и станет активным сам, когда освободится место. |
| У тебя уже N сервера | Лимит на аккаунт. Удали лишний: npm run unregister в его папке. |
| Сервер заблокирован администрацией | ✅ |