MyBB 포럼을 Discourse로 마이그레이션하기

이 튜토리얼에서는 공식 MyBB Importer 스크립트를 사용하여 MyBB 포럼을 :discourse: 플랫폼으로 마이그레이션하는 방법을 배웁니다.

마이그레이션 가능한 항목

  • 카테고리
    • 루트 카테고리 => 루트 카테고리
    • 하위 카테고리 => 하위 카테고리
    • 루트 포럼 => 하위 카테고리
    • 하위 포럼 => 하위 카테고리
  • 스레드 및 답변 => 토픽 및 게시물
  • 사용자
    • 사용자 이름
    • 이메일
    • 권한 상태
    • 가입 상태
  • 리다이렉트

우리의 계획은 매우 간단합니다:

  • 로컬 DEV 환경 설정.
  • 프로덕션 데이터베이스 내보내기.
  • Discourse로 프로덕션 데이터베이스 가져오기.
  • MyBB importer 스크립트 실행.

시작해 보겠습니다 :slightly_smiling_face:

로컬 DEV 환경 설정

우선, 다음 가이드 중 하나를 따라 Discourse 플랫폼 자체를 설치해야 합니다. 문제가 발생하면 이 가이드를 참조하세요.

MySQL 데이터베이스 서버를 설치합니다;

MacOS:

$ brew install mysql@5.7
$ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile

서비스 상태를 확인합니다:

$ brew services list

다음과 같은 내용이 표시되어야 합니다:

mysql@5.7         started

그렇지 않다면, 다음을 실행하고 다시 시도하세요:

$ brew services start mysql@5.7

Ubuntu 18.04:

$ sudo apt update
$ sudo apt install mysql-server -y

MySQL 설치가 완료된 후, 그 상태를 확인합니다:

$ systemctl status mysql.service

실행 중이 아니라면, 다음을 실행하세요:

$ sudo systemctl start mysql

Windows의 경우, 공식 설치 가이드를 따를 수 있습니다.

이 환경을 Discourse 서버라고 부를 것입니다.

프로덕션 데이터베이스 내보내기

다음 명령을 실행하여 프로덕션 데이터베이스(MyBB 프로덕션 서버에서)를 내보내거나 백업합니다:

$ mysqldump -u USER_NAME -p DATABASE_NAME > mybb_dump.sql
  • 이 데이터베이스 덤프를 Discourse 서버로 복사합니다.

:bulb: scp 또는 rsync를 사용하여 데이터베이스를 복사할 수 있습니다.

Discourse로 프로덕션 데이터베이스 가져오기

Discourse 서버에서 데이터베이스를 생성합니다:

$ mysql -u root

:bulb: DB 사용자가 비밀번호를 가지고 있다면, mysql -u root -p를 사용해야 하며, 그런 다음 비밀번호를 입력해야 합니다.

mysql> CREATE DATABASE mybb;

다음 명령을 실행하여 데이터베이스가 성공적으로 생성되었는지 확인합니다:

mysql> SHOW DATABASES;

다음과 같은 내용이 표시되어야 합니다:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| mybb               |
| sys                |
+--------------------+

현재 mybb DB는 비어 있습니다. 다음 단계는 프로덕션 데이터베이스를 여기에 가져오는 것입니다.

$ mysql -u root mybb < mybb_dump.sql

나중에 테이블 접두사가 필요할 것입니다. 그러니 여기 있는 동안 이를 가져오겠습니다.

$ mysql -u root
mysql> USE mybb;
mysql> SHOW TABLES;

다음과 같은 내용이 표시됩니다:

+--------------------------+
| Tables_in_mybb           |
+--------------------------+
| mybb_adminlog            |
| mybb_adminoptions        |
| mybb_adminsessions       |
| mybb_adminviews          |
| mybb_announcements       |
| mybb_attachments         |
| mybb_attachtypes         |
| ...The rest of tables....|
+--------------------------+
```\n
출력이 보여주듯, 우리의 테이블 접두사는 `mybb_`입니다.

### MyBB Importer 스크립트 실행

- 먼저 importer의 종속성을 설치해 보겠습니다. *Discourse 서버*에서:

$ cd ~/discourse
$ echo “gem ‘mysql2’, require: false” >> Gemfile
$ bundle install


다음으로, 스크립트가 올바르게 실행되도록 구성해야 합니다. 다음을 셸에 복사하여 붙여넣으세요(필요한 경우 값을 변경):

export DB_HOST=“localhost”
export DB_NAME=“mybb”
export DB_PW=“”
export DB_USER=“root”
export TABLE_PREFIX=“mybb_”


스크립트를 구성하는 다른 옵션도 있습니다. `script/import_scripts/mybb.rb` 파일을 원하는 편집기로 열고, 이중 인용부호 안의 값을 필요에 맞게 변경하세요:

```ruby
  DB_HOST ||= ENV['DB_HOST'] || "localhost"
  DB_NAME ||= ENV['DB_NAME'] || "mybb"
  DB_PW ||= ENV['DB_PW'] || ""
  DB_USER ||= ENV['DB_USER'] || "root"
  TABLE_PREFIX ||= ENV['TABLE_PREFIX'] || "mybb_"

