Files

137 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Moonwell Web
Laravel 12-приложение с WoW-лендингом и публичной регистрацией игрового аккаунта напрямую в auth-базу AzerothCore.
## Что уже сделано
- Развёрнут Laravel `v12.12.1` со свежим `laravel/framework v12.x`.
- Главная страница оформлена в тёмной cinematic-стилистике с компоновкой, вдохновлённой официальным сайтом WoW.
- Форма регистрации создаёт аккаунт напрямую в `acore_auth` через отдельное соединение `azerothcore_auth`.
- При регистрации заполняются таблицы `account`, `realmcharacters` и `account_access`.
- Регистрация возможна только по инвайт-коду, который хранится в базе сайта.
- Добавлены личный кабинет и админка поверх игровых аккаунтов из auth-базы.
- В кабинете доступны смена пароля, список персонажей и ссылка на клиент игры из S3.
- В админке доступны просмотр всех аккаунтов, их персонажей, смена `gmlevel` и выпуск инвайт-кодов.
- В админке доступны новости для логин-экрана WoW 3.3.5a с публичным `SERVERALERT`-фидом для клиента.
- Проект подготовлен под Laravel Sail: приложение работает в контейнере, а AzerothCore auth DB берётся с хоста через `host.docker.internal:3306`.
## Как запускать через Sail
```bash
cp .env.example .env
./vendor/bin/sail up -d
./vendor/bin/sail composer install
./vendor/bin/sail artisan key:generate
./vendor/bin/sail artisan migrate
```
Сайт будет доступен на `http://localhost:8080`.
## Деплой на Ubuntu
Скрипт деплоя лежит в `scripts/deploy-ubuntu.sh`. Он рассчитан на сервер, где уже установлены:
- `docker`
- `docker compose`
Перед первым запуском проверь `.env`:
- `APP_URL`
- `APP_PORT`
- `FORWARD_DB_PORT`
- `AZEROTHCORE_AUTH_DB_HOST`
- `AZEROTHCORE_AUTH_DB_PORT`
- `AZEROTHCORE_AUTH_DB_DATABASE`
- `AZEROTHCORE_AUTH_DB_USERNAME`
- `AZEROTHCORE_AUTH_DB_PASSWORD`
Запуск:
```bash
chmod +x scripts/deploy-ubuntu.sh
./scripts/deploy-ubuntu.sh
```
Что делает скрипт:
- создаёт `.env` из `.env.example`, если файла ещё нет;
- собирает контейнер приложения;
- ставит production-зависимости Composer;
- генерирует `APP_KEY`, если он пустой;
- поднимает контейнеры;
- ждёт готовности MySQL;
- выполняет `php artisan migrate --force`;
- прогревает `config`, `route` и `view` кэш.
Полезные флаги:
```bash
./scripts/deploy-ubuntu.sh --skip-build
./scripts/deploy-ubuntu.sh --skip-cache
```
## Как это связано с AzerothCore
По умолчанию Sail-контейнер подключается к auth-базе core-сервера так:
- хост: `host.docker.internal`
- порт: `3306`
- база: `acore_auth`
- пользователь: `root`
- пароль: `password`
Это рассчитано на вашу docker-сборку из `/home/sindo/moonwell-core`, где MySQL опубликован наружу на порт `3306`.
## Важные переменные
Основные настройки лежат в `.env.example`:
- `APP_PORT=8080`
- `FORWARD_DB_PORT=3307`
- `DB_HOST=mysql`
- `AZEROTHCORE_AUTH_DB_HOST=host.docker.internal`
- `AZEROTHCORE_AUTH_DB_PORT=3306`
- `AZEROTHCORE_AUTH_DB_DATABASE=acore_auth`
- `AZEROTHCORE_AUTH_DB_USERNAME=root`
- `AZEROTHCORE_AUTH_DB_PASSWORD=password`
- `AZEROTHCORE_CHARACTERS_DB_DATABASE=acore_characters`
- `MOONWELL_ADMIN_MIN_GMLEVEL=3`
- `MOONWELL_BOT_ACCOUNT_PREFIX=RNDBOT`
- `MOONWELL_CLIENT_OBJECT_KEY="World of Warcraft.zip"`
- `AWS_ENDPOINT=https://storage.yandexcloud.net`
- `AWS_BUCKET=warcraft-client`
## Архитектура
- `compose.yaml` — Sail-окружение с `laravel.test` и локальным MySQL для самого сайта.
- `config/database.php` — отдельное соединение `azerothcore_auth`.
- `config/moonwell.php` — настройки realm/landing и регистрации.
- `app/Auth/AzerothCoreUserProvider.php` — Laravel-auth поверх игровых аккаунтов.
- `app/Services/AzerothCoreAccountService.php` — работа с аккаунтами, персонажами, паролями и `gmlevel`.
- `app/Services/GameClientDownloadService.php` — генерация ссылки на клиент из S3.
- `app/Services/LoginScreenNewsService.php` — сборка plain-text фида для логин-экрана WoW.
- `app/Services/AzerothCoreAccountRegistrar.php` — SRP6-совместимое создание учётной записи AzerothCore.
- `app/Http/Controllers/LandingController.php` — данные лендинга и обработка формы.
## Новости логин-экрана WoW
- Админский раздел: `/admin/login-screen-news`
- Публичный фид для клиента: `/launcher/login-news.txt`
- Сайт сам добавляет префикс `SERVERALERT:` и склеивает опубликованные записи по `sort_order`.
## Проверка
Вне Sail я уже проверил:
- рендер лендинга по HTTP;
- компиляцию Blade;
- маршруты;
- ручную валидацию `POST /register`;
- совпадение SRP6 verifier с формулой AzerothCore.
Для полноценного `php artisan test` внутри контейнера используйте:
```bash
./vendor/bin/sail artisan test
```