Перейти к содержанию

Миграция из XenForo

Forum Pro импортирует форум XenForo 2.2 из обычного дампа MySQL с его таблицами и копии двух папок из установки. Участники сохраняют рабочие пароли, BBCode преобразуется в Markdown, вложения и аватары переносятся прямо с диска в ваше хранилище, а импорт можно возобновить и запускать повторно.

Что потребуется

Попросите того, кто отвечает за установку XenForo, о двух вещах:

  1. Дамп схемы и данных таблиц xf_*. Подойдёт обычный mysqldump xenforo > dump.sql; на общих хостингах добавьте --no-tablespaces. Экспорт из phpMyAdmin тоже работает. Дамп только с данными (mysqldump -t) не принимается, потому что без операторов CREATE TABLE невозможно определить названия столбцов.
  2. Две папки из установки: internal_data/attachments и data/avatars. XenForo ограничивает скачивание вложений правами, поэтому файлы читаются с диска, а не загружаются по HTTP.

Дамп потоково разбирается в PHP. MySQL не нужно устанавливать на новом сервере, а дамп размером в несколько гигабайт обрабатывается потоково с постоянным потреблением памяти.

Команда

bin/plugin forum-pro import-xenforo dump.sql \
    --source-url https://forum.example.org \
    --xf-root /path/to/xenforo
Параметр Назначение
--source-url Базовый URL старого форума, включая подпапку, например /community. По нему распознаются и перезаписываются внутренние ссылки в сообщениях.
--xf-root Корень установки XenForo; в нём находятся internal_data/attachments и data/avatars.
--attachments-dir, --avatars-dir Указать каждую папку отдельно, переопределяя --xf-root.
--skip-files Импортировать только данные. Полезно для первого просмотра до получения папок.
--prefixes tag|title|skip Что делать с префиксами тем: сделать их метками (по умолчанию), добавить [Prefix] к заголовку или отбросить.
--skip-pms Не импортировать беседы (личные сообщения).
--default-section Название раздела для форумов, над которыми нет категории верхнего уровня.

Дамп может быть сжат gzip. Дамп размером 55 МБ с 6 000 сообщений и 2 500 вложений импортируется примерно за десять секунд в пустую базу данных.

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

Участники и идентификация

  • Участники с рабочими паролями. XenForo 2 хранит bcrypt, который Forum Pro проверяет нативно; учётные записи с хешем XenForo 1 проверяются через помеченный устаревший формат и обновляются до bcrypt при первом входе. Имена пользователей с пробелами преобразуются в допустимые имена (Jane Doe становится Jane_Doe), а оригинал сохраняется как отображаемое имя.
  • Администраторы и модераторы как роли модераторов. Блокировки и отключённые учётные записи — как приостановки.
  • Пользовательские группы пользователей с членством. Четыре стандартные группы XenForo не создаются.
  • Трофеи как вручную выданные значки и пользовательские звания.
  • Подписи и аватары.

Структура и контент

  • Дерево узлов. Категория верхнего уровня становится разделом; каждый форум становится категорией внутри раздела своего самого верхнего предка. Более глубокая вложенность сплющивается, а не воспроизводится, потому что в Forum Pro ровно два уровня. Узлы страниц и ссылок пропускаются. Форум, закрытый для новых сообщений, становится доступным только сотрудникам.
  • Темы с их состояниями закрепления, открытости и удаления и счётчиками просмотров. Темы-редиректы пропускаются.
  • Сообщения с преобразованием BBCode в Markdown: жирный, курсив, зачёркивание, заголовки, списки, таблицы, цитаты с указанием автора, код и встроенный код, спойлеры (как цитата с заголовком, поскольку Forum Pro никогда не выводит необработанный HTML), изображения, упоминания [USER], ссылки [ATTACH] и вставки [MEDIA]. Теги только оформления, такие как цвет, размер, шрифт и выравнивание, теряют разметку, но сохраняют текст.
  • Историю изменений как ревизии сообщений.
  • Вложения, перенесённые в контентно-адресуемое хранилище. Изображения отображаются внутри сообщения, остальные файлы — ссылками.
  • Реакции, сопоставленные с настроенными типами (см. ниже).
  • Метки и префиксы тем.
  • Принятые ответы из форумов вопросов.
  • Закладки, опросы с голосами и отслеживание тем и форумов.
  • Беседы как личные сообщения.

Ссылки

  • Внутренние ссылки между темами, сообщениями, форумами и участниками перезаписываются на новые адреса — как в понятной форме, так и в форме index.php?threads/....

Реакции

В XenForo шесть реакций (Like, Love, Haha, Wow, Sad, Angry), а в Forum Pro четыре (like, heart, laugh, confused). Типы реакций — это просто конфигурация, поэтому чище всего настроить шесть реакций XenForo до импорта:

reactions:
  enabled: true
  types:
    like: 1
    heart: 1
    laugh: 0
    wow: 0
    sad: 0
    angry: 0
  emoji:
    like: "👍"
    heart: "❤️"
    laugh: "😄"
    wow: "😮"
    sad: "😢"
    angry: "😡"

