Questa documentazione è ora superata da questa guida SMF2: Migrate an SMF2 forum to Discourse
Volevo davvero migrare il nostro vecchio forum SMF2 su Discourse. Abbiamo oltre 1000 membri e circa 20.000 post in circa 2.000 argomenti.
Su SMF2 non abbiamo mai usato sondaggi nĂŠ allegati â in realtĂ , non tutti avevano nemmeno un avatar. Alcuni post facevano molto affidamento su BBCode âavanzatoâ, però.
Ecco come abbiamo fatto.
Prerequisiti
Basta installare Discourse nel modo consueto.
Ho aggiunto il plugin Discourse BBCode per gestire liste, dimensioni, colori ecc. direttamente.
Se non riesci a stabilire una connessione remota al database MySQL di SMF2, dovrai importare i tuoi dati da un dump in un contenitore Docker temporaneo.
Se il tuo database accetta connessioni remote â o se è in esecuzione sullo stesso host, puoi saltare questo passaggio.
Un contenitore MySQL Docker temporaneo
Esegui il dump del tuo database:
cd /tmp/
mysqldump âu[nome utente] âp[password] [nome database] > sqldump.sql
Crea il contenitore MySQL Docker temporaneo:
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
Poi accedici:
docker exec -it mysql bash
Importa il dump del tuo database:
mysql -uuser -ppass db < /backup/sqldump.sql
Se ricevi il seguente errore:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Aspetta solo un minuto affinchĂŠ il contenitore si avvii completamente.
Per la compatibilitĂ del database, ho dovuto modificare il plugin di autenticazione del nostro database temporaneo, ma immagino che il tuo caso possa variare:
mysql -uuser -ppass db
Usa questa query:
ALTER USER user
IDENTIFIED WITH mysql_native_password
BY 'pass';
Poi esci e controlla lâindirizzo IP della tua istanza MySQL:
exit
docker inspect mysql | grep IPAddress
Ora hai una copia funzionante del tuo database SMF2.
Un contenitore di importazione Discourse temporaneo
Creiamo un nuovo contenitore chiamato âimportâ, basato sul contenitore app.yml predefinito:
cd /var/discourse
cp containers/app.yml containers/import.yml
nano containers/import.yml
Aggiungi il template mysql-dep al tuo nuovo contenitore di importazione:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Scommenta queste due righe se desideri aggiungere Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
- "templates/import/mysql-dep.template.yml"
Poi semplicemente:
/var/discourse/launcher stop app
/var/discourse/launcher rebuild import
Importazione in Discourse
Una volta che il contenitore di importazione è stato ricostruito, dobbiamo accedervi per la nostra ultima modifica:
/var/discourse/launcher enter import
cd /var/www/discourse/ # lo script deve essere lanciato da questa directory esatta, ma dovresti esserci giĂ finito comunque
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: hostname del database MySQL SMF2 (qui, lâIP di un contenitore Docker);
- -u: utente MySQL SMF2;
- -p: password MySQL SMF2;
- -d: database MySQL SMF2;
- -f: prefisso delle tabelle SMF2;
- -t: fuso orario SMF2.
Pulizia
Se lâhai creato, ferma e rimuovi il contenitore MySQL Docker temporaneo:
docker stop mysql
docker rmi mysql
Ferma il contenitore Discourse âimportâ e usa il launcher per la pulizia:
/var/discourse/launcher destroy import
/var/discourse/launcher cleanup
In realtĂ sono riuscito a distruggere il mio contenitore principale
Non è un grosso problema:
/var/discourse/launcher rebuild app
Impostazioni Discourse dopo lâimportazione
Alcune impostazioni predefinite potrebbero causare problemi con i post importati e i permessi. Modificale in base alle tue esigenze dal pannello delle impostazioni di Discourse:
- lunghezza minima del titolo dellâargomento: lâho impostata a 3 â gli argomenti con titoli troppo brevi si sono rivelati molto difficili da gestire (non potevano essere spostati, ecc.);
- abbellimento del titolo: ho dovuto disattivarlo â gli argomenti il cui titolo non iniziava con una lettera maiuscola si sono rivelati molto difficili da gestire (non potevano essere spostati, ecc.).
Bibliografia
- Come usare lo script di importazione bbpress - o qualsiasi altro script di importazione con dipendenza mysql (lead4good, maggio 2017);
- âAuthentication plugin âcaching_sha2_passwordâ cannot be loadedâ (meow, aprile 2018).