7.7 KiB
MoonWell Web
Laravel 12 сайт для World of Warcraft 1.12.1 на vMaNGOS (/home/sindo/core). Игровые аккаунты и права хранятся в базе realmd, персонажи — в characters. Сайт хранит свои данные в отдельной базе Laravel.
Подключение к локальному vMaNGOS
Локальный стенд ядра описан в /home/sindo/core/deploy/local/README.md. Сначала запустите его. Контейнер сайта подключается к сети vmangos-local_default и обращается к MariaDB как db:3306. Пароль пользователя vmangos находится в /home/sindo/core/deploy/local/secrets/db_password; скопируйте его в VMANGOS_AUTH_DB_PASSWORD и VMANGOS_CHARACTERS_DB_PASSWORD своего .env. Текущий локальный .env сайта уже настроен на этот стенд.
VMANGOS_DOCKER_NETWORK=vmangos-local_default
VMANGOS_AUTH_DB_HOST=db
VMANGOS_AUTH_DB_PORT=3306
VMANGOS_AUTH_DB_DATABASE=realmd
VMANGOS_AUTH_DB_USERNAME=vmangos
VMANGOS_CHARACTERS_DB_HOST=db
VMANGOS_CHARACTERS_DB_PORT=3306
VMANGOS_CHARACTERS_DB_DATABASE=characters
VMANGOS_CHARACTERS_DB_USERNAME=vmangos
MOONWELL_CLIENT_VERSION=1.12.1
Для PHP, запущенного прямо на хосте, укажите 127.0.0.1:13306 вместо db:3306. В продакшене настройте VMANGOS_DOCKER_NETWORK=vmangos_default и учётные данные продакшен-БД vMaNGOS. Контейнер приложения присоединяется к указанной сети автоматически.
Запуск сайта
./vendor/bin/sail up -d
./vendor/bin/sail artisan migrate --force
npm ci
npm run build
Сайт доступен на http://localhost:8080, если APP_PORT=8080. В Laravel остаются отдельные настройки DB_* для данных сайта. После смены .env выполните ./vendor/bin/sail artisan config:clear. Скрипты продакшен-деплоя находятся в scripts/deploy-production.sh и scripts/deploy-ubuntu.sh.
Игровые функции
Манифест нового Rust-клиента публикуется инструментом moonwell-deploy из
moonwell-client-core. Файлы лежат в
World of Warcraft 1.12.1/releases/<buildHash>/, активный манифест —
manifest-1.12.1.json. Для этих значений задайте
MOONWELL_LAUNCHER_BASE_PATH="World of Warcraft 1.12.1" и
MOONWELL_LAUNCHER_MANIFEST_KEY=manifest-1.12.1.json в .env, затем очистите кеш
конфигурации. Учётные данные AWS_* должны указывать на то же хранилище, что
сборщик. Секреты не передаются лаунчеру.
GET /api/launcher/download/{path} разрешает путь только из активного манифеста
и подписывает его objectKey в пределах настроенного префикса. Старый манифест
без objectKey продолжает использовать <base-path>/<path>. Новый манифест
переключается после загрузки всех объектов; старые релизы остаются в S3 для
докачивания и отката. Публикации запускаются последовательно. Windows и macOS
нуждаются в отдельных наборах файлов и настройках манифеста: выбор ОС API пока
не выполняет.
- Регистрация создаёт случайный постоянный игровой пароль в
account.s/account.v, SRP-данные пароля сайта вsite_credentials, запись вrealmcharactersдля каждого реалма и доступ вaccount_access. - Вход на сайт и через API лаунчера сверяет пароль с
site_credentials. Смена пароля в кабинете обновляет только эти данные. - Админка меняет уровень доступа в
account_access. Для чтения персонажей используетсяcharacters.played_time_total. - Список реалмов берётся из
realmd.realmlist; доступность определяется проверкой игрового TCP-порта. - Игровой клиент: 1.12.1, build 5875. Лаунчер получает одноразовый билет через
POST /api/launcher/game-ticketс Bearer-токеном и{"client_build":5875}и передаёт возвращённыеaccountиticketклиенту как логин и пароль. Билет действителен не более 60 секунд; новый билет отзывает предыдущий. Модифицированныйrealmdиз/home/sindo/coreдопускает вход в игру только с активным билетом.
Для импорта аккаунтов прежнего сайта из AzerothCore настройте LEGACY_AUTH_DB_*, затем выполните:
./vendor/bin/sail artisan migrate --force
./vendor/bin/sail artisan vmangos:import-web-accounts --dry-run
./vendor/bin/sail artisan vmangos:import-web-accounts
Команда переносит веб-верификаторы без знания исходных паролей, создаёт игровые аккаунты со случайными паролями и при повторном запуске пропускает уже перенесённых пользователей. При первом импорте она отзывает прежние API-токены и сессии сайта, поскольку прежние ID аккаунтов могут указывать на другого пользователя. Аккаунты RNDBOT пропускаются; для их переноса есть --include-bots. Перед запуском realmd примените миграцию /home/sindo/core/sql/migrations/20261003120000_logon.sql к realmd и пересоберите ядро.
Магазин по-прежнему использует отдельную базу store через STORE_DB_*. Эти таблицы не входят в vMaNGOS. Игровая валюта сайта хранится в дополнительных таблицах realmd после миграции Laravel; для работы внутри игры нужна отдельная интеграция ядра с API из docs/game-balance-integration.md.
Перед выдачей клиента загрузите архив 1.12.1 в S3 и укажите его ключ в MOONWELL_CLIENT_OBJECT_KEY. Для обновлений лаунчера разместите файлы под MOONWELL_LAUNCHER_BASE_PATH и новый манифест по ключу MOONWELL_LAUNCHER_MANIFEST_KEY. Старые файлы клиента 3.3.5a для vMaNGOS не подходят.
Проверка
./vendor/bin/sail artisan test
npm run build
Тесты включают контрольный SRP6-вектор из src/shared/Crypto/InitializeCrypto.cpp ядра vMaNGOS, регистрацию, авторизацию, смену пароля, права и чтение персонажей. Локальное подключение к запущенным realmd и characters проверено отдельно.