위키 백업과 복구
위키의 보수와 백업을 위한 참고문서.
기본적으로 우분투에서 이루어진다.
백업
기본적으로 DB와 mediawiki 디렉터리를 백업해 두면 나중에 복원할 수 있다.
[나중에 단 한번의 파일 실행으로 자동 백업과 복구가 이루어지게끔 만들어보자.]
복구
nginx 설정
server {
listen 80;
# 프록시, 로컬, 도메이니 다 들어가야 편함.
server_name smwiki.info 100.101.144.125 100.117.229.125 192.168.0.8;
root /var/www/html/mediawiki;
index index.php index.html index.htm; # 이게 있어야 루트디렉토리로 접속하면 '대문'으로 가짐.
# robots.txt 파일에 대한 리디렉션 추가.
location = /robots.txt {
root /var/www/html;
allow all;
log_not_found off;
access_log off;
}
# sitemap.xml 파일 제공(bot의 크롤링을 위해.)
location /sitemap/ {
root /var/www/html;
allow all;
log_not_found off;
access_log off;
}
# 일반 이용자들의 접근.
location / {
try_files $uri $uri/ /index.php?$args;
}
# 특정 PHP 파일만 실행 (보안 강화)
location ~ ^/(index|api|load)\.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 모든 다른 PHP 파일 실행 차단
location ~ \.php$ {
return 403;
}
location ~ /\.ht {
deny all;
}
# 업로드 파일 크기 제한
client_max_body_size 20M;
}
가장 먼저 설치되어야 할 것
상당히 애먹는 아이들이기 때문에 잘못 틀어지면 포멧을 해버리는 게 가장 빠르다. 하여, 가장 먼저 설치하여 기반을 닦자.
검색관련 확장기능.(한글 검색을 이용하려면 필수.)
| 기능명 | 역할 | 설치방법 | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| java | 아래 이어지는 것들을 위해. | 보통 자바 설치 안되어있으니 설치 진행.
| ||||||||||||||||||||||||||||||||||||
| Elasticsearch | 다음 검색기능들을 사용하기 위한 기반 | 지금은 서비스가 중단되어 OpenSearch로 해야 한다는데, 또 설치할 때 GPT한테 물어보면서 하자;;;
기본적으로 과거 버전인 Elasticsearch 7.10.2를 써야 하는데. OpenSearch로도 될지... 독립된 서버이다.(젠장, 위키버전마다 요구하는 버전이 또 다르다;;) sql처럼 독립된 것이니, 도커 따위를 사용한다면 외부의 주소를 따로 지정하여 쓰는 편이 좋다. 외부 Elasticsearch를 사용하려면 다음과 같은 과정이 필요하다.
실행에 2G 이상의 메모리가 확보되어야 실행이 된다. 사전에 Java와 Javac를 설치해야 한다. 링크를 참고하여 구성하였다. (sudo -i 를 통해 root권한으로 해야 한다.)
시도해보고 있는 것(의미가 있는지는 의문이다;)
nori 플러그인 설치.(그닥 효과는 없는 듯하다....) 아무래도 한글검색에서 한계가 느껴져 설치해본다.
| ||||||||||||||||||||||||||||||||||||
| Elastica | 탄성검색을 제공.(단어일부 검색이라든가..) 다른 기능들을 사용하기 위한 기초.
Elasticsearch를 사용하기 위한 PHP라이브러리이다. |
CirrusSearch의 링크를 참조해 진행하되, 아래 작업을 먼저 하자.
이후 아래 설치링크를 따라가되, 이전 작업은 생략하자. 특수:버전 문서에서 설치 되었는지 확인. | ||||||||||||||||||||||||||||||||||||
| CirrusSearch | ElasticSearch를 위키에서 제어하기 위한 확장기능.
검색창에서 실제로 작동. |
링크를 참고하여 구성하였다.
https://www.mediawiki.org/wiki/Extension:CirrusSearch 복잡하니.. 명령 후에 떠오르는 메시지를 찬찬히 보며 잘 따라가길. 일반 검색규약을 따르는듯. Help페이지가 따로 있다.
나중에 DB를 바꾼다든가, Elasticsearch를 업데이트 할 땐 $wgDisableSearchUpdate = true; 를 넣어주는 것부터 하면 될듯. | ||||||||||||||||||||||||||||||||||||
| AdvancedSearch | 특수:검색 기능 제공. Special:Search기능 강화.
CirrusSearch를 토대로 작동한다. 검색할 때 고급검색이 가능해진다. 커스텀 검색필드 제작 가능. |
Extension:CirrusSearch 가 설치되어 있어야 한다.
https://www.mediawiki.org/wiki/Special:ExtensionDistributor?extdistname=AdvancedSearch&extdistversion=REL1_34 굉장히 간단. 폴더에 옮겨둔 후, LocalSettings에 |
모바일 관련 편의기능
| 분류 | 기능명 | 역할 | 설치방법 |
|---|---|---|---|
| 사용편의 | MobileFrontend | 모바일 접속환경을 구축한다.
(기본으로 제공되는 스킨인 벡터 등은 사용이 불편) 이 확장기능 하나만으론 의미가 없다. 다음의 스킨을 설치해주어야 한다. |
미디어위키 디렉토리에서..
git clone -b REL1_35 "https://gerrit.wikimedia.org/r/mediawiki/extensions/MobileFrontend" extensions/MobileFrontend 다음에 내용을 LocalSettings.php에 입력한다. wfLoadExtension( 'MobileFrontend' ); $wgMFAutodetectMobileView = true; |
| MinervaNeue | 모바일 환경에서 사용할 반응형 스킨.
MobileFrontend가 설치되어야 작동한다.
|
git clone -b REL1_35 "https://gerrit.wikimedia.org/r/mediawiki/skins/MinervaNeue" skins/MinervaNeue
다음에 내용을 LocalSettings.php에 입력한다. wfLoadSkin( 'MinervaNeue' ); $wgMFDefaultSkinClass = 'SkinMinerva'; // 모바일 접속 환경 시 기본 스킨 설정 | |
| 이후 특수:문서를 통해 설치를 확인한다. |
이외 작업
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}
|
| 권한부여 | 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; 추가.
|
| YouTube | 유튜브 영상을 삽입하기 위한 확장기능. |
|
| 외부이미지 사용 | 외부 이미지를 사용하려면 설정을 변경해야 한다.
이 옵션을 해두면 본문에 이미지 링크만 둬도 자동으로 이미지를 띄워준다. |
$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; |
sudo apt update
sudo apt install imagemagick -y imagemagick을 설치해주어야 문서 안의 그림 섬네일이 제대로 나온다. 설치 후엔 sudo reboot로 재부팅 해주어야 함.(커널 업데이트도 이루어짐) |
| 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' ); 기입 - 소도구 옮기기에 사용하려면... 소도구 내보내기로 파일을 다운받은 후에 특수:가져오기 에서 인터위키접두어(보통 출처위키명)를 입력한 후 미디어위키 이름공간으로 가져와야 한다. |
|
| 주소 | 주소로 접속하면 http://주소/index.php/대문 형식으로 주소가 리다이렉팅 되는데... 굉장히 안이쁘다.
$wgScriptPath = ""; # 주소 간결하게 하려고 두는 옵션. $wgArticlePath = "/$1"; 요련식으로 세팅을 구성하면 됨. |
기타 LocalSettings.php 설정
| 기능명 | 역할 | 설치방법 | ||
|---|---|---|---|---|
| 유저권한관리 | 유저 생성과 권한 관리는 LocalSetting 안에서 이루어진다.
아래 형식으로 작성하면 없는 그룹이라면 새로 생성되고, 권환관리가 이루어진다.
#일반 편집 불가# *는 모든 유저, user는 로그인한 유저. #$wgGroupPermissions['*']['edit'] = True; $wgGroupPermissions['*']['createpage'] = false; $wgGroupPermissions['*']['move'] = false; #$wgGroupPermissions['user']['edit'] = True; $wgGroupPermissions['user']['createpage'] = false; #교사그룹권한 $wgGroupPermissions['교사']['edit'] = true; $wgGroupPermissions['교사']['createpage'] = true; #보호레벨 추가 $wgRestrictionLevels[] = '교사문서'; $wgGroupPermissions['교사']['교사문서'] = true; ##################기타 개인 세팅 $wgDefaultUserOptions['numberheadings'] = 1; | |||
| 보호레벨 추가 | 특수한 그룹만 편집할 수 있는 문서를 만들기 위해. 보호될 필요가 있는 문서를 위하여.
$wgRestrictionLevels[] = '교사문서'; $wgGroupPermissions['교사']['교사문서'] = true; 위 형태로 교사들만 편집할 수 있는 권한을 만들 수 있다. | |||
$wgHooks['SiteNoticeAfter'][] = function(&$siteNotice, $skin) {
$siteNotice .= <<< EOT
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Mediawiki header -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-9484107006498284"
data-ad-slot="7071651831"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
EOT;
return true;
};
$wgHooks['SkinAfterContent'][] = function(&$data, $skin) {
global $myAdCode;
$data .= '<div style="text-align:center;">';
$data .= <<< EOT
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- mediawiki footer -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-9484107006498284"
data-ad-slot="5130113921"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
EOT;
$data .= '</div>';
return true;
};
| ||||
기타 확장기능
| 분류 | 기능명 | 역할 | 설치방법 |
|---|---|---|---|
| 조회수 카운팅 | HitCounters
|
각 문서가 몇 번 읽혔는지 카운팅한다.
페이지 가장 하단에 표시해준다. |
설치
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/HitCounters 체크 및 설정파일 변경 LocalSettings.php 수정 wfLoadExtension( 'HitCounters' ); 스키마 업데이트 mediawiki 디렉토리에서 php maintenance/update.php |
이젠 필요없어진 것들.
정식 extensions에 포함되면서 설치가 필요없어진 것들은... 여기에 옮겨둔다.
| 분류 | 기능명 | 역할 | 설치방법 | |||
|---|---|---|---|---|---|---|
| 작동기반 | 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개가 나타난다. 눌러서 시각편집기로 편집이 되는지 확인하자. |
| 분류 | 기능명 | 역할 | 설치방법 |
|---|---|---|---|
| 사용편의 | 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) 그럼 데이터베이스가 업데이트 되면서 위키 우측 상단에 종모양의 알림기능이 활성화된다. |
| CategoryTree | 카테고리를 보기 쉽게 정리해준다.
- 문서 안에 - 문서 안에 이외 카테고리를 기입하는 다양한 방법이 제공된다. |
보통 처음에 설치된다. | |
| Cite | 각주, 인용을 넣기 위함. | 보통 처음에 설치된다. | |
| Math | 화학식과 수식입력이 가능해진다.
레이텍과 동일한 문법을 사용한다. |
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Math --branch REL1_35 extensions/Math
echo "wfLoadExtension( 'Math' );" >> LocalSettings.php
|