Ein XenForo-Forum zu Discourse migrieren

Hey guys so after trying for a week or so I decided to import the database on docker app which I hoped it will succeed without any issues. TBH I got some issues at first but it turned to be all easy to solve.

Now I would recommend doing this only once before you deploy your production site, after importing everything take a Discourse backup, wipe everything out and install new Discourse instance then restore the imported db.

Ok let’s begin:

  1. First lets backup your old database from your old server, sign in to your Discourse server then:

     ssh USER@XENFORO_SERVER_IP  # Use -p argument to specify custom port
     mysqldump -u XENFORO_DATABASE_USER -p XENFORO_DATABASE_NAME > xen_db.sql
     exit
    
  2. After installing Discourse start the app:

     ./launcher start app
    
  3. Now lets pull the database backup from xenforo server:

     scp USER@XENFORO_SERVER_IP:~/xen_db.sql /var/discourse/shared/standalone/xen_db.sql
    

    If you changed the ssh port use -P argument

     scp -P 2222 USER@XENFORO_SERVER_IP:~/xen_db.sql /var/discourse/shared/standalone/xen_db.sql 
    
  4. Login to docker machine, install and start mysql:

     docker exec -it app bash
     sudo apt-get update
     sudo apt-get upgrade
    

    During the installation you will be asked to set a root password for mysql

     sudo apt-get install mysql-server mysql-client libmysqlclient-dev
     service mysql start
    
  5. Login to mysql and create new database:

     mysql -u root -p
    

    Enter your mysql root password then

     create database xenforo_db;
     exit;
    
  6. Import your xenforo database into the new one:

     mysql -u root -p xenforo_db < /shared/xen_db.sql
     # Enter your mysql root password and wait until it finish
    
  7. Include the gem in discourse Gemfile:

     echo "gem 'mysql2'" >>Gemfile
    
  8. Run bundle install:

     bundle install --no-deployment
    
  9. Edit the importer script and change the following:

    vi /var/www/discourse/script/import_scripts/xenforo.rb
    XENFORO_DB = "xenforo_db"
    @client = Mysql2::Client.new(
      host: "localhost",
      username: "root",
      password: "Your mysql root password",
      database: XENFORO_DB
    )
    
  10. You are set to go now, run the importer:

    RAILS_ENV=production bundle exec ruby script/import_scripts/xenforo.rb

  11. If you get the error 'Peer authentication failed for user "discourse"':

  12. Edit the file /etc/postgresql/9.5/main/pg_hba.conf

  13. change all ‘peer’ to ‘trust’ and save the file

  14. restart postgres server: service postgresql restart

Run the importer again and this time it should work without any problem, be patient this might take a while based on your database size.

Hope this helps someone. :slight_smile:

24 „Gefällt mir“

What are the list of XenForo Data covered on this import?
I hope to import this list:

XenForo Page Nodes

  • Pages

XenForo

  • Profile Fields
  • Member Groups
  • Members
  • Status Updates / Profile Comments
  • Status Comments
  • Private Messages
  • Private Message Replies
  • Attachments
  • Member Ranks

XenForo Forums

  • Forums
  • Topics
  • Posts
  • Attachments
1 „Gefällt mir“

Got this error:

# bundle install --no-deployment
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine.
Your Gemfile has no gem server sources. If you need gems that are not already on your machine, add a line like this to your Gemfile:
source 'https://rubygems.org'
Could not find gem 'mysql2' in any of the gem sources listed in your Gemfile.
1 „Gefällt mir“

Different Error now.

