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

8.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.

    Все команды prod выполняются на хосте из каталога проекта. Запускайте Artisan через prod exec, чтобы он использовал окружение приложения. Ошибка The auth backup file is not readable означает, что указанный путь отсутствует либо недоступен пользователю PHP в том окружении, где выполняется команда. Проверить копию внутри контейнера можно так:

    prod exec -T --user app app sh -c 'test -r /tmp/acore_auth.sql.gz && ls -lh /tmp/acore_auth.sql.gz'
    

    Предупреждение Invalid date.timezone value '' относится к настройке PHP, а не к дампу. Production-образ задаёт date.timezone=UTC. Для разового запуска с явной настройкой используйте php -d date.timezone=UTC artisan ....

  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 монтирует рабочий каталог проекта целиком, поэтому локальный дамп в корне проекта доступен по этому пути.