128 lines
5.4 KiB
Markdown
128 lines
5.4 KiB
Markdown
# 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
|
||
```
|