백업과 복구
위키를 보수와 백업을 위한 참고문서.
기본적으로 우분투에서 이루어진다.
백업
기본적으로 DB와 mediawiki 디렉터리를 백업해 두면 나중에 복원할 수 있다.
[나중에 단 한번의 파일 실행으로 자동 백업과 복구가 이루어지게끔 만들어보자.]
복구
가장 먼저 설치되어야 할 것
상당히 애먹는 아이들이기 때문에 잘못 틀어지면 포멧을 해버리는 게 가장 빠르다. 하여, 가장 먼저 설치하여 기반을 닦자.
일단 LocalSettings.php 안에 있는 서버주소를 제대로 기입해주자. http://id8436.iptime.org:8080
분류 | 기능명 | 역할 | 설치방법 | |||
---|---|---|---|---|---|---|
작동기반 | parsoid | 비쥬얼에디터 작동기반.
편집 중 시각편집으로 내용을 유지한 채 넘어갈 수 있게끔 한다. |
우분투에선 아무것도 없이 다음의 코드를 따라가면 된다.
심지어 공식안내에선 node나 npm의 설치 안내조차 없다;;; 파일도 설정파일 하나 뿐;;; 다른 사이트들을 참고하느라..한참 잘못간 모양이다. 설치 sudo apt install dirmngr
sudo apt-add-repository "deb https://releases.wikimedia.org/debian jessie-mediawiki main" sudo apt-get install software-properties-common sudo apt install apt-transport-https sudo apt update && sudo apt install parsoid 체크 및 설정파일 변경 다음 링크가 제대로 나오면 이 링크를 설정파일의 URL에 기입한다. http://id8436.iptime.org:8080/mediawiki/api.php 설정파일은 etc/mediawiki/parsoid 안에. 한 파일밖에 없음. sudo nano /etc/mediawiki/parsoid/config.yaml 로 고치자. 최종체크 http://localhost:8142/version (외부에선 접속 안됨) | |||
사용편의 | VisualEditor | 시각편집기를 사용할 수 있게 한다. | 설치
일단 parsoid가 설치되어 있어야 한다. 이상하게.. 명령을 이용한 방식에선 설치가 안되는데.. 파일을 받아서 압축 풀고, 올려놓는 방식으로 했더니 됬다; LocalSetting 설정 다음 내용을 LocalSetting 안에 넣어준다. //VisualEditor.시각편집(비주얼에디터)에 대하여. wfLoadExtension( 'VisualEditor' ); // Enable by default for everybody $wgDefaultUserOptions['visualeditor-enable'] = 1; // Optional: Set VisualEditor as the default for anonymous users // otherwise they will have to switch to VE // $wgDefaultUserOptions['visualeditor-editor'] = "visualeditor"; // Don't allow users to disable it $wgHiddenPrefs[] = 'visualeditor-enable'; $wgVirtualRestConfig['modules']['parsoid'] = array( // URL to the Parsoid instance // Use port 8142 if you use the Debian package 'url' => 'http://localhost:8142', // Parsoid "domain", see below (optional) 'domain' => 'localhost', // Parsoid "prefix", see below (optional) 'prefix' => 'localhost' ); // OPTIONAL: Enable VisualEditor's experimental code features #$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;
sudo service apache2 restart sudo service parsoid restart 확인 위키에 접속해 보면 편집 탭과 원본편집 탭 2개가 나타난다. 눌러서 시각편집기로 편집이 되는지 확인하자. |
검색관련 확장기능.
기능명 | 역할 | 설치방법 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
java | 아래 이어지는 것들을 위해. | 다른 건 모르겠고, 8버전으로 설치하면 되더라;
| ||||||||||||||||||||||||||||
Elasticsearch | 다음 검색기능들을 사용하기 위한 기반 | 독립된 서버이다.(젠장, 위키버전마다 요구하는 버전이 또 다르다;;)
사전에 Java와 Javac를 설치해야 한다. 링크를 따라가며 잘 설치해보자. (sudo -i 를 통해 root권한으로 해야 한다.)
| ||||||||||||||||||||||||||||
Elastica | 탄성검색을 제공.(단어일부 검색이라든가..) 다른 기능들을 사용하기 위한 기초.
Elasticsearch를 사용하기 위한 PHP라이브러리이다. |
CirrusSearch의 링크를 참조해 진행하되, 아래 작업을 먼저 하자.
특수:버전 문서에서 설치 되었는지 확인. | ||||||||||||||||||||||||||||
CirrusSearch | ElasticSearch를 위키에서 제어하기 위한 확장기능.
검색창에서 실제로 작동. |
링크를 참조하여 진행해보자.
https://www.mediawiki.org/wiki/Extension:CirrusSearch 복잡하니.. 명령 후에 떠오르는 메시지를 찬찬히 보며 잘 따라가길. 일반 검색규약을 따르는듯. Help페이지가 따로 있다.
나중에 DB를 바꾼다든가 할 땐 $wgDisableSearchUpdate = true; 를 넣어주는 것부터 하면 될듯. | ||||||||||||||||||||||||||||
AdvancedSearch | 특수:검색 기능 제공. Special:Search기능 강화.
CirrusSearch를 토대로 작동한다. 검색할 때 고급검색이 가능해진다. 커스텀 검색필드 제작 가능. |
Extension:CirrusSearch 가 설치되어 있어야 한다.
https://www.mediawiki.org/wiki/Special:ExtensionDistributor?extdistname=AdvancedSearch&extdistversion=REL1_34
굉장히 간단. 폴더에 옮겨둔 후, LocalSettings에 |
먼저 설치하면 좋을 편의기능.
분류 | 기능명 | 역할 | 설치방법 |
---|---|---|---|
사용편의 | Echo | 각종 알림들을 이메일이 아닌, 위키 내에서 알릴 수 있도록 한다. | 미디어위키 디렉토리에서..
git clone -b REL1_35 "https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo" extensions/Echo echo "wfLoadExtension( 'Echo' );" >> LocalSettings.php
(도커를 이용한다면 docker-compose exec mediawiki php maintenance/update.php) 그럼 데이터베이스가 업데이트 되면서 위키 우측 상단에 종모양의 알림기능이 활성화된다. |
이외 작업
DB백업
크론을 통해 하루에 한 번 자동으로 백업되게 만들자. 혹시나 중간에 망가져도 살릴 수 있게끔.(백업파일 용량이 100MB를 넘길 때까진 매일 해보자.)
과정 | 방법 |
---|---|
파일만들기 | /etc/cron.daily 안에 sudo nano mysql 따위의 명령으로 파일을 만든다.
sudo nano /etc/cron.daily/mysql |
내용등록 | #!/bin/bash
mysql_path='/usr/bin/mysql/' month=$(date +%y'y'%m'm'%d'd'%H%M%S) fileName="backup_wikisql_${month}.sql" #파일 저장 경로 지정 대부분 홈디랙토리에 생성 savePath="/home/id8436/Downloads/" /usr/bin/mysqldump -u root my_wiki > ${savePath}${fileName}
파일 저장경로를 usb로 정해주어도 좋겠다. |
권한부여 | ls -l 명령으로 다른 파일들의 권한설정을 보고 통일. 일반적으로 755이다.
|
확인 | 프롬프트에 파일경로(/etc/cron.daily/mysql)
를 올렸을 때 아무 것도 안뜨면 이상이 없는 것. 이상이 있는 경우엔 에러가 뜬다. |
log파일 다루기
리눅스:로그관리를 참고하여 넘치는 로그파일을 다른 저장장치로 넘겨주자. 그 양을 본 저장장치에서 관리하기엔 리스크가 크다.
그리고 logrotate를 사용해 로그가 지나치게 넘치지 않게, 주기적으로 처리되게끔 조정해두자.
필요에 따라 설치하거나 변경할 것
단순하게 extention 안에 설치한 후 LocalSetting만 조작하면 되는 것들 혹은 LocalSettings만 조절 하면되는 것들.
사용편의를 위한 기능
기능명 | 역할 | 설치방법 |
---|---|---|
새창띄우기 | 외부링크를 현재 창이 아닌, 새 창에 띄우기 위한 문구. 추가하기. | LocalSetting 안에 넣는다.
$wgExternalLinkTarget = '_blank'; |
로그인시간 | 교사들이 수업을 하고 오면 다시 로그인을 해야 하는 상황이 발생한다.
때문에 로그인 유지시간을 4시간으로 늘린다. |
php.ini 파일을 찾아
After this number of seconds, stored data will be seen as 'garbage' and ; cleaned up by the garbage collection process. session.gc_maxlifetime = 뒤의 원하는 초를 적어준다. 4시간은 14400초. |
스킨설치 | 위키의 겉모양을 꾸며준다. | 다운받아 skin폴더 안에 둔 후, wfLoadSkin( '폴더명' ); 형식으로 설치한다.
미디어위키 기반의 위키지만, 공식적으로 관리되는 스킨이 아닌 경우, 해당 위키의 '특수:버전'문서에서 스킨 이름을 클릭하면 스킨을 다운받을 수 있는 페이지로 이동한다. |
리브레스킨 | 리브레스킨의 각종 세부기능에 대해선 아래 링크에서 설명하고 있다.
https://gitlab.com/librewiki/Liberty-MW-Skin/-/tree/master 로고 바꾸는 건 mediawiki/skins/Libery/img/logo.png를 바꾸면 된다. |
설치에 관해선 https://wnw1005.tistory.com/229 참고. 맞는 버전이 없을 땐 master를 설치하면 되더라; |
문서작성을 위한 기능
기능명 | 역할 | 설치방법 |
---|---|---|
자동 넘버링 | 목차엔 자동으로 넘버링이 되지만, 본문엔 이 넘버링이 적용되지 않곤 한다. | LocalSetting에 $wgDefaultUserOptions['numberheadings'] = 1; 추가.
|
CategoryTree | 카테고리를 보기 쉽게 정리해준다.
- 문서 안에 - 문서 안에 이외 카테고리를 기입하는 다양한 방법이 제공된다. |
보통 처음에 설치된다. |
Cite | 각주, 인용을 넣기 위함. | 보통 처음에 설치된다. |
Math | 화학식과 수식입력이 가능해진다.
레이텍과 동일한 문법을 사용한다. |
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Math --branch REL1_35 extensions/Math
echo "wfLoadExtension( 'Math' );" >> LocalSettings.php
|
YouTube | 유튜브 영상을 삽입하기 위한 확장기능. | git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/YouTube --branch REL1_35 extensions/YouTube echo "wfLoadExtension( 'YouTube' ); " >> LocalSettings.php
|
외부이미지 사용 | 외부 이미지를 사용하려면 설정을 변경해야 한다. | $wgAllowExternalImages = true; |
이미지 업로드 | 1. LocalSetting에서 업로드 설정 허용.
$wgEnableUploads = true; 가 되게끔 고쳐준다. 1-1 chown. 권한을 웹 이용자들에게 준다. cd 해당 디랙토리(mediawiki 내의 image나 upload에.)에서 아래 명령을 실행한다. sudo chown -R www-data:www-data images/ 1-2. 파일 업로드 확장자 세팅. LocalSetting에 추가한다. //파일 업로드 확장자 세팅용. $wgFileExtensions = array( // 이미지 파일 'png','gif','jpg','jpeg','svg','tif','tiff', 'bmp', // 문서파일 'doc', 'docx', 'txt','hwp', 'pdf', // 스프레드시트 파일 'xls', 'xlsx', 'cell', // 슬라이드 파일 'ppt', 'pptx', // 압축 파일 'zip', 'gz' ); 2. upload size 조절. php --ini 명령을 통해 경로찾기가 가능하다. 그 하위폴더의 alpache2/php.ini를 찾는다. 일반적으로.. /etc/php/7.2/apache2/php.ini 의 다음 항목을 수정한다. change upload_max_filesize= 'number' post_max_size = 'number' ex) 20M 이라고 써주면 20메가까지 업로드 가능. - localSettings.php 도 수정 $wgUploadSizeWarning = 20971520; $wgMaxUploadSize = 20971520; 2-2. 업로드 권한 설정. LocalSetting 안에서 $wgGroupPermissions['user']['upload'] = false; "uploadaccess"라는 특별한 그룹을 생성하고 그들에게만 권한을 준다면, $wgGroupPermissions['uploadaccess']['upload'] = true; |
|
Scribunto | 코드상자를 기입하기 위함. | |
SyntaxHighlight | 기입된 코드를 색으로 구분하여 가독성을 높여준다. |
관리를 위한 기능
기능명 | 역할 | 설치방법 |
---|---|---|
소도구 | 위키 사용자가 로그인시 자신의 환경설정에서 JavaScript 또는 CSS 로 마련된 기능(gadgets, 소도구)을 골라쓸 수 있도록 한다. 다른 미디어위키에서 사용되는 JavaScript 또는 CSS를 옮겨와 사용할 수 있다.
1.35부턴 설치되어 있음.
다음은 씨실과 날실 블로그에서 추천한 소도구들. 이것들을 그냥 복붙하면 끝. 둘러보기 소도구
편집 소도구
인터페이스 소도구
- 소도구 항목에 붉은색으로 뜬다는 건 아직 설치가 되지 않았다는 것. 붉은 글씨의 .js 문서를 눌러주면 만들기화면이 나온다. - 다른 위키의 특수:소도구 에서 코드를 볼 수 있다. 이 코드만 복붙하여 해당 소도구에 만들면 된다.(능력자라면 직접 만들수도;;) - 편집을 작성하면 소도구에 대한 설명이 생긴다. - 특정 소도구를 기본적으로 활성화 시키려면.. 미디어위키:Gadgets-definition 문서에서.. 이미 활성화 되어있는 소도구 코드 보면.. 대충 감이 올 듯. 쉬워. 좀만 읽어봐.
- 각주 말풍선 - 각주 번호 위로 마우스 커서를 가리키면 각주 내용을 볼 수 있습니다. |
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Gadgets --branch REL1_35 extensions/Gadgets
echo "wfLoadExtension( 'Gadgets' );" >> LocalSettings.php |
인터위키 | 인터위키. interwiki.
- 소도구에 들어가는 코드가 여러개인 경우가 있다. 이땐 인터위키의 문서 내보내기나 가져오기로 한 번에 수행하면 편해. 미디어위키 엔진을 사용하는 위키들을 이어주는 기능을 활성화한다. 소도구를 쉽게 활용하기 위한 사전작업. - Extension:Interwiki 파일 다운로드 후 다음과 같은 명령어로 압축풀기 tar -xzf Interwiki-REL1_34-9a18f46.tar.gz -C /var/www/html/mediawiki/extensions - LocalSetting에 wfLoadExtension( 'Interwiki' ); 기입 - 소도구 옮기기에 사용하려면... 소도구 내보내기로 파일을 다운받은 후에 특수:가져오기 에서 인터위키접두어(보통 출처위키명)를 입력한 후 미디어위키 이름공간으로 가져와야 한다. |
기능명 | 역할 | 설치방법 |
---|---|---|
로고 바꾸기 | 위키의 로고에 들어갈 이미지 | $wgLogo = '경로' 를 해주면 되지만,
서버컴퓨터 안에서 /var/lib/mediawiki/resources/assets 안의 wiki.png 를 바꿔주면 될듯. 135*135 픽셀이 적당할듯. $wgServer 는 위키가 설치된 경로 한단계 위를 의미하는듯. |
파비콘 바꾸기 | (없어서 만들어야 해.)$wgLogo 아래 $wgFavicon = '경로'를 해주면 넣을 수 있다.
현재는 Logo와 같은 경로의 favicon.png로 되어있다. 16*16 픽셀이 적당할듯. | |
유저권한관리 | 유저 생성과 권한 관리는 LocalSetting 안에서 이루어진다.
아래 형식으로 작성하면 없는 그룹이라면 새로 생성되고, 권환관리가 이루어진다.
#일반 편집 불가# *는 모든 유저, user는 로그인한 유저. #$wgGroupPermissions['*']['edit'] = True; $wgGroupPermissions['*']['createpage'] = false; #$wgGroupPermissions['user']['edit'] = True; $wgGroupPermissions['user']['createpage'] = false; #교사그룹권한 $wgGroupPermissions['교사']['edit'] = true; $wgGroupPermissions['교사']['createpage'] = true; #보호레벨 추가 $wgRestrictionLevels[] = '교사문서'; $wgGroupPermissions['교사']['교사문서'] = true; ##################기타 개인 세팅 $wgDefaultUserOptions['numberheadings'] = 1; | |
보호레벨 추가 | 특수한 그룹만 편집할 수 있는 문서를 만들기 위해. 보호될 필요가 있는 문서를 위하여.
$wgRestrictionLevels[] = '교사문서'; $wgGroupPermissions['교사']['교사문서'] = true; 위 형태로 교사들만 편집할 수 있는 권한을 만들 수 있다. | |
광고달기 | 위젯이나 확장기능을 쓸 수도 있지만, 간단하게 Localsetting에 기입하는 게 가장 편한듯.
머리글 $wgHooks['SiteNoticeAfter'][] = function(&$siteNotice, $skin) { $siteNotice .= <<< EOT 여기엔 구글에서 주는 광고코드 넣으면 됨 EOT; return true; }; 바닥글 $wgHooks['SkinAfterContent'][] = function(&$data, $skin) { global $myAdCode; $data .= '<div style="text-align:center;">'; $data .= <<< EOT EOT; $data .= '</div>'; return true; }; 광고코드는 구글 애드센스에서 광고->개요->광고단위기준 에서 코드를 긁어오면 된다. | |
광고 테스트 | 위젯을 쓰는 것도 좋은 방법일듯; | $wgHooks['SiteNoticeAfter'][] = function(&$siteNotice, $skin) {
$siteNotice .= <<< EOT <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script> (adsbygoogle = window.adsbygoogle||[]).push({}); </script> EOT; return true; }; 하단에선 EOT를 지워보자. $wgHooks['SkinAfterContent'][] = function(&$data, $skin) { global $myAdCode; $data .= '<div style="text-align:center;">'; $data .= <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script> (adsbygoogle = window.adsbygoogle||[]).push({}); </script>
return true; }; |