리버티게임:관리자 가이드/백엔드 관리 가이드
리버티게임이 새로운 독립 서버로 이주할 때 DB를 통째로 옮기는 것 외에 XML 내보내기 및 가져오기로 문서 파일을 옮겨야 할 상황이 올 수 있습니다.
이 문서는 그런 상황에서 서버 개발자가 해야 하는 작업을 다룹니다. 미디어위키 공식 서버 이주 방법을 풀어쓰면 이렇습니다.
- 기존 서버에서 먼저 특수:버전을 방문해 현 사이트가 어떤 확장기능을 쓰고 있는지 파악해야 합니다.
- 이때 미디어위키에 기본 포함된 확장기능들은 제외합니다.
- 확장 기능을 설정하고 각 확장 기능마다 필요한 설정을 합니다.
- 여기에는 기본적으로 어떤 유저에게도 자신과 관련된 권한을 주지 않는 확장 기능의 경우가 해당합니다. Interwiki 확장 기능과 CheckUser, Gadgets 등이 대표적입니다.
- Gadgets의 경우 인터페이스 관리자에게 수동으로 편집 권한을 주어야 합니다.
- UserFunctions, MyVariables, ParserFunctions는 리버티게임: 특수 함수와 관련된 확장기능이므로 별도의 세팅을 추가로 해야 해당 문서에 명시된 대로 작동합니다.
- 이제 서버에 SSH로 접속한 다음, MySQL로 위키의 데이터베이스에 접근해 계정 정보를 sql 파일로 빼냅니다.
- 미디어위키가 설치된 경로에서 maintenance를 찾아 DumpBackup.php로 문서 덤프를 빼냅니다.
- --filter=namespace:xx 옵션으로 xx 부분에 이름공간 ID를 넣어 이름공간 별로 덤프를 빼낼 수 있습니다.
- 서버에 업로드된 멀티미디어 파일(이미지, 음악 파일 같은 것들)은 미디어위키 설치 경로의 images 폴더를 그냥 압축해버리면 되나, 그 전에 16진수로 0~F까지의 숫자명으로 된 폴더를 제외한 폴더는 제거하고 압축해야 합니다.
- 새 서버를 먼저 연 뒤 LocalSettings.php를 위키의 초기 세팅 웹 페이지가 하라는 대로 하면서(단 확장 기능 설정까지 추가로 하는 경로로 해야 합니다) 받는 작업을 합니다. DB명은 기존 서버와 동일하게 설정하는 걸 권장하지만 반드시 DB명이 같아야 할 필요는 없어서 새 서버에 CUI로 DB를 옮길 때 파라미터로 어느 DB에 옮길지 추가로 명시한다면 상관 없습니다.
- SQL 서버에 계정 정보 등이 든 sql 파일을 통째로 쿼리로 보냅니다.
- DumpBackup.php를 사용하되, --no-updates 옵션을 꼭 주고 문서를 이식해야 합니다.
- 해당 옵션을 주지 않고 덤프 이식을 하면 링크 테이블 갱신이 병행되어 RAM 부족으로 서버가 강제 종료될 수 있습니다.
- images 폴더의 압축본을 새 폴더에 푼다음, importImages.php로 가져오되, --search-recursively 옵션을 줍니다.
- 이제 rebuildtextindex.php와 rebuildrecentchanges.php를 실행합니다.
- 그 다음 refreshLinks.php를 실행하되 반드시 다음과 같이 실행합니다.
> php refreshLinks.php --e (x+1500) -- x
- 여기서 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 내의 업그레이드 키는 백업해둡시다.