Il mio viaggio di migrazione phpBB (postgresql)

Condivido le mie scoperte mentre procedo con una migrazione da phpBB3 a discourse.

Le soluzioni includono:

  • db sorgente postgres
  • emoji
  • modifiche all’importer (correzione bug citazioni, supporto bbcode migliorato (incluso youtube), commenti allegati)
  • post eliminati in modo “soft” importati come post normali

Sono molto esigente, quindi se mi seguirai, dovresti ottenere un risultato piuttosto buono.


Sto pensando di passare a discourse da phpbb (cronologia versioni installate: 3.2.1 - 3.2.8).
Il problema è che uso postgresql per il db. Suggerimenti? Non ci ho provato ma presumo che non sia ancora supportato in base all’OP.

È mai uscito il nuovo script di importazione? Vedo che è passato poco più di un anno.

1 Mi Piace

Lo script di importazione di massa dovrebbe funzionare per te… discourse/script/bulk_import/phpbb_postgresql.rb at 52d4de7b45eb1b7c7997da2ba8bff83a3c22a3a5 · discourse/discourse · GitHub

4 Mi Piace

Grazie, @gerhard

La mia comprensione è corretta?

  • script/import_scripts/phpbb3 e script/bulk_import sono importatori completamente separati
  • l’importatore bulk è meno sofisticato (sebbene più veloce) e, ad esempio, non importerà gli allegati?

Se sì, sembra che ci siano degli svantaggi nell’usare l’importatore bulk…

Non c’è un’altra soluzione, allora? Sarebbe consigliabile esplorare la possibilità di eseguire una migrazione del database da postgresql a mysql o qualcosa di simile?

2 Mi Piace

Sì, ci sono degli svantaggi. Se ti trovi a tuo agio a lavorare con Ruby, ti suggerirei di modificare i file in discourse/script/import_scripts/phpbb3/database at main · discourse/discourse · GitHub in modo che funzionino con la gemma pg invece di mysql2.

Forse? Non ho idea di quanto possa essere facile e se funzionerà davvero. Puoi provarci…

1 Mi Piace

Peccato. Beh, ci proverò. Ti farò sapere se trovo qualcosa.

2 Mi Piace

quell’importer sarà deprecato? qual è lo stato del ‘nuovo’? sto cercando di decidere quanto sforzo dedicare a questo: ci sarà un valore upstream?

2 Mi Piace

Non mi sono occupato personalmente del problema da postgresql a mysql, ma puramente dalla prospettiva di migrare da phpBB a Discourse, la mia opinione è: fai tutto il necessario per realizzare la migrazione.

Ho migrato due forum phpBB a Discourse e, sebbene ci siano state le solite lamentele da parte di un piccolo numero di utenti che si verificano con ogni cambiamento, i vantaggi di Discourse ne valgono assolutamente la pena! Non solo Discourse è più facile da mantenere e amministrare, ma l’engagement degli utenti integrato, la gestione delle immagini, la personalizzazione utente e la leggibilità di Discourse sono solo alcune delle funzionalità che sono così avanti rispetto a phpBB che non c’è paragone. Ottieni anche un supporto molto migliore con Discourse.

Non sono un esperto, ma una rapida ricerca sembra indicare che potresti migrare da postgresql a mysql eseguendo un dump dello schema, modificando i tipi di dati nelle istruzioni dello schema per farli corrispondere a quelli utilizzati da mysql, utilizzando lo schema modificato per creare le tabelle in un database mysql ed eseguendo quindi un’esportazione e importazione CSV tabella per tabella.

Una volta che hai il database mysql, potresti usare lo script di migrazione phpBB standard e avere tutti i tuoi allegati.

Ne varrà la pena!

3 Mi Piace

Sembra una ricetta per il disastro se non si presta attenzione ai set di caratteri e alle collation del database.

Un paio di anni fa ho iniziato a lavorarci, ma è incompiuto e obsoleto. Comunque, forse sarà utile.

3 Mi Piace

Non intendevo implicare che sarebbe stato facile, solo che ne vale la pena, è anche possibile farlo manualmente, e sembrano esserci molte risorse là fuori per realizzarlo, sia con strumenti automatici che manualmente. :grinning:

3 Mi Piace

Dato che odio Ruby e l’importatore esistente verrà deprecato a favore dell’importatore di massa (che non è ancora abbastanza buono per i miei scopi), sto procedendo con la strategia di migrazione da postgres a mysql.

Sto facendo progressi con la procedura guidata di migrazione di MySQL Workbench. Scriverò una piccola guida se avrà successo, ma finora sembra promettente.

2 Mi Piace

finora, sono bloccato su questo problema:

https://bugs.mysql.com/bug.php?id=89048

in pratica, mysql workbench fallisce durante l’importazione di unicode. proverò domani con mariadb per vedere se riesco a impostare la codifica predefinita del database o qualcos’altro prima dell’importazione.

1 Mi Piace

Sarebbe stato fantastico se MySQL Workbench avesse funzionato. Ho visto un sacco di segnalazioni di errori quando ho guardato le opzioni, quindi non l’ho consigliato.

