Este documento ha sido reemplazado por esta otra guía de SMF2: Migrate an SMF2 forum to Discourse
Realmente quería migrar nuestro querido foro SMF2 a Discourse. Tenemos más de 1000 miembros y aproximadamente 20k publicaciones en alrededor de 2k temas.
En SMF2, no utilizábamos encuestas ni archivos adjuntos; de hecho, ni siquiera todos tenían un avatar. Algunas publicaciones dependían en gran medida de BBCode “avanzado”, sin embargo.
Así es como lo logramos.
Requisitos previos
Simplemente instala Discourse de la manera habitual.
Añadí el plugin Discourse BBCode para manejar listas, tamaños, colores, etc., de forma predeterminada.
Si no puedes abrir una conexión remota a tu base de datos MySQL de SMF2, tendrás que importar tus datos desde un volcado a un contenedor Docker temporal.
Si tu base de datos acepta conexiones remotas o se ejecuta en el mismo host, puedes saltarte este paso.
Un contenedor MySQL temporal de Docker
Volca tu base de datos:
cd /tmp/
mysqldump –u[usuario] –p[contraseña] [nombre_base_datos] > sqldump.sql
Crea el contenedor MySQL temporal de Docker:
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
Luego, entra en él:
docker exec -it mysql bash
Importa el volcado de tu base de datos:
mysql -uuser -ppass db < /backup/sqldump.sql
Si obtienes el siguiente error:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Simplemente espera un minuto para que el contenedor se inicie completamente.
Para la compatibilidad de la base de datos, tuve que cambiar el plugin de autenticación de nuestra base de datos temporal, pero supongo que tu experiencia puede variar:
mysql -uuser -ppass db
Usa esta consulta:
ALTER USER user
IDENTIFIED WITH mysql_native_password
BY 'pass';
Luego, cierra sesión y verifica la dirección IP de tu instancia de MySQL:
exit
docker inspect mysql | grep IPAddress
Ahora tienes una copia funcional de tu base de datos SMF2.
Un contenedor de importación de Discourse temporal
Creemos un nuevo contenedor llamado “import”, basado en el contenedor predeterminado app.yml:
cd /var/discourse
cp containers/app.yml containers/import.yml
nano containers/import.yml
Añade la plantilla mysql-dep a tu nuevo contenedor de importación:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Descomenta estas dos líneas si deseas añadir Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
- "templates/import/mysql-dep.template.yml"
Luego, simplemente:
/var/discourse/launcher stop app
/var/discourse/launcher rebuild import
Importación en Discourse
Una vez que se reconstruye el contenedor de importación, debemos entrar en él para nuestra última modificación:
/var/discourse/launcher enter import
cd /var/www/discourse/ # el script debe ejecutarse desde ese directorio exacto, pero deberías haber llegado allí de todos modos
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: nombre de host de tu base de datos MySQL de SMF2 (aquí, la IP de un contenedor Docker);
- -u: usuario de MySQL de SMF2;
- -p: contraseña de MySQL de SMF2;
- -d: base de datos MySQL de SMF2;
- -f: prefijo de tablas de SMF2;
- -t: zona horaria de SMF2.
Limpieza
Si lo creaste, detén y elimina el contenedor MySQL temporal de Docker:
docker stop mysql
docker rmi mysql
Detén el contenedor “import” de Discourse y usa el lanzador para limpiar:
/var/discourse/launcher destroy import
/var/discourse/launcher cleanup
Realmente logré destruir mi contenedor principal
No importa:
/var/discourse/launcher rebuild app
Configuración de Discourse después de la importación
Algunas configuraciones predeterminadas pueden causar problemas con las publicaciones importadas y los permisos. Cambia estas según tus necesidades desde el panel de configuración de Discourse:
- longitud mínima del título del tema: Lo cambié a 3; los temas cuyo título era demasiado corto resultaron muy difíciles de trabajar (no se podían mover, etc.);
- embellecer título: Tuve que desactivarlo; los temas cuyo título no comenzaba con una letra mayúscula resultaron muy difíciles de trabajar (no se podían mover, etc.).
Bibliografía
- Cómo usar el script de importación de bbpress o cualquier otro script de importación con dependencia de MySQL (lead4good, mayo de 2017);
- “Authentication plugin ‘caching_sha2_password’ cannot be loaded” (meow, abril de 2018).