위키 백업과 복구
위키의 보수와 백업을 위한 참고문서.
기본적으로 우분투에서 이루어진다.
백업
기본적으로 DB와 mediawiki 디렉터리를 백업해 두면 나중에 복원할 수 있다.
[나중에 단 한번의 파일 실행으로 자동 백업과 복구가 이루어지게끔 만들어보자.]
복구
nginx 설정
server {
listen 80;
server_name 100.101.144.125 smwiki.info; # Tailscale IP
root /var/www/html/mediawiki;
index index.php index.html index.htm;
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; |
|
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"; 요련식으로 세팅을 구성하면 됨. |
광고(애드센스)
과정 | 역할 | 설치방법 |
---|---|---|
사이트 등록 | 구글 애드센스에서 사이트 등록.
이곳에서 메타 태그를 얻는다. 사이트에 게재할 수 있는 권한을 획득해야 한다. 광고 게재 권한은 오래걸리면 4주도 간다고.. |
https://www.google.com/adsense/ |
ads.txt 만들고 적용. |
|
루트 디렉토리는 우분투라면 cd /etc/apache2/sites-available 의 설정을 살펴보면 찾아볼 수 있다.
sudo nano Ads.txt 위 명령 따위로 txt 생성 후 내용을 복붙. 도메인/Ads.txt 로 접근했을 때 내용이 나온다면 OK. |
LocalSettings.php 수정 |
|
$wgHooks['BeforePageDisplay'][] = function ( $out, $skin ) {
$out->addHeadItem('adsense-meta', '<meta name="google-site-verification" content="YOUR_VERIFICATION_CODE" />'); }; |
광고 설정 | 편한 방식으로 지정.
|
광고 탭에서 옵션을 적절히 설정. |
LocalSettings.php 수정 | 위에서 얻은 것을 우측 방식으로 기입한다.
여기까지가 사이트 기준 광고 완료. 반영까지는 1시간까지 걸리기도 한다고 한다. |
$wgHooks['BeforePageDisplay'][] = function ( $out, $skin ) { $out->addHeadItem('adsense', '<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2242961523167199" crossorigin="anonymous"></script>'); }; |
광고 단위를 사용하는 경우. | ||
관련 확장기능 설치. | 버전에 따라 설정이 달라지기도 해서, 확장기능으로 하는 편이 좋을듯. | 버전명 맞춰서 설치. extention 디렉토리에서.
git clone -b REL1_41 "https://gerrit.wikimedia.org/r/mediawiki/extensions/AdManager" LocalSettings.php에 아래 코드를 더한다. |
기타 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;
};
| ||||
기타 확장기능
분류 | 기능명 | 역할 | 설치방법 |
---|
이젠 필요없어진 것들.
정식 extensions에 포함되면서 설치가 필요없어진 것들은... 여기에 옮겨둔다.
분류 | 기능명 | 역할 | 설치방법 |
---|---|---|---|
사용편의 | 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
|