Спасибо за скрипты!
Однако мне кажется, что руководство довольно сырое и непонятное. Мне пришлось обратиться, например, к руководству по миграции с 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 должна работать так же хорошо.
Затем создайте базу данных: mysql → CREATE 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)”:
- Если вы получаете ошибку
'Peer authentication failed for user "discourse"':- Отредактируйте файл
/etc/postgresql/13/main/pg_hba.conf- Замените все значения ‘peer’ на ‘trust’ и сохраните файл
- Перезагрузите сервер PostgreSQL:
/etc/init.d/postgresql reload(или, возможно,psql -U postgres -c "SELECT pg_reload_conf();", но иногда это не срабатывало у меня).
Сначала выполняются миграции пользователей, что может быть относительно медленно (~1,2 тыс. пользователей в минуту, согласно выводу скрипта. У меня было 100 тысяч пользователей, так что…). Затем создаются категории, и начинается миграция сообщений и тем (такая же скорость, ~1,2 тыс./мин), но уже на этом этапе вы можете зайти на сайт и посмотреть, как всё выглядит.
Похоже, это работает намного плавнее, чем я ожидал для такого древнего движка, как Phorum. Похоже, что личные сообщения (PM) не мигрируются, но для меня это, по крайней мере, не является критичным препятствием.
Ещё раз спасибо за скрипт и усилия!