깨끗한 Discourse 인스턴스로 importer를 실행합니다:

$ bundle exec rails db:drop
$ bundle exec rails db:create
$ bundle exec rails db:migrate
$ bundle exec ruby script/import_scripts/mybb.rb

importer는 MySQL 서버에 연결하여 MyBB 데이터베이스를 Discourse 데이터베이스로 마이그레이션합니다.

importer가 완료되면, 다음을 실행하여 Discourse 인스턴스를 시작합니다:

$ bundle exec rails server

다음으로, 마이그레이션된 데이터를 처리하기 위해 Sidekiq(백그라운드 작업 프로세서)를 시작합니다:

$ bundle exec sidekiq

:bulb: http://localhost:3000/sidekiq/queues에서 sidekiq 진행 상황을 모니터링할 수 있습니다.

이 튜토리얼을 따라 Discourse 프로덕션 서버를 설정합니다.

이 튜토리얼을 따라 Discourse 플랫폼(로컬 Discourse Server)에 대한 백업을 수행하고, 이를 Discourse 프로덕션 서버에 업로드합니다.

:tada:

과정에 대해 질문이 있으시면 기꺼이 도와드리겠습니다.

행복한 마이그레이션 되세요 :grinning:

9개의 좋아요

안녕하세요 - 이 가이드는 훌륭해 보이지만, 저는 리눅스 사용자가 아니라 cPanel 사용자로, 공유 호스팅에서 이전하는 중입니다. 원래 호스트에 루트 액세스나 SSH 액세스가 없으며, cPanel의 phpMyAdmin을 통해 MyBB 데이터베이스를 내보낼 수 있을 뿐입니다.

이렇게 하면 될까요?

특별한 내보내기 설정이 필요한가요? 그리고 이 데이터베이스를 Digital Ocean 드롭렛의 어떤 디렉토리에 복사해야 하나요? (FileZilla를 사용 중입니다)

네.

무관합니다. 홈 디렉토리에 두시면 됩니다.

3개의 좋아요

다시 인사드립니다. 튜토리얼을 이 지점까지는 진행할 수 있습니다.

bundle install

그런데 저에게는 다음과 같은 오류가 발생합니다.

'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.
’

어떤 제안이 있을까요?

불행히도 저는 Ruby나 Linux, Gemfile에 대해 전혀 모르고, 튜토리얼에 따라 PuTTy를 통해 명령어를 복사해서 붙여넣기하며 Discourse CLI 설정 작업을 단순히 진행하고 있을 뿐입니다. 아무런 이해 없이 말입니다.

참고로 저는 Digital Ocean Droplet에서 Ubuntu와 Discourse를 실행 중입니다. 도움이 될까요?

또한, 나중에 'shell’에 데이터베이스 내보내기 명령어를 붙여넣으라는 설명을 보았습니다. 실질적으로 현재 PuTTy를 통한 서버 연결이 'shell’에 해당하는 건가요, 아니면 다른 인터페이스/콘솔이 필요한 건가요?

자, 내 질문에 대한 부분적인 답변으로, 포럼을 여기저기 뒤져본 결과

$ sudo apt-get install libmysqlclient-dev

을 실행하면 mysql2 gem이 설치될 수 있다고 합니다(그게 뭔지는 모르겠지만) - 루트 사용자로 실행하지 말라는 경고는 무시했습니다.

그 문제를 넘어서 다음 단계로 넘어가서

$ bundle exec rails db:drop

을 입력하면 또 다른 에러가 나요::::

bundler: failed to load command: rails (/usr/local/bin/rails)
Gem::Exception: can’t find executable rails for gem railties. railties is not currently included in the bundle, perhaps you meant to add it to your Gemfile?

/usr/local/bin/ 디렉터리를 확인해봤는데 'rails’라는 이름의 파일이 확실히 존재합니다.

sudo gem 또는 gem install rails, $ sudo gem install rails를 입력해봐도 도움이 되지 않습니다(이 에러에 대한 여러 제안들을 우연히 찾아봤는데도요).

정상적인 의존성들이 모두 존재하는지 확인하기 위해 Ruby on Rails를 처음부터 다시 설치해봤습니다 How To Install Ruby on Rails with rbenv on Ubuntu 18.04 | DigitalOcean - 하지만 2.51 버전이든 2.61 버전이든 사용해도 개선이 없습니다.

