# 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` и выпуск инвайт-кодов. - Проект подготовлен под 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_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/AzerothCoreAccountRegistrar.php` — SRP6-совместимое создание учётной записи AzerothCore. - `app/Http/Controllers/LandingController.php` — данные лендинга и обработка формы. ## Проверка Вне Sail я уже проверил: - рендер лендинга по HTTP; - компиляцию Blade; - маршруты; - ручную валидацию `POST /register`; - совпадение SRP6 verifier с формулой AzerothCore. Для полноценного `php artisan test` внутри контейнера используйте: ```bash ./vendor/bin/sail artisan test ```