Импортёр сопоставляет каждую реакцию XenForo по её названию с вашими reactions.types. Название, совпадающее с типом, сохраняет свою идентичность, а два синонима понимаются особо: Love становится heart, а Haha становится laugh. Реакция, для которой нет типа, становится like, поэтому ничего не теряется даже с четырьмя по умолчанию. Реакции из дополнений работают так же: назовите тип по ним, и они перенесутся как сами собой.

Вставки медиа

Теги [MEDIA] становятся ссылками на оригинальное сообщение, восстановленными по id провайдера, который хранит XenForo. Распознаются YouTube, Vimeo, Twitter/X, Instagram, TikTok, Imgur, Reddit, Facebook, Dailymotion, SoundCloud, Giphy, Flickr, Pinterest и Spotify. Провайдер, который не распознан, отбрасывается и учитывается в отчёте.

Чтение отчёта

Импорт заканчивается таблицей счётчиков. Большинство из них — просто инвентаризация; некоторые говорят о точности переноса:

Показатель Значение
transform regex bailouts Сообщение оказалось слишком сложным для преобразователя BBCode, поэтому сохранило исходный BBCode, а не потеряло текст. Ноль — норма.
posts transform fallbacks Сообщение получилось бы пустым (в нём были только теги без эквивалента), поэтому сохранило BBCode.
attachments missing Сообщение ссылалось на файл, которого не было в предоставленных папках.
attachments unresolved Сообщение ссылалось на id вложения, которого уже нет в самом дампе. Исправлять нечего; XenForo уже его потерял.
media unsupported Вставка от провайдера без известного шаблона ссылки.
mentions unresolved Упоминание @mention участника, которого нет в дампе, обычно удалённой учётной записи.
passwords dropped Учётная запись со схемой пароля, которую Forum Pro не может проверить, например из дополнения. Таким участникам нужно один раз воспользоваться сбросом пароля.

Идемпотентность

Каждая импортированная строка несёт свой id XenForo. Повторный запуск прерванного импорта никогда не создаёт дубликаты, а повторный запуск со свежим дампом перед переключением добавляет только новое.

Внутри дамп один раз читается в буферный файл во временной папке системы, привязанный к файлу дампа. Повторный запуск того же файла использует этот буфер, поэтому повторные запуски быстрые.

Размещение по старому адресу

Большинство форумов XenForo живут на собственном имени хоста, часто в его корне. Чтобы сохранить адрес, подключите форум в корне сайта и позвольте редиректам со старых URL обрабатывать старые формы URL на том же хосте:

frontend:
  route: ''
  legacy_redirects:
    enabled: true
    xenforo:
      hosts: ['forum.example.org']
      base_path: ''
      target_base: ''
      catch_all: false

Сделайте страницу форума домашней страницей Grav (system.home.alias), как описано в разделе Установка. Тогда посетитель, пришедший на /threads/some-title.123/, попадёт в нужную тему, не покидая хост.

Если форум жил в подпапке, установите base_path: '/community'; если старое имя хоста исчезает полностью, catch_all: true отправляет всё неотображённое под этим путём на главную страницу форума. В отличие от источника Discourse, для XenForo по умолчанию нет catch-all, потому что остальная часть старого хоста обычно продолжает работать.

Путь XenForo Перенаправляется на
/threads/<slug>.<id>/ и /threads/<slug>.<id>/post-<n> Тему, к правильному сообщению
/posts/<id>/ Сообщение в его теме
/forums/<slug>.<id>/ Категорию
/members/<name>.<id>/ Профиль участника
/tags/<tag>/ Метку
/index.php?threads/<slug>.<id>/ То же самое для установок без понятных URL

Предлагаемый план переключения

  1. Разверните новый форум на тестовом хосте. Сначала настройте реакции, группы, защиту от спама и оформление, потому что реакции, в частности, сопоставляются во время импорта.
  2. Получите дамп и две папки и запустите импорт. Прочитайте отчёт.
  3. Проверьте результат. Откройте несколько сообщений с насыщенным BBCode: анонс релиза со списками и ссылками, предложение с таблицей, длинную ветку с цитатами, сообщение, состоящее в основном из вложений. Проверьте аватар участника, опрос и личное сообщение.
  4. Сделайте свежий дамп незадолго до переключения и повторите импорт, чтобы забрать изменения.
  5. Закройте старый форум для новых сообщений.
  6. Направьте имя хоста на новый сайт с включёнными редиректами со старых URL.

После импорта

bin/plugin forum-pro recount      # исправить денормализованные счётчики
bin/plugin forum-pro reindex      # построить поисковый индекс
bin/plugin forum-pro integrity    # отчёт о согласованности только для чтения

Что нужно знать

  • Пользовательский BBCode из дополнений не имеет преобразователя, поэтому его теги удаляются, а текст сохраняется. Если форум сильно зависит от такого, сообщите нам, какого именно; распространённые добавляются быстро.
  • Одиночный [word] без закрывающего тега сохраняется как текст, потому что сообщения в стиле списка изменений помечают записи именно так, и XenForo показывает их дословно.
  • Журнал показателей не заполняется задним числом. Графики активности на панели управления накапливаются с момента установки Forum Pro; итоговые значения сразу верны.
  • Ссылки на ещё более старую платформу остаются как были. Форум, пришедший в XenForo откуда-то ещё, часто хранит URL той платформы в старых сообщениях. Это не ссылки XenForo, поэтому импортёр их не трогает.