리버티게임:관리자 가이드/백엔드 관리 가이드

리버티게임, 모두가 만들어가는 자유로운 게임

이 문서는 리버티게임 서버 접근 권한을 가진 백엔드 시스템 관리자가 시도 할 수 있는 서버 이전 및 관리에 관련한 두 가지 방법을 안내하고 있습니다.

서버 이전

리버티게임의 서버 파일들은 현재 Docker 및 Docker-Compose를 활용하여 하나의 시스템 내의 여러 컨테이너 형태로 통합되어 관리되고 있습니다. 관리 대상 파일들에는 문서db, 업로드된 파일, 리버티게임에서 사용되는 추가 확장 파일, 그리고 각종 설정 파일들이 포함됩니다.

별도의 설정 없이 도커와 도커 컴포저만 서버에 설치하면, 서버 이전이 가능하도록 구성되어 있습니다. 이와 관련한 전체 과정은 아래와 같습니다:

  1. 서버 폴더를 통째로 압축합니다. (SSH에서 tar 명령어 사용)
  2. FileZilla 등의 SFTP 도구를 활용해 파일을 다운로드한 후 새 서버에 업로드하고 압축을 해제합니다.
  3. 새로운 서버에 도커와 도커 컴포저를 설치하고, 필요한 경우 서버 환경에 따라 BIOS에서 하이퍼 바이저를 설정합니다. 이 부분은 인터넷에 널리 공개된 정보를 참고하시면 됩니다.
  4. 서버 내에서 ./restart.sh 또는 ./restart.bat 명령어를 실행하여 정상 작동 여부를 확인합니다.
  5. 필요에 따라 Nginx나 Apache 같은 웹 서버에 추가 설정을 합니다.

이 방법은 이전 서버와 완전히 동일한 환경에서 바로 서비스 할 수 있기에 일반적인 상황에서 추천됩니다.

확장 기능 목록을 숙지하기

  • 특수:버전에 있는 확장 기능 목록을 반드시 알고 있어야 합니다. 반드시 확인하세요.
  • 확장 기능은 미디어위키 버전 업데이트 때마다 같이 버전을 맞춰 업그레이드해야 합니다. 미디어위키 엔진 버전에 맞는 확장 기능 파일을 설치하세요.

문서 덤프

위 방법 외에도 오랫동안 검증된 서버 이전 방법이 있습니다. 문서 덤프를 활용하는 방법입니다. 이 방법이 필요한 상황은 아래와 같습니다:

  • 어떤 이유로든 서버의 SFTP나 FTP 접근이 불가능할 때
  • 개인 서버가 아닌 위키 호스팅 서버로 이전이 필요할 때

이 문서는 그런 상황에서 서버 개발자가 해야 하는 작업을 다룹니다. 이 방법은 미디어위키 특수기능 XML 내보내기 및 가져오기를 통해 수행됩니다. 미디어위키 공식 서버 이주 방법을 풀어쓰면 이렇습니다.

  1. 기존 서버에서 먼저 특수:버전을 방문해 현 사이트가 어떤 확장기능을 쓰고 있는지 파악해야 합니다.
    1. 이때 미디어위키에 기본 포함된 확장기능들은 제외합니다.
  2. 확장 기능을 설정하고 각 확장 기능마다 필요한 설정을 합니다.
    1. 여기에는 기본적으로 어떤 유저에게도 자신과 관련된 권한을 주지 않는 확장 기능의 경우가 해당합니다. Interwiki 확장 기능과 CheckUser, Gadgets 등이 대표적입니다.
    2. Gadgets의 경우 인터페이스 관리자에게 수동으로 편집 권한을 주어야 합니다.
    3. UserFunctions, MyVariables, ParserFunctions는 리버티게임: 특수 함수와 관련된 확장기능이므로 별도의 세팅을 추가로 해야 해당 문서에 명시된 대로 작동합니다.
  3. 이제 서버에 SSH로 접속한 다음, MySQL의 유틸리티인 mysqldump나 MariaDB의 유틸리티인 mariadb-backup로 위키의 데이터베이스에 접근해 계정 정보를 포함한 데이터베이스를 sql 파일로 빼냅니다.
  4. 미디어위키가 설치된 경로에서 maintenance를 찾아 DumpBackup.php로 문서 덤프를 빼냅니다.
    1. --filter=namespace:xx 옵션으로 xx 부분에 이름공간 ID를 넣어 이름공간 별로 덤프를 빼낼 수 있습니다.
  5. 서버에 업로드된 멀티미디어 파일(이미지, 음악 파일 같은 것들)은 미디어위키 설치 경로의 images 폴더를 그냥 압축해버리면 되나, 그 전에 16진수로 0~F까지의 숫자명으로 된 폴더를 제외한 폴더는 제거하고 압축해야 합니다.
  6. 새 서버를 먼저 연 뒤 LocalSettings.php를 위키의 초기 세팅 웹 페이지가 하라는 대로 하면서(단 확장 기능 설정까지 추가로 하는 경로로 해야 합니다) 받는 작업을 합니다. DB명은 기존 서버와 동일하게 설정하는 걸 권장하지만 반드시 DB명이 같아야 할 필요는 없어서 새 서버에 CUI로 DB를 옮길 때 파라미터로 어느 DB에 옮길지 추가로 명시한다면 상관 없습니다.
  7. SQL 서버에 계정 정보 등이 든 sql 파일을 통째로 쿼리로 보냅니다.
  8. ImportDump.php를 사용하여 문서 덤프를 빼냅니다.
    1. --username-prefix="" --no-updates 옵션을 꼭 주고 문서를 이식해야 합니다.
      1. username-prefix="" 옵션이 없으면 이전 후의 서버에서 다른 사람이 문서를 작성한 것으로 인식하여 기여 횟수에서 이전 서버의 문서 변경 이력이 제외되며, 역사에도 '(문구)>(사용자 이름)' 형태로 기여자 명칭이 변경되어 나타납니다.
      2. no-updates 옵션을 주지 않고 덤프 이식을 하면 링크 테이블 갱신이 병행되어 RAM 부족으로 서버가 강제 종료될 수 있습니다.
  9. images 폴더의 압축본을 새 폴더에 푼다음, importImages.php로 가져오되, --search-recursively 옵션을 줍니다.
    1. 이때 images 폴더의 압축본에서 archive, thumb, deleted 등의 단어로 된 폴더는 제거해주세요! 이들은 섬네일/삭제된 파일 보관소로, 남기고 업로드할 경우 다수의 중복되는 파일이 서로 다른 이름으로 업로드되기에 16진수로 0에서 f까지의 숫자로 된 폴더만 있어야 합니다!
  10. 이제 rebuildtextindex.phprebuildrecentchanges.php를 실행합니다.
  11. 그 다음 refreshLinks.php를 실행하되 반드시 다음과 같이 실행합니다.
     > php run.php refreshLinks.php --e (x+1500) -- x
    여기서 x는 문서 ID로, 위 명령어는 1500개의 문서를 대상으로 문서 ID x부터 x+1500까지 링크 테이블을 갱신합니다. 이 작업은 잘못하면 서버 크래시를 낼 정도로 RAM을 엄청나게 소모하기 때문에 반드시 x를 0부터 1500개 단위로 늘리면서 반복적으로 실행하여야 합니다.
  12. 미디어위키 1.40부터 php 유지관리 스크립트를 돌릴 때는 'php (스크립트 파일).php ...' 대신 'php run.php (스크립트 파일).php ...' 형태로 명령을 입력해야 합니다!

