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.
-
Сделайте резервные копии текущей основной базы сайта (
DB_DATABASE, в данном развёртыванииmoonwell-web) и vMaNGOSrealmd. -
Доставьте обновлённый код на сервер и пересоберите контейнеры:
./scripts/deploy-production.shЕсли используется SSH-туннель к ядру, можно указать
./scripts/deploy-production.sh --ssh-tunnel. Скрипт сам включает этот режим приVMANGOS_AUTH_DB_HOST=core-db-tunnel. Он также выполняет миграции, включая разрешение пустого email вusers. -
Задайте функцию для команд Compose:
prod() { docker compose -f compose.prod.yaml "$@"; }Для SSH-туннеля используйте вместо неё:
prod() { docker compose -f compose.prod.yaml -f compose.prod.ssh-tunnel.yaml "$@"; } -
Проверьте 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 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=ИМЯ_ИСХОДНОЙ_БАЗЫ. -
На время записи приостановите вход и регистрацию на сайте:
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возвращает сайт из режима обслуживания. Конфликты проверяются заранее, но две базы на разных серверах не имеют общей транзакции: при сбое соединения во время записи проверьте обе базы перед повторным запуском. -
Войдите на сайт прежним логином и паролем. После первого входа пользователя поле
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 монтирует рабочий каталог проекта целиком, поэтому локальный дамп в корне проекта доступен по этому пути.