82 lines
7.7 KiB
Markdown
82 lines
7.7 KiB
Markdown
# 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` сайта уже настроен на этот стенд.
|
|
|
|
```dotenv
|
|
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. Контейнер приложения присоединяется к указанной сети автоматически.
|
|
|
|
## Запуск сайта
|
|
|
|
```bash
|
|
./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_*`, затем выполните:
|
|
|
|
```bash
|
|
./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`](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 не подходят.
|
|
|
|
## Проверка
|
|
|
|
```bash
|
|
./vendor/bin/sail artisan test
|
|
npm run build
|
|
```
|
|
|
|
Тесты включают контрольный SRP6-вектор из `src/shared/Crypto/InitializeCrypto.cpp` ядра vMaNGOS, регистрацию, авторизацию, смену пароля, права и чтение персонажей. Локальное подключение к запущенным `realmd` и `characters` проверено отдельно.
|