Ho menzionato il dump dello schema e il metodo di esportazione/importazione CSV una volta prima, e lo menzionerò solo un’altra volta con una leggera modifica per renderlo molto più semplice e poi la smetterò.

Se vuoi seguire un percorso GUI:

  1. Procurati un’esportazione solo struttura di tutte le tabelle da una copia funzionante della stessa versione di phpBB3 che stai utilizzando e che esegue MySQL/MariaDB. Ci vorrebbero letteralmente due minuti a qualcuno per crearne una da phpMyAdmin, che è disponibile sulla maggior parte degli host web che eseguono MySQL/MariaDB. (In alternativa, potresti essere in grado di ottenere le istruzioni CREATE TABLE necessarie dagli script di installazione di phpBB3 se non riesci a convincere qualcuno a eseguire l’esportazione solo struttura per te, o anche utilizzare un account di hosting web economico per eseguire un’installazione pulita della tua versione di phpBB3 in un ambiente MySQL/MariaDB e quindi eliminare i dati nelle tabelle che crea per creare un database MySQL/MariaDB vuoto.)
  2. Trova l’accesso a un host web con MySQL/MariaDB e phpMyAdmin, crea il database, importa la struttura dall’esportazione solo struttura che hai creato nel passaggio 1 utilizzando phpMyAdmin.
  3. Crea un’esportazione CSV per ogni tabella dal tuo database postgresql ed esegui un’importazione CSV nella tabella corrispondente utilizzando phpMyAdmin nel tuo nuovo database MySQL/MariaDB.

Penso che ciò impedirà eventuali problemi con charset e codifica e non dovrai capire tutti i tipi di dati e le dimensioni dei campi corrispondenti che sarebbero necessari se provassi a convertire manualmente il dump dello schema da postgre.

Posso fornirti un’istruzione SQL solo struttura, ma l’unico DB che ho ancora è da phpBB3 3.3.8, quindi potrebbe aggiungere altri problemi se stai usando la v. 3.2.x.

3 Mi Piace

ahahah. sì, ci sono voluti alcuni trucchi non ovvi per farlo funzionare almeno per quanto ci sono riuscito. penso che potrebbe ancora funzionare, ma grazie per avermi dato un’altra strada da esplorare.

1 Mi Piace

Ok, per fortuna. Ecco la mia soluzione per l’importazione di PostgreSQL.

Questo ti porterà da un dump PostgreSQL a un server MariaDB funzionante a cui puoi collegare l’importatore. Richiede Docker Compose.

Funziona per phpBB 3.2. Non ho idea di come funzioni per la 3.3. Se hai disperatamente bisogno del supporto per la 3.3, posso provare a risolverlo se mi fornisci un dump pg_dumpall di phpBB 3.3.

3 Mi Piace

phpbb_smilies.zip (87.2 KB)

(confronta con le faccine predefinite)

fwiw ecco la mia soluzione per le emoji

ti do due opzioni:

  1. native
    • se non vuoi preservare le emoji phpBB originali, puoi mapparle alle emoji native già esistenti in discourse

:grin: :smile: :wink: :slightly_frowning_face: :astonished: :exploding_head: :confounded: :sunglasses: :joy: :rage:
:stuck_out_tongue: :person_facepalming: :sob: :imp: :smiling_imp: :roll_eyes: :exclamation: :question: :bulb: :arrow_forward:
:neutral_face: :smiley_cat: :nerd_face: :nerd_face:

  1. importate
    • se vuoi preservare le emoji phpBB originali e averle disponibili come shortcode per continuare a usarle:
      • prima di eseguire l’importatore, vai alla sezione emoji della dashboard di discourse (admin/customize/emojis)
      • se vuoi, crea prima un gruppo di emoji chiamato phpbb o qualcosa di simile
      • trascina i file emoji (5 alla volta) in new_files sul browser per importarli come emoji personalizzate

ho uno zip con la configurazione per entrambe le opzioni inclusa come import.yml nello zip.

anche nello zip c’è un foglio di calcolo per aiutarti a decidere o a creare la tua mappatura:

phpbb_smilies
├── phpbb_smilies.xlsx # riferimento principale per aiutarti a decidere
├── import.yml # file di configurazione con entrambe le opzioni
├── orig_phpbb_smilies.csv # dati phpbb originali
├── orig_files # file emoji phpbb originali
│   ├── icon_arrow.gif
│   └── ...
└── new_files # file emoji rinominati per corrispondere alla colonna `new_shortcode` nel foglio di calcolo
    ├── phpbb_arrow.gif
    └── ...
1 Mi Piace

Qualcuno è riuscito a far funzionare correttamente l’attribuzione delle citazioni?

Ecco un esempio di un post originale da phpbb contenente una citazione (nome utente e contenuto modificati, ID ecc. sono gli stessi)

[quote=someuser post_id=46649 time=1677556325 user_id=48]
foo
[/quote]

bar

Ecco come appare in Discourse:

Ecco il post grezzo migrato a Discourse:

[quote=", post:37, topic:1893"]
foo
[/quote]

bar

