restore acore_auth
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
# Восстановление аккаунтов из `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. Доставьте обновлённый код на сервер и пересоберите контейнеры:
|
||||
|
||||
```bash
|
||||
./scripts/deploy-production.sh
|
||||
```
|
||||
|
||||
Если используется SSH-туннель к ядру, можно указать
|
||||
`./scripts/deploy-production.sh --ssh-tunnel`. Скрипт сам включает этот режим
|
||||
при `VMANGOS_AUTH_DB_HOST=core-db-tunnel`. Он также выполняет миграции,
|
||||
включая разрешение пустого email в `users`.
|
||||
|
||||
3. Задайте функцию для команд Compose:
|
||||
|
||||
```bash
|
||||
prod() { docker compose -f compose.prod.yaml "$@"; }
|
||||
```
|
||||
|
||||
Для SSH-туннеля используйте **вместо неё**:
|
||||
|
||||
```bash
|
||||
prod() { docker compose -f compose.prod.yaml -f compose.prod.ssh-tunnel.yaml "$@"; }
|
||||
```
|
||||
|
||||
4. Проверьте gzip и скопируйте дамп в PHP-контейнер:
|
||||
|
||||
```bash
|
||||
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. Выполните проверку без записи:
|
||||
|
||||
```bash
|
||||
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. На время записи приостановите вход и регистрацию на сайте:
|
||||
|
||||
```bash
|
||||
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
|
||||
```
|
||||
|
||||
После завершения включите сайт и удалите копию дампа из контейнера:
|
||||
|
||||
```bash
|
||||
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 уже созданы.
|
||||
|
||||
## Локальная проверка
|
||||
|
||||
```bash
|
||||
./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 монтирует рабочий каталог проекта целиком, поэтому локальный дамп в корне
|
||||
проекта доступен по этому пути.
|
||||
Reference in New Issue
Block a user