Dieses Dokument wurde durch diesen anderen SMF2-Leitfaden ersetzt: Migrate an SMF2 forum to Discourse
Ich wollte unseren guten alten SMF2-Forum wirklich zu Discourse migrieren. Wir haben über 1000 Mitglieder und rund 20.000 Beiträge in etwa 2.000 Themen.
Auf SMF2 haben wir keine Umfragen oder Anhänge verwendet – tatsächlich hatte nicht einmal jeder ein Avatar. Einige Beiträge verließen sich jedoch stark auf „erweiterten" BBCode.
So haben wir das umgesetzt.
Voraussetzungen
Installieren Sie Discourse einfach auf die übliche Weise.
Ich habe das Discourse BBCode-Plugin hinzugefügt, um Listen, Größen, Farben usw. von Haus aus zu verarbeiten.
Wenn Sie keine Remote-Verbindung zu Ihrer SMF2-MySQL-Datenbank herstellen können, müssen Sie Ihre Daten aus einem Dump in einen temporären Docker-Container importieren.
Wenn Ihre Datenbank Remote-Verbindungen akzeptiert – oder auf demselben Host läuft, können Sie diesen Schritt überspringen.
Ein temporärer Docker MySQL-Container
Sichern Sie Ihre Datenbank:
cd /tmp/
mysqldump –u[Benutzername] –p[Passwort] [Datenbankname] > sqldump.sql
Erstellen Sie den temporären Docker MySQL-Container:
cd /tmp/
docker run -d -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -v "$PWD":/backup --name=mysql mysql
Dann betreten Sie ihn:
docker exec -it mysql bash
Importieren Sie Ihren Datenbank-Dump:
mysql -uuser -ppass db < /backup/sqldump.sql
Wenn Sie den folgenden Fehler erhalten:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Warten Sie einfach eine Minute, bis der Container vollständig hochgefahren ist.
Für die Datenbankkompatibilität musste ich den Authentifizierungsplugin meiner temporären Datenbank ändern, aber bei Ihnen kann das abweichen:
mysql -uuser -ppass db
Verwenden Sie diese Abfrage:
ALTER USER user
IDENTIFIED WITH mysql_native_password
BY 'pass';
Melden Sie sich dann ab und überprüfen Sie die IP-Adresse Ihrer MySQL-Instanz:
exit
docker inspect mysql | grep IPAddress
Sie haben jetzt eine funktionierende Kopie Ihrer SMF2-Datenbank.
Ein temporärer Discourse-Import-Container
Erstellen wir einen neuen Container namens „import", basierend auf dem Standard-App.yml-Container:
cd /var/discourse
cp containers/app.yml containers/import.yml
nano containers/import.yml
Fügen Sie die mysql-dep-Vorlage zu Ihrem neuen Import-Container hinzu:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Kommentieren Sie diese beiden Zeilen aus, wenn Sie Lets Encrypt (https) hinzufügen möchten
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
- "templates/import/mysql-dep.template.yml"
Dann einfach:
/var/discourse/launcher stop app
/var/discourse/launcher rebuild import
Importieren in Discourse
Sobald der Import-Container neu erstellt wurde, müssen wir ihn für unseren neuesten Trick betreten:
/var/discourse/launcher enter import
cd /var/www/discourse/ # Das Skript muss von diesem genauen Verzeichnis aus gestartet werden, aber Sie sollten ohnehin dort gelandet sein
su discourse -c "bundle exec ruby script/import_scripts/smf2.rb -h 172.17.0.3 -u user -p pass -d db -f smf_ -t Europe/Paris"
- -h: Der Hostname Ihrer SMF2-MySQL-Datenbank (hier die IP eines Docker-Containers);
- -u: SMF2-MySQL-Benutzer;
- -p: SMF2-MySQL-Passwort;
- -d: SMF2-MySQL-Datenbank;
- -f: SMF2-Tabellenpräfix;
- -t: SMF2-Zeitzone.
Bereinigung
Wenn Sie den temporären MySQL-Docker-Container erstellt haben, stoppen und entfernen Sie ihn:
docker stop mysql
docker rmi mysql
Stoppen Sie den Discourse-„import"-Container und verwenden Sie den Launcher zur Bereinigung:
/var/discourse/launcher destroy import
/var/discourse/launcher cleanup
Ich habe es tatsächlich geschafft, meinen Hauptcontainer zu zerstören
Kein Problem:
/var/discourse/launcher rebuild app
Discourse-Einstellungen nach dem Import
Einige Standardeinstellungen können Probleme mit importierten Beiträgen und Berechtigungen verursachen. Ändern Sie diese je nach Bedarf im Discourse-Einstellungsbereich:
- min topic title length: Ich habe sie auf 3 geändert – Themen mit zu kurzen Titeln erwiesen sich als sehr schwer zu bearbeiten (konnten nicht verschoben werden usw.);
- title prettify: Ich musste es ausschalten – Themen, deren Titel nicht mit einem Großbuchstaben begannen, erwiesen sich als sehr schwer zu bearbeiten (konnten nicht verschoben werden usw.).
Bibliografie
- How to use the bbpress import script - or any other import script with mysql dependency (lead4good, Mai 2017);
- “Authentication plugin ‘caching_sha2_password’ cannot be loaded” (meow, April 2018).