이제 사용자 그룹(user, autoconfirmed, sysop, bureaucrat 등)에 기능 권한을 적절히 추가로 세팅하면 위키 이주가 완료됩니다. 그 이후에는 common.js나 가젯 등에 있는 URL 등을 구 서버 주소에서 새 서버로 연결되도록 수정하면 됩니다.

그 외에 알아두어야 하는 설정은 다음과 같습니다

  • 이메일 인증을 위해 구글의 Gmail SMTP를 사용하려면 구글 계정에 앱 비밀번호를 추가한 다음 그 계정을 사용해 Gmail 서비스가 이메일 서버로 쓸 수 있습니다. 서버 공격의 피해 규모를 감안하여 앱 비밀번호를 가진 계정으로 개인적으로 사용하는 계정을 설정하지 않는 것을 강력히 권장합니다.
  • 하위 문서 단축 링크(‘/’으로 시작하는 내부 링크)는 일반 이름공간에서는 기본적으로 작동하지 않으므로 $wgNamespacesWithSubpages[NS_MAIN] = true;를 LocalSettings.php에 넣어줍시다.
  • 엔진을 업데이트할 때를 대비해 LocalSettings.php 내의 업그레이드 키는 백업해둡시다.
  • Scribunto 확장기능은 Lua 바이너리가 x86 버전을 사용하도록 기본값이 정해져 있어, ARM 인스턴스에서는 다음과 같은 설정을 LocalSettings.php에 추가해 따로 바이너리 위치를 명시해야 합니다. 그리고 Lua 바이너리가 사용할 RAM 메모리 제한 값을 늘리는 것이 좋습니다.
$wgScribuntoEngineConf['luastandalone']['luaPath'] = '/usr/bin/lua5.1';
$wgScribuntoEngineConf['luastandalone']['memoryLimit'] = 209715200; # bytes

Dev Log

  • 1.40 이상으로 미디어위키 버전을 올릴 경우 발생하는 문제는 여기에서 확인 가능합니다.
  • 2024-04-26 로그
리버티게임의 미디어위키 도커(Docker) 이미지가 1.39.3 -> 1.39.7로 변경되었는데, 이주 후 TextExtracts 확장 기능이 오작동하고 있습니다.
이 확장 기능은 HTML 변환 API를 제공하는데, 현재 여기 의존 중인 틀이나 모듈은 리버티게임에 없는 것으로 추정되며, 다만 WikiSEO 확장 기능의 일부 유지 관리(maintenance) 스크립트가 여기 의존하므로 (HTML 단위에서) 웹 페이지 메타데이터에 새로 고침이 필요할 때만 잠깐 TextExtracts 확장 기능을 활성화하시기 바랍니다.
미디어위키 도커 이미지의 wikimedia/html-formatter php 라이브러리 의존성 설정이 잘못된 것이 의심됩니다.[1]
  • composer update 등으로 수동으로 바꾸는 방법은 다른 패키지 의존성을 추가로 망가뜨리는 것이 확인되어 추천하지 않습니다.
  • TextExtracts 확장 기능을 끈 상태에서 update.php를 실행하면 경고를 내보냅니다.


  1. 확인되지 않았으나, 동일한 의존성이 있는 MobileFrontend 확장 기능을 설치했을 때 충돌한다면 도커 이미지의 패키지 의존성 설정 오류가 맞을 겁니다.