2026-10-04 12:15:27 +04:00
2026-10-03 14:33:08 +04:00
2026-10-03 14:33:08 +04:00
2026-10-03 14:33:08 +04:00
2026-08-03 00:24:06 +04:00
ico
2026-07-26 03:18:36 +04:00
2026-10-03 14:33:08 +04:00
wip
2026-08-17 20:25:40 +04:00
2026-10-03 14:33:08 +04:00
2026-04-26 16:09:08 +04:00
2026-10-04 12:15:27 +04:00
2026-03-11 22:04:36 +04:00
2026-10-03 14:33:08 +04:00
2026-03-11 22:04:36 +04:00
2026-03-11 22:04:36 +04:00
2026-10-03 14:33:08 +04:00
2026-10-03 14:33:08 +04:00
2026-10-03 14:33:08 +04:00
2026-10-04 12:15:27 +04:00

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 проверено отдельно.

S
Description
Веб-приложение MoonWell
Readme 6.1 MiB
Languages
PHP 70.1%
JavaScript 10.1%
Vue 6.7%
CSS 5.4%
Blade 4.9%
Other 2.8%