Files
moonwell-web/docs/restore-azerothcore-accounts.md
T
2026-10-04 20:21:28 +04:00

7.8 KiB

Восстановление аккаунтов из acore_auth.sql.gz

Если в восстановленной базе сайта users пустая, а старый сайт создавал пользователей в acore_auth.account, импортируйте аккаунты из резервной копии авторизации AzerothCore. Команда читает обычный SQL-дамп mysqldump или gzip напрямую. Подключение к старому серверу БД не требуется.

Что переносится

  • Логин и прежний пароль для сайта и лаунчера. Исходные salt/verifier временно сохраняются в users.password в формате acsrp1:…. При первом успешном входе они заменяются Laravel-хешем введённого пароля.
  • Новый игровой аккаунт vMaNGOS со случайным техническим паролем и связью site_credentials.web_user_id. Вход в игру выполняется через launcher_ticket.
  • Дата регистрации, email, locked, last_ip. Новые игровые аккаунты получают максимальный gmlevel из старого account_access для настроенного VMANGOS_ACCOUNT_REALM_ID. Права уже существующих игровых аккаунтов сохраняются.

AzerothCore проверял пароль без учёта регистра. После первого успешного входа на сайт или в лаунчер пароль становится чувствительным к регистру: используйте то написание, с которым выполнен этот вход.

При пустом, повторяющемся или уже занятом email веб-пользователь создаётся с email=NULL; исходный контакт остаётся в realmd.account.email. Если account.email пуст, используется reg_mail. Для обычной новой регистрации email по-прежнему обязателен.

Персонажи, баны, магазин и игровые балансы из этого дампа не переносятся. RNDBOT пропускаются; --include-bots включает их. Имена должны содержать 3–16 латинских букв или цифр.

Production

Выполняйте в каталоге проекта сайта, где лежат .env, compose.prod.yaml и acore_auth.sql.gz.

  1. Сделайте резервные копии текущей основной базы сайта (DB_DATABASE, в данном развёртывании moonwell-web) и vMaNGOS realmd.

  2. Доставьте обновлённый код на сервер и пересоберите контейнеры:

    ./scripts/deploy-production.sh
    

    Если используется SSH-туннель к ядру, можно указать ./scripts/deploy-production.sh --ssh-tunnel. Скрипт сам включает этот режим при VMANGOS_AUTH_DB_HOST=core-db-tunnel. Он также выполняет миграции, включая разрешение пустого email в users.

  3. Задайте функцию для команд Compose:

    prod() { docker compose -f compose.prod.yaml "$@"; }
    

    Для SSH-туннеля используйте вместо неё:

    prod() { docker compose -f compose.prod.yaml -f compose.prod.ssh-tunnel.yaml "$@"; }
    
  4. Проверьте gzip и скопируйте дамп в PHP-контейнер:

    gzip -t acore_auth.sql.gz
    prod cp acore_auth.sql.gz app:/tmp/acore_auth.sql.gz
    prod exec -T --user root app sh -c 'chown app:app /tmp/acore_auth.sql.gz && chmod 600 /tmp/acore_auth.sql.gz'
    

    Файл из корня проекта на хосте сам по себе не виден внутри production контейнера. Дампы исключены из Docker-образа и Git.

  5. Выполните проверку без записи:

    prod exec -T --user app app php artisan vmangos:import-azerothcore-accounts /tmp/acore_auth.sql.gz --dry-run
    

    Ожидаемый результат: Created: N; linked: N; already imported: N; bots skipped: N. Created — новые игровые аккаунты, linked — существующие игровые аккаунты, для которых будет создан веб-пользователь. При конфликтах команда выводит причину и завершается с ошибкой до начала записи. Если имя исходной базы отличается от acore_auth, добавьте --database=ИМЯ_ИСХОДНОЙ_БАЗЫ.

  6. На время записи приостановите вход и регистрацию на сайте:

    prod exec -T --user app app php artisan down
    prod exec -T --user app app php artisan vmangos:import-azerothcore-accounts /tmp/acore_auth.sql.gz
    

    После завершения включите сайт и удалите копию дампа из контейнера:

    prod exec -T --user app app php artisan up
    prod exec -T --user app app rm /tmp/acore_auth.sql.gz
    

    Если импорт завершился ошибкой, сохраните вывод для диагностики; artisan up возвращает сайт из режима обслуживания. Конфликты проверяются заранее, но две базы на разных серверах не имеют общей транзакции: при сбое соединения во время записи проверьте обе базы перед повторным запуском.

  7. Войдите на сайт прежним логином и паролем. После первого входа пользователя поле users.password станет обычным Laravel-хешем.

Повторный запуск

Уже связанные с существующим веб-пользователем игровые аккаунты пропускаются. Команда сохраняет их текущие пароли и права. Она не заменяет пароль существующего несвязанного веб-пользователя: такой конфликт нужно разрешить отдельно.

При создании связей отзываются прежние API-токены и сессии сайта. При связывании существующего игрового аккаунта меняется его технический игровой пароль, очищаются sessionkey и активный launcher_ticket.

Отдельно запускать vmangos:import-web-accounts после этой команды не нужно: веб-пользователи и связи с vMaNGOS уже созданы.

Локальная проверка

./vendor/bin/sail artisan migrate --force
./vendor/bin/sail artisan vmangos:import-azerothcore-accounts /var/www/html/acore_auth.sql.gz --dry-run
./vendor/bin/sail artisan vmangos:import-azerothcore-accounts /var/www/html/acore_auth.sql.gz

Sail монтирует рабочий каталог проекта целиком, поэтому локальный дамп в корне проекта доступен по этому пути.