Миграция форума Phorum на Discourse

Спасибо за скрипты!

Однако мне кажется, что руководство довольно сырое и непонятное. Мне пришлось обратиться, например, к руководству по миграции с Xenforo, чтобы понять, что именно вы здесь предлагаете. Позвольте добавить недостающие шаги:

  • Убедитесь, что Discourse запущен и работает.
  • Создайте дамп базы данных mysqldump из исходного Phorum — всё понятно, всё хорошо.
  • Скопируйте дамп базы данных в папку Discourse: docker cp /path/to/backup/phorum_db.sql.gz app:/shared/phorum_db.sql.gz (предполагая, что имя стандартного контейнера — app).
    А вот и недостающие части:
  • На самом деле зайдите в контейнер Docker Discourse и установите там MySQL:
docker exec -it app bash
apt-get update && apt-get upgrade
# pv просто для удобства отображения прогресса, lsb-release требуется чем-то
 apt-get install -y lsb-release pv mariadb-server mariadb-client libmariadb-dev
 service mariadb start

Обратите внимание: установка MySQL немного сложнее, но MariaDB должна работать так же хорошо.

Затем создайте базу данных: mysqlCREATE database phorum.

Затем заполните её из резервной копии: pv phorum_db.sql.gz | gunzip | mysql phorum (если дамп в чистом SQL, gunzip не нужен).

Добавьте поддержку MySQL в Ruby:

cd /var/www/discourse/
echo "gem 'mysql2'" >> Gemfile
bundle config unset deployment
bundle install --no-deployment

Измените данные в скрипте миграции (учётные данные базы данных, префикс, постоянные ссылки):

nano /var/www/discourse/script/import_scripts/phorum.rb

А затем вернитесь к руководству в исходном посте — там всё хорошо:

Запустите импортёр с чистой копией Discourse:

git config --global --add safe.directory /var/www/discourse
bundle exec ruby script/import_scripts/phorum.rb

Если база данных Discourse не совсем чистая, лучше предварительно очистить её командой bundle exec rake db:drop db:create db:migrate.

Если возникает ошибка “PG::ConnectionBad: connection to server on socket “/var/run/postgresql/.s.PGSQL.5432” failed: FATAL: Peer authentication failed for user “discourse” (PG::ConnectionBad)”:

  1. Если вы получаете ошибку 'Peer authentication failed for user "discourse"':
  2. Отредактируйте файл /etc/postgresql/13/main/pg_hba.conf
  3. Замените все значения ‘peer’ на ‘trust’ и сохраните файл
  4. Перезагрузите сервер PostgreSQL: /etc/init.d/postgresql reload (или, возможно, psql -U postgres -c "SELECT pg_reload_conf();", но иногда это не срабатывало у меня).

Сначала выполняются миграции пользователей, что может быть относительно медленно (~1,2 тыс. пользователей в минуту, согласно выводу скрипта. У меня было 100 тысяч пользователей, так что…). Затем создаются категории, и начинается миграция сообщений и тем (такая же скорость, ~1,2 тыс./мин), но уже на этом этапе вы можете зайти на сайт и посмотреть, как всё выглядит.

Похоже, это работает намного плавнее, чем я ожидал для такого древнего движка, как Phorum. Похоже, что личные сообщения (PM) не мигрируются, но для меня это, по крайней мере, не является критичным препятствием.

Ещё раз спасибо за скрипт и усилия!