Установка в Docker
Панель распространяется готовым образом gameap/gameap. Демон в Docker не запускают: он должен
управлять процессами игровых серверов на выделенном сервере напрямую.
Быстрый запуск
Самый простой вариант — SQLite, без отдельной базы данных:
docker run -d \
--name gameap \
-p 8025:8025 \
-p 31718:31718 \
-e DATABASE_DRIVER=sqlite \
-e 'DATABASE_URL=file:/var/lib/gameap/db.sqlite?_busy_timeout=5000&_journal_mode=WAL&cache=shared' \
-e AUTH_SECRET=$(openssl rand -base64 24) \
-e ENCRYPTION_KEY=$(openssl rand -hex 32) \
-e GRPC_EXTERNAL_HOST=panel.example.com \
-v gameap-data:/var/lib/gameap \
gameap/gameap:latest
Панель откроется на http://localhost:8025. Логин и пароль первого администратора будут в журнале
контейнера:
docker logs gameap
Два параметра из примера — обязательные, и оба легко упустить, потому что в готовых
docker-compose.ymlих нет. См. Порт 31718 и Адрес панели для демонов.
Порт 31718
По этому порту демоны подключаются к панели. В Dockerfile объявлен только 8025, и в примере
docker-compose.yml из репозитория опубликован тоже только он.
Порт 31718 нужно пробрасывать самостоятельно — иначе панель будет работать, а ни один выделенный сервер к ней не подключится.
ports:
- "8025:8025"
- "31718:31718"
Адрес панели для демонов
Панель подставляет свой адрес в команду установки демона. По умолчанию она берёт его из заголовка
запроса, а внутри контейнера это обычно localhost или имя сервиса — такая команда на удалённом
выделенном сервере работать не будет.
Задайте адрес, по которому панель доступна извне:
environment:
GRPC_EXTERNAL_HOST: panel.example.com
Если порт 31718 опубликован наружу под другим номером, укажите и его:
environment:
GRPC_EXTERNAL_PORT: 41718
GRPC_EXTERNAL_HOSTпопадает в список имён самоподписанного сертификата gRPC, а сертификат создаётся при первом запуске. Задайте переменную до первого старта. Если задать позже, удалитеcerts/server/api-server.crtиcerts/server/api-server.keyв каталоге файлов панели и перезапустите контейнер. Подробнее — GRPC API.
Docker Compose
Готовый файл docker-compose.yml есть в репозитории панели.
Он поднимает панель вместе с PostgreSQL и Redis:
git clone https://github.com/gameap/gameap.git
cd gameap
docker compose up -d
К нему нужно добавить проброс порта 31718 и GRPC_EXTERNAL_HOST, как описано выше.
Пароли и ключи задаются через файл .env рядом с docker-compose.yml:
AUTH_SECRET=замените_на_32_случайных_байта
ENCRYPTION_KEY=замените_на_32_случайных_байта
POSTGRES_PASSWORD=замените_на_надёжный_пароль
LOGGER_LEVEL=info
В примере
docker-compose.ymlзначенияAUTH_SECRETиENCRYPTION_KEYпо умолчанию —change-me-in-production. С такими ключами токены сессий подделываются тривиально. Замените оба значения до первогоdocker compose up— не после, а до.Позже сменить
ENCRYPTION_KEYуже не получится безболезненно: сохранённые секреты TOTP станут нечитаемыми, и всем пользователям придётся подключать двухфакторную аутентификацию заново. См. Безопасность.
Длина у ключей разная: AUTH_SECRET приводится ровно к 32 байтам, а ENCRYPTION_KEY хешируется
целиком. Поэтому команды генерации в примере выше отличаются.
Данные и тома
Всё состояние панели хранится в /var/lib/gameap:
| Что | Где |
|---|---|
| Файлы панели | Каталог из FILES_LOCAL_BASE_PATH, в примере compose — /var/lib/gameap/files |
| Сертификаты gRPC | Подкаталог certs/ внутри него |
| Сертификаты ACME | Подкаталог из ACME_STORAGE_PATH, по умолчанию acme/ |
| База данных SQLite | Там, где указано в DATABASE_URL |
Сертификаты и данные ACME хранятся не в корне тома, а внутри каталога файлов панели. При
настройках из примера docker-compose.yml полный путь к сертификату gRPC —
/var/lib/gameap/files/certs/server/api-server.crt.
Подключайте этот каталог томом, иначе при пересоздании контейнера потеряются сертификаты — и все демоны перестанут подключаться.
Контейнер работает от непривилегированного пользователя gameap, поэтому у тома должны быть
подходящие права.
Переменные окружения
Образ настраивается теми же переменными, что и обычная установка, — полный список в
справочнике config.env. Файл config.env внутри контейнера не нужен.
Минимально необходимое:
| Переменная | Назначение |
|---|---|
DATABASE_DRIVER |
postgres, mysql или sqlite |
DATABASE_URL |
Строка подключения к базе |
AUTH_SECRET |
Ключ подписи токенов, 32 случайных байта |
ENCRYPTION_KEY |
Ключ шифрования секретов, 32 случайных байта |
GRPC_EXTERNAL_HOST |
Адрес панели, по которому к ней подключаются демоны |
Проверка состояния
В образе есть проверка работоспособности — запрос к /api/health:
docker inspect --format='' gameap
Журнал панели:
docker logs -f gameap
За обратным прокси
Если HTTPS обслуживает nginx или Traefik, сертификаты в панели настраивать не нужно. Прокси должен
передавать заголовок X-Forwarded-Proto: https и перезаписывать его, а не дополнять.
Порт 31718 через обратный прокси обычно не проходит: демоны должны подключаться к панели напрямую. Подробнее — HTTPS и сертификаты.
Обновление
docker compose pull
docker compose up -d
Перед обновлением сделайте резервную копию базы данных и тома с данными: миграции применяются при запуске и необратимы.
docker compose exec postgres pg_dump -U gameap gameap > gameap-backup.sql