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.
-
Сделайте резервные копии текущей основной базы сайта (
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выполняются на хосте из каталога проекта. Запускайте 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 .... -
Выполните проверку без записи:
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 монтирует рабочий каталог проекта целиком, поэтому локальный дамп в корне проекта доступен по этому пути.