Il postid e il topicid migrati sono corretti, ma il nome utente è mancante. Questo lo rende non interattivo. Quando il nome utente è una stringa vuota, la citazione non si espande e non è possibile fare clic su di essa per seguire il riferimento al post originale.

Posso sperare in un’esperienza migliore senza apportare miglioramenti all’importer? Cioè, sto solo facendo qualcosa di sbagliato?

1 Mi Piace

Sono abbastanza sicuro che questi abbiano funzionato correttamente su un’importazione phpbb3 che ho fatto nell’ultimo mese.

1 Mi Piace

Non ho ancora capito l’ultimo problema, ma ecco un’altra domanda.

Noto che dopo che l’importazione è terminata e avvii il container dell’app, il mio server phpBB ancora esistente viene messo a dura prova. Penso che ciò accada durante la fase di post-elaborazione di sidekiq.

phpBB esiste ancora su www.example.com e Discourse è su dc.example.com.

Sto cercando di capire cosa sta succedendo realmente, quali impostazioni abbiano senso durante questa migrazione di test e quali impostazioni avranno senso per la migrazione finale. E se ho bisogno di avere phpBB in esecuzione per quella post-elaborazione di sidekiq. Chiedo perché non ho idea di cosa succeda nella post-elaborazione.

Alcune impostazioni potenzialmente rilevanti nel mio attuale settings.yml:

import:
  # Imposta questo se importi più forum phpBB in un unico forum Discourse.
  site_name:
  site_prefix:
    # questo è necessario per riscrivere i link interni nei post
    original: example.com    # senza http(s)://
    new: https://dc.example.com       # con http:// o https://

Se c’è altro che devo controllare, fammelo sapere.

Un’altra cosa che non mi è chiara è il sottodominio www. Attualmente reindirizzo a www con nginx per phpBB. Quindi nell’esempio sopra, ha importanza se metto original: example.com o original: www.example.com? Domanda simile per new quando farò la migrazione finale. I miei utenti accederanno effettivamente a Discourse da www.example.com, ma non so quale sia la best practice.

1 Mi Piace

C’è davvero qualcosa che non va nell’analisi delle citazioni.
Ho appena provato a importare una versione di phpBB 3.2.8 appena installata (installata su mariadb)
L’attribuzione della citazione non funziona: il campo username è vuoto nelle citazioni importate, ma tutto il resto è corretto.
screenshot di discourse del post importato:

post importato da discourse:

[quote=", post:4, topic:12"]
[quote=", post:3, topic:12"]
[quote=", post:2, topic:12"]
msg 1
[/quote]

second
[/quote]

third
[/quote]

fourth

post originale di phpbb:

MariaDB [phpbb]> select post_text from phpbb_posts where post_id=5;
...
| <r><QUOTE author="admin" post_id="4" time="1678400691" user_id="2"><s
[quote=admin post_id=4 time=1678400691 user_id=2]</s>
<QUOTE author="admin" post_id="3" time="1678400685" user_id="2"><s
[quote=admin post_id=3 time=1678400685 user_id=2]</s>
<QUOTE author="admin" post_id="2" time="1678400675" user_id="2"><s
[quote=admin post_id=2 time=1678400675 user_id=2]</s>msg 1</e>
[/quote]

second

[/quote]
third

[/quote]
fourth</r> |

forse finirò per apportare miglioramenti all’importatore dopotutto…

3 Mi Piace

corretto


sono piuttosto esigente riguardo alla migrazione del mio forum, quindi continuo a migliorare l’importer. non sono sicuro se mi preoccuperò di creare PR poiché l’importer è deprecato e alcune delle mie correzioni sono semi-specifiche per il mio forum, ma questo branch conterrà tutte le mie correzioni combinate nel caso fosse utile a qualcuno:

ho corretto il problema delle citazioni, aggiunto il supporto per alcuni bbcode comunemente aggiunti, reso meno errata l’analisi dei link di youtube e aggiunto il supporto per l’estensione mentions/simplementions. ho ancora altro da migliorare, come aggiungere il supporto per prefissi di siti multipli (il caso d’uso principale è quando hai link sul tuo forum a example.com e www.example.com).

anche se sto supportando alcune cose non standard, non dovrebbe essere un problema eseguirlo su un forum phpBB standard senza estensioni. in ogni caso, consiglio di usare il mio.

il modo più semplice per usarlo è clonare il mio branch da qualche parte e sovrascrivere la directory dello script di importazione all’interno del container con un bind mount.

cioè, clona le mie modifiche da qualche parte:

git clone --filter=blob:none --no-checkout https://github.com/ftc2/discourse.git discourse_dev
cd discourse_dev
git sparse-checkout set --cone
git switch phpbb_import
git sparse-checkout set script/import_scripts

quindi aggiungi questo alla configurazione del tuo container import.yml:

docker_args:
  - '-v /path/to/discourse_dev/script/import_scripts:/var/www/discourse/script/import_scripts'

quindi ricompila il container di importazione. dopo aver ricompilato, probabilmente vorrai fare un reset di dove hai clonato il mio repository perché il processo di build sovrascriverà i miei file, lol.

cd /path/to/discourse_dev
git reset --hard HEAD
chown -R 1000:1000 .
5 Mi Piace