정말 제 능력 밖의 문제네요…

솔직히 말씀드리면, 이 가이드를 그대로 따르는 것은 Windows 10에서 WSL2로 설치된 Ubuntu-18.04 환경에서 공식 절차에 따라 로컬 개발 환경을 설정하려는 사용자에게 작동하지 않습니다. 거의 모든 단계에서 의존성 누락, 연결 거부 오류 또는 유사한 문제가 발생합니다.

많은 시행착오와 온라인 조사를 통해 다음 명령어까지 진행하는 데 성공했습니다:

$ bundle exec ruby script/import_scripts/mybb.rb

하지만 이 명령어는 다음과 같은 응답을 반환합니다:

mysql2/client.rb:90:in `connect’: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2) (Mysql2::Error::ConnectionError)

이 부분이 벽처럼 가로막고 있습니다. 온라인에서 검색해 본 결과 이 문제를 해결하는 작동 가능한 솔루션을 찾지 못했습니다.

이 문제를 어떻게 해결하고 다음 단계로 나아갈 수 있을까요? 도움을 주시면 감사하겠습니다!

1개의 좋아요

안녕하세요, DigitalOcean 드롭레트에 데이터베이스를 업로드하는 방법이 어떻게 되나요? DigitalOcean의 1클릭 설치를 사용하여 Discourse(Ubuntu)를 설치했습니다.
제 PC는 Windows 10 Home 18362 빌드 버전입니다.

이후 Mysql을 설치했지만, 이제 Mybb 데이터베이스를 서버에 “물리적으로” 업로드하는 방법을 모르겠습니다. 데이터베이스를 쉽게 가져올 수 있는 phpmyadmin이 없나요? :frowning:

1개의 좋아요

scp 또는 유사한 도구를 사용하여 파일을 업로드해야 합니다. 그런 다음 다음과 같은 명령을 실행하세요.

  mysql - u user - p password database < filename..sql
3개의 좋아요

막혀서 고민이에요 :frowning:

1개의 좋아요

이 가이드는 로컬 개발 머신을 사용하는 대신 Docker 설치 내에서 가져오기를 실행하도록 호환되도록 업데이트되어야 합니다.

5개의 좋아요

도커 기반 환경에서 실행하는 가이드가 정말 기대됩니다 :slight_smile:

2개의 좋아요

결국 DIY를 포기하고 개발자를 고용했습니다. 이 포럼의 훌륭한 제안들을 그에게 전달했고(실제로 도움이 되었습니다!), 그는 별도의 개발 환경이 아니라 제 라이브 Digital Ocean 드롭렛에서 직접 작업을 수행한 것으로 보입니다. 이렇게 하면 작업하는 동안 제가 쉽게 검토할 수 있었고, 포럼이 공식적으로 오픈되지 않았으므로 사용자들에게도 영향이 없었습니다. 다시 말해, 가능하다고 생각합니다.

몇 번의 반복을 거친 후, 현재 결과는 꽤 좋습니다. MyCode와 이상한 문자 문제는 모두 해결되었고, MyBB 포스트 접두사를 Discourse 태그로 번역했으며, 사용자 프로필의 커스텀 다중 선택 필드도 성공적으로 가져왔습니다.

개발자가 동의한다면, 표준 가져오기 스크립트에 적용한 조정 사항과 여기에 사용된 기타 기법들을 공유하도록 요청할 예정입니다.

4개의 좋아요

도움이 되시길 바라며 공유드립니다. 제가 고용한 개발자 @rahilqf 님이 프로젝트를 완료했습니다. 해당 프로젝트에는 MyBB 사용자 정의 필드를 Discourse 사용자 정의 필드로 변환하는 작업(이 작업은 multi-select-user-field 플러그인이 설치되어 있어야 함)을 포함하며, MyBB 게시글 접두사를 Discourse 태그로 변환하고, MyBB 게시글 텍스트에서 거의 모든 불필요한 MyCode 태그를 제거하는 작업도 수행되었습니다.

그의 커스터마이징된 가져오기 스크립트 버전은 여기에서 공유됩니다 - Custom MyBB to Discourse Import Script.

또한 그는 표준 Yahoo import script를 사용하여 Yahoo Groups Mbox 아카이브를 성공적으로 병합했습니다. 다만 이 경우 첨부 파일은 변환되지 않았습니다. 제 경우에는 큰 문제가 되지 않았습니다.

3개의 좋아요

Mybb 데이터베이스의 사용자, 게시물, 주제 등을 변환하고 있습니다!

다음 가이드를 따랐습니다: Install Discourse on Ubuntu or Debian for Development

하지만 http://localhost:3000/ 또는 http://forum.omaggieconcorsi.com:3000/ 에 접근할 수 없습니다.

어쨌든 프로그램은 무언가를 변환하고 있지만, 데이터를 어디서 내보낼 수 있는지 모르겠습니다.
http://forum.omaggieconcorsi.com:3000/ 또는 http://localhost:3000/ 에서 Discourse를 볼 수 없으므로, 최소한 기존 Mybb 포럼의 게시물, 사용자 등의 데이터를 내보낸 후 새로운 Discourse 인스턴스에 가져오는 방법은 무엇인가요?

감사합니다!

웹 브라우저를 실행 중인 컴퓨터에서 해당 지침을 따랐나요?

1개의 좋아요

네, 항상 같은 컴퓨터입니다

음, Ubuntu 18.04에서 이 가이드를 따라 PC에 “실제” SO를 설치했고, localhost:3000이 작동합니다!

하지만 이제 MySQL 데이터베이스에서 문제가 생겼어요 :frowning: 죄송합니다…

다음과 같이 입력했습니다:

debby@debby-MS-7721: mysql -u root
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

:frowning:

수정: ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; 명령으로 root 비밀번호를 추가했습니다.

그리고 DB_PW에 root 사용자의 비밀번호를 입력했습니다.

… 그리고 이제 사용자를 생성하고 있어요!!

수주간의 테스트 끝에 드디어 제대로 된 시점인 것 같네요, 제발 잘 되길 바랍니다.

1개의 좋아요

MyBB에서 discourse로 데이터베이스를 가져오려고 합니다. @Paul_King와 마찬가지로 DigitalOcean 서버에서 작동하지 않습니다. 이 가이드를 따라가면서 온갖 종류의 오류가 계속 발생합니다.

명령을 실행하는 데 막혀 있습니다.

$ bundle exec rails db:drop
bundler: command not found: rails
Install missing gem executables with `bundle install`

bundle install은 완료되었다고 합니다.

$ bundle install
Your Gemfile lists the gem mysql2 (>= 0) more than once.
You should probably keep only one of them.
While it's not a problem now, it could cause errors if you change the version of one of them later.
Using bundler 1.16.1
Using mysql2 0.4.10
Bundle complete! 2 Gemfile dependencies, 2 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

rails를 수동으로 설치하려고 하면 다음과 같은 결과가 나옵니다:

$ gem install rails
Building native extensions. This could take a while...
ERROR:  Error installing rails:
        ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.5.0/gems/racc-1.5.2/ext/racc/cparse
/usr/bin/ruby2.5 -r ./siteconf20210110-8155-1ms05r3.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.5.0/gems/racc-1.5.2 for inspection.
Results logged to /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/racc-1.5.2/gem_make.out

이것은 정말 짜증스럽습니다.


이 게시글을 열어두고 결국 rails를 설치하는 데 성공했습니다. 그 후 또 다른 수많은 오류가 발생했지만 그것들도 해결했습니다. 오류. 매. 단계.마다. 발생했습니다.

이토록 순수한 증오를 소프트웨어에 느낀 적은 처음입니다. 왜 ruby는 이런가요? 이것은 악몽입니다. 지금은 이 오류로 인해 막혀 있습니다:

$ bundle exec rails db:drop
Traceback (most recent call last):
        1: from /usr/local/bin/bundle:23:in `<main>'