root@discourse-app:/var/www/discourse# RAILS_ENV=production bundle exec ruby script/import_scripts/xenforo.rb
No connection to db, unable to retrieve site settings! (normal when running db:create)
No connection to db, unable to retrieve site settings! (normal when running db:create)
No connection to db, unable to retrieve site settings! (normal when running db:create)
No connection to db, unable to retrieve site settings! (normal when running db:create)
No connection to db, unable to retrieve site settings! (normal when running db:create)
No connection to db, unable to retrieve site settings! (normal when running db:create)
Traceback (most recent call last):
	31: from script/import_scripts/xenforo.rb:3:in `<main>'
	30: from script/import_scripts/xenforo.rb:3:in `require'
	29: from /var/www/discourse/script/import_scripts/base.rb:20:in `<top (required)>'
	28: from /var/www/discourse/script/import_scripts/base.rb:544:in `<class:Base>'
	27: from /var/www/discourse/lib/discourse.rb:411:in `system_user'
	26: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/core.rb:196:in `find_by'
	25: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/core.rb:196:in `all?'
	24: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/core.rb:196:in `each'
	23: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/core.rb:196:in `block in find_by'
	22: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/model_schema.rb:336:in `columns_hash'
	21: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/model_schema.rb:456:in `load_schema'
	20: from /usr/local/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
	19: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/model_schema.rb:459:in `block in load_schema'
	18: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/attribute_decorators.rb:51:in `load_schema!'
	17: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/attributes.rb:234:in `load_schema!'
	16: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/model_schema.rb:466:in `load_schema!'
	15: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_handling.rb:90:in `connection'
	14: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_handling.rb:118:in `retrieve_connection'
	13: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:1008:in `retrieve_connection'
	12: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:380:in `connection'
	11: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:521:in `checkout'
	10: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:793:in `acquire_connection'
	 9: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:832:in `try_to_checkout_new_connection'
	 8: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:853:in `checkout_new_connection'
	 7: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:809:in `new_connection'
	 6: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:40:in `postgresql_connection'
	 5: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:40:in `new'
	 4: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:215:in `initialize'
	 3: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:684:in `connect'
	 2: from /usr/local/lib/ruby/gems/2.5.0/gems/pg-1.0.0/lib/pg.rb:56:in `connect'
	 1: from /usr/local/lib/ruby/gems/2.5.0/gems/pg-1.0.0/lib/pg.rb:56:in `new'
