Локальная разработка
Эта инструкция относится к текущей ветке master Gml.Backend. В режиме разработки Next.js проксирует запросы к API и сервису скинов. Все запросы браузера идут через http://localhost:3000.
Подготовка
Установите Git, .NET SDK 10, Node.js 20+ и npm. Для Rider включите поддержку JavaScript/Node.js и выберите установленный Node.js в настройках проекта.
git clone --recursive https://github.com/Gml-Launcher/Gml.Backend.git
cd Gml.Backend
git submodule update --init --recursive
npm --prefix src/Gml.Web.Client ci
dotnet restore Gml.Backend.sln
Если репозиторий уже клонирован, выполните последние три команды из его корня. Для восстановления пакетов нужен доступ к настроенным NuGet-источникам. Если NuGet сообщает об отсутствующем локальном источнике из NuGet.config, подготовьте соответствующие пакеты соседнего Gml.Core или настройте доступный источник с нужными версиями пакетов.
Освободите порты 3000, 5002 и 5086 перед запуском.
Запуск в Rider
- Откройте
Gml.Backend.sln. - Выберите сохранённую конфигурацию GML Development.
- Нажмите Run или Debug. Конфигурация запускает Frontend, Backend (development) и Skins (development). При Debug Rider подключает отладчики к обоим .NET-сервисам.
- Дождитесь готовности сервисов и откройте http://localhost:3000.
Для остановки всей конфигурации используйте Stop All. API запускается с профилем frontend, сервис скинов — с профилем http. Рабочие каталоги .NET-сервисов совпадают с каталогами их проектов.
Запуск из терминала
На Linux/macOS из корня репозитория:
./scripts/dev.sh
Скрипт проверяет наличие инструментов, зависимостей фронтенда и свободных портов, затем запускает три сервиса. При Ctrl+C, SIGTERM или завершении любого сервиса он останавливает все запущенные им процессы. Скрипт можно вызвать из другого каталога по полному пути.
Проксирование запросов
Next.js применяет эти правила только при npm run dev:
/api*,/swagger*,/ws*и точный/healthпередаются API наhttp://127.0.0.1:5002с сохранением пути./ws*поддерживает WebSocket./skinsи/skins/*передаются сервису наhttp://127.0.0.1:5086с удалением префикса/skins.- Остальные страницы обслуживает фронтенд.
Например, Swagger API доступен по адресу http://localhost:3000/swagger, а проверка состояния — http://localhost:3000/health. Axios и SignalR используют адрес фронтенда.
Как в Angie, до завершения настройки / перенаправляет на /mnt. После настройки /mnt и вложенные страницы перенаправляют на /. Фронтенд проверяет /api/v1/settings/checkInstalled напрямую у API: ответ 2xx означает, что настройка ещё не завершена. При ошибке связи или тайм-ауте 3 секунды главная страница остаётся доступной, а /mnt возвращает на /.
Для других адресов сервисов создайте src/Gml.Web.Client/.env.development.local:
DEV_BACKEND_URL=http://127.0.0.1:5002
DEV_SKINS_URL=http://127.0.0.1:5086
Перезапустите Next.js после изменения файла. Эти переменные читаются на сервере фронтенда и меняют только адреса назначения прокси; порты запуска .NET настраиваются в launch-профилях. NEXT_PUBLIC_BACKEND_URL задаёт подсказку в форме настройки, а запросы браузера используют текущий адрес фронтенда.
Ключ безопасности и локальные данные
Если SECURITY_KEY не задан, в окружении Development API при первом запуске генерирует 32 случайных байта и сохраняет их как 64 шестнадцатеричных символа в database/development.key внутри каталога API. При следующих запусках используется тот же ключ. Файл исключён из Git и Docker-контекста; на Unix новый файл создаётся с правами 0600.
Непустая переменная окружения SECURITY_KEY имеет приоритет над файлом. В Production и других окружениях кроме Development ключ обязателен в окружении: при его отсутствии API завершает запуск с ошибкой. Для локального запуска вручную генерировать ключ не нужно. Сохраняйте development.key вместе с локальными данными, для которых он использовался.
При стандартном запуске из Rider или скрипта данные находятся здесь:
- SQLite API:
src/Gml.Web.Api/src/Gml.Web.Api/database/data.db. - Dev-ключ API:
src/Gml.Web.Api/src/Gml.Web.Api/database/development.key. - SQLite Gml.Core:
~/GmlServer/data.dbпри значениях профиляPROJECT_NAME=GmlServerи пустомPROJECT_PATH.~обозначает домашний каталог пользователя. Если задатьPROJECT_PATH, каталог проекта создаётся внутри него; имя каталога берётся изPROJECT_NAMEпосле очистки недопустимых символов. - Скины и плащи:
src/Gml.Web.Skin.Service/src/Gml.Web.Skin.Service/Storage.
Остановка сервисов не удаляет эти данные.