백업과 복구: 두 판 사이의 차이

학교의 모든 지식. SMwiki
둘러보기로 이동 검색으로 이동
잔글 ("백업" 문서를 보호했습니다 ([편집=관리자만 허용] (무기한) [이동=관리자만 허용] (무기한)))
잔글 (Sam님이 백업 문서를 백업과 복구 문서로 이동했습니다)
(차이 없음)

2020년 8월 18일 (화) 22:31 판

위키를 보수와 백업을 위한 참고문서.

기본적으로 우분투에서 이루어진다.


백업

기본적으로 DB와 mediawiki 디렉터리를 백업해 두면 나중에 복원할 수 있다.

[나중에 단 한번의 파일 실행으로 자동 백업과 복구가 이루어지게끔 만들어보자.]

복구

가장 먼저 설치되어야 할 것

상당히 애먹는 아이들이기 때문에 잘못 틀어지면 포멧을 해버리는 게 가장 빠르다. 하여, 가장 먼저 설치하여 기반을 닦자.

일단 LocalSettings.php 안에 있는 서버주소를 제대로 기입해주자. http://id8436.iptime.org:8080

분류 기능명 역할 설치방법
작동기반 parsoid 비쥬얼에디터 작동기반.

편집 중 시각편집으로 내용을 유지한 채 넘어갈 수 있게끔 한다.

우분투에선 아무것도 없이 다음의 코드를 따라가면 된다.

심지어 공식안내에선 node나 npm의 설치 안내조차 없다;;; 파일도 설정파일 하나 뿐;;;

다른 사이트들을 참고하느라..한참 잘못간 모양이다.

설치

sudo apt install dirmngr

셋 중 하나 선택
sudo apt-key advanced --keyserver keys.gnupg.net --recv-keys AF380A3036A03444
sudo apt-key advanced --keyserver pgp.mit.edu --recv-keys AF380A3036A03444
sudo apt-key advanced --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys AF380A3036A03444

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가 설치되어 있어야 한다.

이상하게.. 명령을 이용한 방식에선 설치가 안되는데.. 파일을 받아서 압축 풀고, 올려놓는 방식으로 했더니 됬다;

1.34버전 링크

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버전으로 설치하면 되더라;

java -version 으로 버전을 확인하면 설치방법을 안내한다.

마찬가지로 javac -version

작동기반 Elasticsearch 다음 검색기능들을 사용하기 위한 기반 사전에 Java와 Javac를 설치해야 한다.

링크를 따라가며 잘 설치해보자.

(sudo -i 를 통해 root권한으로 해야 한다.)

작동기반 Elastica 탄성검색을 제공. 다른 기능들을 사용하기 위한 기초.

Elasticsearch를 사용하기 위한 PHP라이브러리이다.

CirrusSearch의 링크를 참조해 진행하되, 아래 작업을 먼저 하자.
  1. 링크에서 다운 후, extension 폴더에 옮긴 긴다.
  2. 컴포저 설치(apt install composer)
  3. Elastica 디렉터리에서 composer install --no-dev 실행.

이후 아래 설치링크를 따라가되, 이전 작업은 생략하자.

특수:버전 문서에서 설치 되었는지 확인.

사용편의 CirrusSearch ElasticSearch를 제어하기 위한 확장기능.

검색창에서 실제로 작동.

링크를 참조하여 진행해보자.

https://www.mediawiki.org/wiki/Extension:CirrusSearch 복잡하니.. 명령 후에 떠오르는 메시지를 찬찬히 보며 잘 따라가길.

일반 검색규약을 따르는듯. Help페이지가 따로 있다.

사용편의 AdvancedSearch 특수:검색 기능 제공. Special:Search기능 강화.

CirrusSearch를 토대로 작동한다.

검색할 때 고급검색이 가능해진다.

커스텀 검색필드 제작 가능.

Extension:CirrusSearch 가 설치되어 있어야 한다.

https://www.mediawiki.org/wiki/Special:ExtensionDistributor?extdistname=AdvancedSearch&extdistversion=REL1_34 굉장히 간단. 폴더에 옮겨둔 후, LocalSettings에 wfLoadExtension( 'AdvancedSearch' );추가

사용편의 Echo 각종 알림들을 이메일이 아닌, 위키 내에서 알릴 수 있도록 한다. https://www.mediawiki.org/wiki/Special:ExtensionDistributor?extdistname=Echo&extdistversion=REL1_34

폴더에 옮겨둔 후 wfLoadExtension( 'Echo' ); 추가. 커멘드 창에서 mediawiki/maintenance로 이동 후 php update.php 를 실행.

그럼 데이터베이스가 업데이트 되면서 위키 우측 상단에 종모양의 알림기능이 활성화된다.

이외 작업

DB백업

크론을 통해 하루에 한 번 자동으로 백업되게 만들자. 혹시나 중간에 망가져도 살릴 수 있게끔.(백업파일 용량이 100MB를 넘길 때까진 매일 해보자.)

과정 방법
파일만들기 /etc/cron.daily 안에 sudo nano mysql 따위의 명령으로 파일을 만든다.
내용등록 #!/bin/bash

        mysql_path='/usr/bin/mysql/' 

        month=$(date +%Y%m%d)         

        fileName="backup_wikisql_${month}.sql"     

        #파일 저장 경로 지정 대부분 홈디랙토리에 생성

        savePath="/home/id8436/Downloads/"

/usr/bin/mysqldump -u root my_wiki > ${savePath}${fileName} 

권한부여 ls -l 명령으로 다른 파일들의 권한설정을 보고 통일. 일반적으로 755이다.

sudo chmod 755 mysql

확인 프롬프트에 파일경로(/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 수식입력을 위해. 레이텍과 동일한 문법을 사용한다.
YouTube 유튜브 영상을 삽입하기 위한 확장기능. https://www.mediawiki.org/wiki/Extension:YouTube

디렉터리에 풀고, wfLoadExtension( 'YouTube' );

이미지 업로드 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 기입된 코드를 색으로 구분하여 가독성을 높여준다.


관리를 위한 기능

기능명 역할 설치방법
로고 바꾸기 위키의 로고에 들어갈 이미지 $wgLogo = '경로' 를 해주면 되지만,

서버컴퓨터 안에서 /var/lib/mediawiki/resources/assets 안의 wiki.png 를 바꿔주면 될듯.

135*135 픽셀이 적당할듯.

$wgServer 는 위키가 설치된 경로 한단계 위를 의미하는듯.

파비콘 바꾸기 (없어서 만들어야 해.)$wgLogo 아래 $wgFavicon = '경로'를 해주면 넣을 수 있다.

현재는 Logo와 같은 경로의 favicon.png로 되어있다.

16*16 픽셀이 적당할듯.

유저권한관리 유저 생성과 권한 관리는 LocalSetting 안에서 이루어진다.

아래 형식으로 작성하면 없는 그룹이라면 새로 생성되고, 권환관리가 이루어진다.

##유저들의 권한에 대하여

//일반 편집 불가

$wgGroupPermissions['*']['edit'] = false;

$wgGroupPermissions['*']['createpage'] = false;

$wgGroupPermissions['user']['edit'] = false;

$wgGroupPermissions['user']['createpage'] = false;

//교사그룹

$wgGroupPermissions['user']['edit'] = true;

$wgGroupPermissions['user']['createpage'] = true;

보호레벨 추가 특수한 그룹만 편집할 수 있는 문서를 만들기 위해. 보호될 필요가 있는 문서를 위하여.

$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;
};

광고코드는 구글 애드센스에서 광고->개요->광고단위기준 에서 코드를 긁어오면 된다.