/usr/local/lib/ruby/gems/2.5.0/gems/pg-1.0.0/lib/pg.rb:56:in `initialize': FATAL:  Peer authentication failed for user "discourse" (PG::ConnectionBad)
1 „Gefällt mir“

Yay no idea how long this will take :smiley:

3 „Gefällt mir“

This is correct right?

1 „Gefällt mir“

Guide needs an update I think.
Before running this, directory must be within /var/www/discourse/.
cd /var/www/discourse/

4 „Gefällt mir“

3 Beiträge wurden in ein neues Thema aufgeteilt: XenForo-Importskript hat gesperrte Benutzer und weichgelöschte Themen und Beiträge importiert

8 posts were split to a new topic: Help migrating Xenforo

14 Beiträge wurden in ein neues Thema aufgeteilt: Probleme beim Importieren von Anhängen aus XenForo

5 Beiträge wurden in ein neues Thema aufgeteilt: Probleme beim Umzug von XenForo nach Discourse

Ein Beitrag wurde in ein bestehendes Thema verschoben: Schwierigkeiten beim Umzug von XenForo nach Discourse

Ich wollte euch nur mal fragen, warum ihr von XenForo zu Discourse gewechselt seid? Ich habe vor einer Woche ein Forum gestartet und habe XenForo-basierte Websites gesehen, die mich wegen ihrer Plugins, einschließlich des Punktesystems, beeindruckt haben. Ich wollte nur die Nachteile oder Gründe für den Wechsel wissen. Danke.

Gerade eine Xenforo → Discourse-Migration einer Million-Beiträge-Community auf einem Digital Ocean Droplet abgeschlossen. Hier ist, was bei mir Befehl für Befehl funktioniert hat (sehr ähnlich zu dem, was ich kürzlich auch auf einer anderen vBulletin-Community gemacht habe).

Empfehlung: Mindestens 4 vCPU/8 GB für den Import.

Danke an alle in diesem Thread, die mir bei diesen Migrationen geholfen haben. Es waren definitiv ein paar spannende Tage mit viel Lesen und Wiederlesen.

1 - Digital Ocean Discourse 1-Klick-Droplet installieren

2 - Discourse-Installation über SSH abschließen, indem Sie den Anweisungen folgen

SSH-Konsole öffnen
root
(IhrRootPasswort)
(Eingabe)
(IhreDomain).com
usw.

3 - An SFTP anmelden

sftp root@XXX.XXX.XX.XX
y (falls nach Bestätigung gefragt wird)
yes
(IhrRootPasswort)
put db.sql /var/discourse/shared/standalone/db.sql

4 - Auf der Website anmelden, um das Admin-Konto einzurichten

5 - An SSH anmelden – Prozess starten

ssh root@XXX.XXX.XX.XX
cd /var/discourse
./launcher start app
docker exec -it app bash
sudo apt-get update
sudo apt-get upgrade
y

6 - MariaDB installieren (Ersatz für MySQL)

apt-get update && apt-get install mariadb-server-10.3 libmariadbd-dev
y

7 - MySQL-Datenbank einrichten

service mysql start
mysql -u root -p
Passwort
create database import_db;
exit;

8 - Dump importieren → MySQL-Datenbankübertragung**

mysql -u root -p import_db < /shared/db.sql
Passwort

9 - GEM-Datei

echo "gem 'mysql2'" >>Gemfile
echo "gem 'mysql2', require: false" >> /var/www/discourse/Gemfile
echo "gem 'php_serialize', require: false" >> /var/www/discourse/Gemfile
cd /var/www/discourse
su discourse -c 'bundle install --no-deployment --without test --without development --path vendor/bundle'
(rote Textausgabe ignorieren)

10 - Installationsskript konfigurieren

vi /var/www/discourse/script/import_scripts/xenforo.rb

---Textdatei bei Bedarf für Datenbankname/Passwort, Präfix usw. bearbeiten---

(Esc)
:wq

11 - Bundle-Konfiguration

bundle config set path 'vendor/bundle'
bundle config set without 'development:test'
bundle config unset deployment
su discourse -c 'bundle install'

12 - MySQL-Konfiguration (möglicherweise mit dem vorherigen Schritt kombinierbar)

mysql --version
sudo mysql -u root -p
Passwort
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Passwort';
FLUSH PRIVILEGES;
exit

13 - Installationsskript ausführen

su discourse -c 'bundle exec ruby script/import_scripts/xenforo.rb'
4 „Gefällt mir“

Ich bin dabei, diese Migration abzuschließen, scheint jedoch bei den Anhängen einen Fehler zu werfen.

RAILS_ENV=production bundle exec ruby script/import_scripts/xenforo.rb
Lade bestehende Gruppen...
Lade bestehende Benutzer...
Lade bestehende Kategorien...
Lade bestehende Beiträge...
Lade bestehende Themen...

Erstelle Benutzer
Überspringe 407 bereits importierte Benutzer

Importiere Kategorien...
       12 / 12 (100,0 %)  [344731 Elemente/Min]
Erstelle Themen und Beiträge
        2 / 4554 (  0,0 %)  [17724 Elemente/Min]  Traceback (most recent call last):
        18: from script/import_scripts/xenforo.rb:396:in `<main>'
        17: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
        16: from script/import_scripts/xenforo.rb:32:in `execute'
        15: from script/import_scripts/xenforo.rb:174:in `import_posts'
        14: from /var/www/discourse/script/import_scripts/base.rb:866:in `batches'
        13: from /var/www/discourse/script/import_scripts/base.rb:866:in `loop'
        12: from /var/www/discourse/script/import_scripts/base.rb:867:in `block in batches'
        11: from script/import_scripts/xenforo.rb:180:in `block in import_posts'
        10: from /var/www/discourse/script/import_scripts/base.rb:508:in `create_posts'
         9: from /var/www/discourse/script/import_scripts/base.rb:508:in `each'
         8: from /var/www/discourse/script/import_scripts/base.rb:509:in `block in create_posts'
         7: from script/import_scripts/xenforo.rb:186:in `block (2 levels) in import_posts'
         6: from script/import_scripts/xenforo.rb:315:in `process_xenforo_post'
         5: from script/import_scripts/xenforo.rb:324:in `process_xf_attachments'
         4: from /usr/local/lib/ruby/2.7.0/set.rb:328:in `each'
         3: from /usr/local/lib/ruby/2.7.0/set.rb:328:in `each_key'
         2: from script/import_scripts/xenforo.rb:326:in `block in process_xf_attachments'
         1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.3/lib/active_support/core_ext/string/filters.rb:22:in `squish!'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.3/lib/active_support/core_ext/string/filters.rb:22:in `gsub!': can't modify frozen String: "\\t\\tSELECT a.attachment_id, a.data_id, d.fil\n\\t\\tFROM xf_attachment AS a\\n\\t\\tINNER JOIN xf_attachment_data d ON a.data_id = d.data_id\\n\\t\\tWHERE attachment_id = 13\\n" (FrozenError)


Hat jemand eine Idee, was hier los sein könnte? Was ist ein "FrozenError"?

Es sieht so aus, als müsste ich die Datei xenforo.rb bearbeiten und

# frozen_string_literal: true

in

# frozen_string_literal: false

ändern.

2 „Gefällt mir“

Danke, dass du diesen Leitfaden geschrieben hast!

Importiert der Importer auch Avatare und Anhänge? Muss ich sie einfach in den Ordner /tmp/attachments kopieren?

Bei einem kurzen Blick auf den Importer scheint es, dass er nur Uploads in Beiträge importiert. Die Unterstützung für Avatare müsste noch hinzugefügt werden.

2 „Gefällt mir“

Kann ich bestätigen. Es werden nur Uploads importiert. Avatare sind nicht enthalten. Ich habe letzte Woche gerade eine Xenforo-Migration abgeschlossen.

3 „Gefällt mir“

Board-Größe?
Beiträge/Threads/Mitglieder.
Herzlichen Glückwunsch :slight_smile:

2 „Gefällt mir“