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

리버티게임, 모두가 만들어가는 자유로운 게임
< 리버티게임:관리자 가이드
BANIP (토론 | 기여)님의 2023년 7월 6일 (목) 09:26 판 (문서 덤프 외에 추가적인 방법 제시)

이 문서는 리버티위키 서버 접근권한을 가진 사용자가 시도 할 수 있는 서버 이전에 관련한 두 가지 방법을 안내하고 있습니다.

서버 이전

리버티위키의 서버 파일들은 도커 컴포즈를 활용하여 하나의 폴더에서 관리되고 있습니다. 관리 대상 파일들에는 문서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로 위키의 데이터베이스에 접근해 계정 정보를 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. DumpBackup.php를 사용하되, --no-updates 옵션을 꼭 주고 문서를 이식해야 합니다.
    1. 해당 옵션을 주지 않고 덤프 이식을 하면 링크 테이블 갱신이 병행되어 RAM 부족으로 서버가 강제 종료될 수 있습니다.
  9. images 폴더의 압축본을 새 폴더에 푼다음, importImages.php로 가져오되, --search-recursively 옵션을 줍니다.
  10. 이제 rebuildtextindex.phprebuildrecentchanges.php를 실행합니다.
  11. 그 다음 refreshLinks.php를 실행하되 반드시 다음과 같이 실행합니다.
> php refreshLinks.php --e (x+1500) -- x
  1. 여기서 x는 문서 ID로, 위 명령어는 1500개의 문서를 대상으로 문서 ID x부터 x+1500까지 링크 테이블을 갱신합니다. 이 작업은 잘못하면 서버 크래시를 낼 정도로 RAM을 엄청나게 소모하기 때문에 반드시 x를 0부터 1500개 단위로 늘리면서 반복적으로 실행하여야 합니다.

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

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

  • 이메일 인증을 위해 구글의 Gmail SMTP를 사용하려면 구글 계정에 앱 비밀번호를 추가한 다음 그 계정을 사용해 Gmail 서비스가 이메일 서버로 쓸 수 있습니다. 서버 공격의 피해 규모를 감안하여 앱 비밀번호를 가진 계정으로 개인적으로 사용하는 계정을 설정하지 않는 것을 강력히 권장합니다.
  • 하위 문서 단축 링크(‘/’으로 시작하는 내부 링크)는 일반 이름공간에서는 기본적으로 작동하지 않으므로 $wgNamespacesWithSubpages[NS_MAIN] = true;를 LocalSettings.php에 넣어줍시다.
  • 엔진을 업데이트할 때에를 대비해 LocalSettings.php 내의 업그레이드 키는 백업해둡시다.