/usr/local/bin/bundle:23:in `load': cannot load such file -- /usr/share/rubygems-integration/all/gems/bundler-1.16.1/exe/bundle (LoadError)

도와주실 분 계신가요?

1개의 좋아요

실용적이지는 않지만, 로컬 개발 환경 설정(디스커스 데이터베이스 파일/백업 생성)을 시도할 때와 Digital Ocean Droplet에서 직접 설정할 때 모두 비슷한 벽에 부딪혔습니다. 수십 시간을 허비한 끝에 인생은 너무 짧다고 판단하여 Fiverr에서 개발자를 고용했습니다(수 주가 걸렸지만 결국 해결했습니다).

아마도 이 과정을 더 쉽게 만들려는 동기가 누구에게도 존재하지 않는 것 같습니다.

행운을 빕니다. 마침내 해결하게 된다면, 다른 사람들이 따라갈 수 있도록 여기 흔적을 남겨 주시길 바랍니다!

1개의 좋아요

rails를 어떻게 설치하셨나요? 개발 가이드 중 하나를 사용하셨나요? (예: Beginners Guide to Install Discourse on Ubuntu for Development)

프로덕션 컨테이너 내에서 설치 스크립트를 실행하는 방법(저는 보통 이렇게 합니다)에 대한 몇 가지 howto 문서가 있으므로, 그 중 하나를 가이드로 사용하실 수 있습니다.