사용자 도구

사이트 도구


project:dokuwikisetting

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
project:dokuwikisetting [2013/07/17 14:18] – [마치며] changwooproject:dokuwikisetting [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1
줄 113: 줄 113:
 ===== 배치 파일 및 자동 실행 ===== ===== 배치 파일 및 자동 실행 =====
 ==== 배치 파일 만들기 ==== ==== 배치 파일 만들기 ====
-매번 명령창을 열어서 nginx와 php를 구동시킨다면 끔찍합니다. 그러므로 다음과 같은 배치 파일을 몇 개 만들었습니다. +매번 명령창을 열어서 nginx와 php를 구동시킨다면 끔찍합니다. 그러므로 다음과 같은 배치 파일을 몇 개 만들었습니다. 다음 배치 파일은 nginx와 php를 동시에 구동시킵니다.
-다음 배치 파일은 nginx와 php를 동시에 구동시킵니다.+
 <code dos StartServer.bat> <code dos StartServer.bat>
 @ECHO OFF @ECHO OFF
줄 155: 줄 154:
    
 RunHiddenConsole.exe은 콘솔 명령은 실행하되, 콘솔창은 완전히 윈도우에서 숨겨 버리는 프로그램입니다. http://redmine.lighttpd.net/attachments/660/RunHiddenConsole.zip 에서 다운로드 받을 수 있습니다. RunHiddenConsole.exe은 콘솔 명령은 실행하되, 콘솔창은 완전히 윈도우에서 숨겨 버리는 프로그램입니다. http://redmine.lighttpd.net/attachments/660/RunHiddenConsole.zip 에서 다운로드 받을 수 있습니다.
 +
 +여러번의 서버 폭파(?) 및 재건으로 인해 스크립트 작성이 매우 귀찮습니다. 미리 'batch'라는 폴더에 bat 파일들을 작성했습니다. {{:project:dokuwikisetting:batch.zip|}}
 +
 ==== 자동 실행 하기 ==== ==== 자동 실행 하기 ====
 탐색기 탐색창에 %APPDATA%를 입력합니다. 그러면 자기 계정의 AppData\Roaming 폴더에 접근할 수 있습니다. 이 폴더는 기본적으로 숨겨져 있습니다. 탐색기 탐색창에 %APPDATA%를 입력합니다. 그러면 자기 계정의 AppData\Roaming 폴더에 접근할 수 있습니다. 이 폴더는 기본적으로 숨겨져 있습니다.
줄 225: 줄 227:
 이 경우 dw2pdf/action.php를 열어 'protected function load_template($title)'을 찾습니다. 'https' 프로토콜을 'http'로 변경합니다. 이 경우 dw2pdf/action.php를 열어 'protected function load_template($title)'을 찾습니다. 'https' 프로토콜을 'http'로 변경합니다.
  
 +== PDF 변환 시간이 오래 걸릴 때 ==
 +개인 서버로 저사양의 PC를 사용하는 경우 PDF 변환에 상당한 시간을 필요로 합니다. 그런데 NginX나 Apache등에서 php에 대해 스크립트 실행 시간 제한이 있다면 이 시간 제한에 걸려 PDF를 생성하지 못하는 일이 발생할 수도 있습니다. 이 경우 타임아웃 시간에 조금 여유를 두는 것이 좋습니다.
 +
 +PHP는 php.ini에서 ''max_execution_time''을 증가시키면 됩니다.
 +
 +출처: http://stackoverflow.com/questions/9629566/how-to-increase-apache-timeout-directive-in-htaccess
 ===== 백업 & 동기화 ===== ===== 백업 & 동기화 =====
 === 백업 === === 백업 ===
줄 280: 줄 288:
  sys.exit(main(sys.argv))  sys.exit(main(sys.argv))
 </code> </code>
 +
 +아래 스크립트는 zip이 아닌 tar.bz2로 압축합니다. tar를 사용하기 때문에 파일의 권한이 보존되는 장점이 있습니다. 기능은 거의 비슷하지만, 이쪽을 더 추천합니다. 아래 파이썬 스크립트는 몇 가지 기본 인자를 받아 처리하며, 인자에 따라 백업 방식이 약간 달라집니다. ''-a'' 스위치를 붙이면 도쿠위키에 대해 전체 스냅샷을 생성하며, ''-p'' 스위치를 붙이면 유저가 따로 설치한 플러그인을 추가해서 백업을 합니다. 물론 ''-a''는 ''-p'' 보다 더 광범위한 옵션이기 때문에 둘이 같이 사용될 경우 ''-p''는 무시되는 것과 마찬가지 효과가 일어납니다. 
 +<code python backup.py>
 +#!/usr/bin/python
 +# -*- coding: utf-8 -*-
 +import datetime
 +import getopt
 +import os
 +import sys
 +import tarfile
 +
 +def help():
 +    help_msg = '''Usage: backup.py -r dokuwiki_root [-a] [-p] (filename_prefix)
 +       -r: dokuwiki root path
 +       -a: backup all dokuwiki data
 +       -p: backup with user plugins
 +       -h: print this message
 +       
 +* Backup target: conf, data/{attic, media, media_attic, meta, pages}       
 +* Output file name: (filename_prefix)_YYYYMMDD(state).tar.bz2
 +    e.g.) backup_20130719.tar.bz2   # only backup target
 +          backup_20130719a.tar.bz2  # all snapshot
 +          backup_20130719p.tar.bz2  # backup target with user-installed plugins'''
 + 
 +    print help_msg
 +
 +def main(argv):    
 +    optlist, args = getopt.getopt(argv[1:], 'r:aph')
 +
 +    # check optlist
 +    dokuwiki_root = None
 +    backup_all = False
 +    with_plugin = False
 +    
 +    for opt in optlist:
 +        if opt[0] == '-r':   dokuwiki_root = opt[1] 
 +        if opt[0] == '-a':   backup_all = True
 +        if opt[0] == '-p':   with_plugin = True
 +        if opt[0] == '-h':
 +            help()
 +            return 0
 +    
 +    # check args
 +    if len(args) != 1:
 +        print >> sys.stderr, 'Error in filename_prefix'
 +        return 1    
 +    file_prefix = args[0]
 +    
 +    if dokuwiki_root is None:
 +        print >> sys.stderr, 'dokuwiki_root not given'
 +        return 1
 +        
 +    backup_dokuwiki(dokuwiki_root, backup_all, with_plugin, file_prefix)
 +
 +def backup_dokuwiki(dokuwiki_root, backup_all, with_plugin, file_prefix):
 +    # minimum list of backup
 +    # https://www.dokuwiki.org/faq:backup
 +    DIRS_TO_BACKUP = ('conf', 'data/attic', 'data/media', 'data/media_attic', 'data/meta', 'data/pages')
 +    DEFAULT_PLUGIN = set(['acl', 'authad', 'authldap', 'authmysql', 'authpgsql', 'authplain', 'config', 'info', 'plugin', 'popularity', 'revert', 'safefnrecode', 'testing' , 'usermanager'])
 +    PLUGIN_PATH_PREFIX = 'lib/plugins'
 +     
 +    statecode = ''    
 +    if backup_all:
 +        statecode = 'a'
 +    elif with_plugin:
 +        statecode = 'p'
 +        
 +    datetimestr = datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d')
 +    filename = '%s_%s%s.tar.bz2' % (file_prefix, datetimestr, statecode)
 +        
 +    oldpath = os.getcwd()
 +    os.chdir(dokuwiki_root)
 +    tar = tarfile.open(filename, 'w:bz2'   
 +    if backup_all:
 +        tar.add('./'   
 +    else:
 +        for dir in DIRS_TO_BACKUP:            
 +            tar.add('./' + dir)
 +        
 +        # plugin
 +        if with_plugin:            
 +        
 +            for dir in os.listdir(PLUGIN_PATH_PREFIX):
 +                path = os.path.join(PLUGIN_PATH_PREFIX, dir)
 +                isdefault = dir in DEFAULT_PLUGIN
 +                
 +                # only archive user-install plugins                
 +                if os.path.isdir(path) and not isdefault:
 +                    tar.add('./'+path)
 +        
 +    os.chdir(oldpath)    
 +    tar.close()    
 +    
 +    print filename
 +    
 +    return 0
 +    
 +if __name__ == '__main__':
 + sys.exit(main(sys.argv))
 +</code>
 +
 +위 파이썬 코드는 단지 압축 파일을 생성할 뿐입니다. 이렇게 생성된 파일은 클라우드 서비스 같은 원격지에 따로 보관하면 더욱 안정적으로 데이터를 보관할 수 있을 것입니다. 아래 bash 쉘 스크립트는 자동으로 보통 옵션(conf, data 디렉토리 주요 내용)으로 위키 데이터를 백업한 후, [[https://github.com/mk-fg/python-skydrive|skydrive-cli]]를 이용하여 skydrive에 파일을 올립니다.
 +<code bsh autobackup>
 +#!/bin/bash
 +
 +# requirement
 +# Python 2.7
 +# https://github.com/mk-fg/python-skydrive
 +#
 +# pip install 'python-skydrive[standalone]'
 +# pip install pyyaml requests
 +#
 +# https://manage.dev.live.com/
 +# put yaml file: ~/.lcrc
 +# client:
 +#  id: 00000000440EB189
 +#  secret: JbWpwkOA4bp3jYBCG5wWLb6fqWJHLSkc
 +#
 +# ATTENTION: above id/secret is real!! Do not distribute!!
 +# skydrive-cli auth
 +
 +SCRIPT_ROOT=/home/changwoo/scripts
 +DOKUWIKI_ROOT=/home/changwoo/public_html/dokuwiki
 +FILE_PREFIX=/home/changwoo/DokuWikiBackup
 +SKYDRIVE_PATH=DokuWikiBackup
 +
 +echo "Backup Dokuwiki..."
 +BACKUPFILE=`python $SCRIPT_ROOT/backup.py -r $DOKUWIKI_ROOT $FILE_PREFIX` 
 +
 +echo "Upload to SkyDrive..."
 +/usr/local/bin/skydrive-cli put $BACKUPFILE $SKYDRIVE_PATH # CHECK THE PATH!
 +
 +echo "Removing...$BACKUPFILE"
 +rm -f $BACKUPFILE
 +</code>
 +
 +이 스크립트를 서버에서는 3일마다 한 번씩 동작시킵니다.
 +  $ crontab -e
 +
 +편집기에 다음처럼 스크립트를 추가합니다. 3일에 한 번 오후 6시 정각에 ''autobackup'' 스크립트를 동작시킵니다.
 +  00 18 */3 * * <PATH_SCRIPT_IS>/autobackup > /dev/null
  
 === 동기화 === === 동기화 ===
줄 286: 줄 435:
 한 대의 PC만 사용한다면 동기화에 대해 그렇게 복잡하게 생각할 필요가 없으나, 요즘 2대 이상 여러 기계를 사용하는 경우가 많아졌습니다. 위키를 NAS와 같은 관리하기도 안정적이고 어디서나 접근 가능한 곳에 보관한다면 좋겠지만 그렇지 않은 경우에는 개인 위키의 데이터 백업도 상당히 신경쓰이는 일입니다. 그래도 요즘은 dropbox와 같은 클라우드 서비스가 있으니 아카이브로 만든 파일을 dropbox를 통해 보관하면 상당히 안정적이면서도 손쉽게 데이터를 관리할 수 있습니다. 한 대의 PC만 사용한다면 동기화에 대해 그렇게 복잡하게 생각할 필요가 없으나, 요즘 2대 이상 여러 기계를 사용하는 경우가 많아졌습니다. 위키를 NAS와 같은 관리하기도 안정적이고 어디서나 접근 가능한 곳에 보관한다면 좋겠지만 그렇지 않은 경우에는 개인 위키의 데이터 백업도 상당히 신경쓰이는 일입니다. 그래도 요즘은 dropbox와 같은 클라우드 서비스가 있으니 아카이브로 만든 파일을 dropbox를 통해 보관하면 상당히 안정적이면서도 손쉽게 데이터를 관리할 수 있습니다.
  
-2013년 7월 현재 라즈베리 파이를 이용한 리눅스 서버에서 개인 위키를 운영중입니다. [[project:beginningraspberrypi|라즈베리 파이 시작하기]]+<del>2013년 7월 현재 라즈베리 파이를 이용한 리눅스 서버에서 개인 위키를 운영중입니다.</del>  [[project:beginningraspberrypi|라즈베리 파이 시작하기]] 
 + 
 +[[http://www.bittorrent.com/intl/ko/sync|비트토렌트 싱크]]를 이용한 싱크도 참고할 수 있습니다. [[project:btsyncforrpi|라즈베리 파이에서 BitTorrentSync로 데이터 동기화하기]] 
 + 
 +=== RSync 를 이용한 동기화 === 
 +참고 문서: [[research:rsync]] 
 + 
 +<del>리눅스 데스크탑에서 대략 1시간 간격으로 계속 업데이트를 하는 경우 이렇게 한다. 우선 미니서버에 암호 없이 들어갈 수 있도록 키를 넘긴다. 그리고 다음과 같은 쉘 스트립트를 작성한다.</del> 
 +<code bash dokuwiki_rsync> 
 +#!/bin/bash 
 + 
 +RSYNC=/usr/bin/rsync 
 +OPT="--verbose --recursive --update --delete" 
 +LOCAL=/home/changwoo/public_html/dokuwiki/ 
 +REMOTE=changwoo@MiniServer:/home/changwoo/public_html/dokuwiki/ 
 + 
 +echo "LOCAL >> REMOTE" 
 +$RSYNC $OPT $LOCAL $REMOTE 
 + 
 +echo "REMOTE >> LOCAL" 
 +$RSYNC $OPT $REMOTE $LOCAL 
 +</code> 
 + 
 +미니서버와 데스크탑의 사용자와 그룹이 사실상 같으므로 소유권과 소유자 정보를 같게 맞춰 주는 것이 무엇보다 중요하다. 관리에 상당히 문제가 있는 관계로, [[project:btsyncforrpi#싱크된_파일의_소유권_및_권한_문제|make_ready.sh]]의 쉘 스크립트의 권한을 777로 변경하였다. 또한 설정에서 디렉토리와 파일의 생성 시 권한도 777로 줬다. <del>어떤 한 곳의 안정적인 서버를 가지고 운영하는 거라면 이런 일이 없을 텐데</del>
 ===== 개인 도메인 설정하기 (host 파일 편집) ===== ===== 개인 도메인 설정하기 (host 파일 편집) =====
 멋진 위키가 생겼는데 웹브라우저에 'localhost'라고 치기에는 너무 초라합니다. 오직 내 PC만 사용가능하더라도 서버의 도메인 이름을 지어 주는 것이 좋지 않을까요? :-)  C:\Windows\System32\Drivers\etc 디렉토리에 'hosts'라는 파일을 텍스트 편집기로 열어 봅니다. 관리자 권한으로 파일을 열어야 편집이 가능한 점 잊지 마세요. 멋진 위키가 생겼는데 웹브라우저에 'localhost'라고 치기에는 너무 초라합니다. 오직 내 PC만 사용가능하더라도 서버의 도메인 이름을 지어 주는 것이 좋지 않을까요? :-)  C:\Windows\System32\Drivers\etc 디렉토리에 'hosts'라는 파일을 텍스트 편집기로 열어 봅니다. 관리자 권한으로 파일을 열어야 편집이 가능한 점 잊지 마세요.
줄 330: 줄 502:
  
 이 글을 보고 '나도 해 볼까? PC에 위키 설치해 봐?'라고 마음먹으셨다면 정말 해 보시길 권합니다. 조금씩 조금씩 글을 적어 나가다보면 결국 만족스러운 자신만의 저널이 탄생하게 되겠죠. 이 글을 보고 '나도 해 볼까? PC에 위키 설치해 봐?'라고 마음먹으셨다면 정말 해 보시길 권합니다. 조금씩 조금씩 글을 적어 나가다보면 결국 만족스러운 자신만의 저널이 탄생하게 되겠죠.
- 
-===== 더 보기 ===== 
-  * [[project:beginningraspberrypi | 라즈베리 파이 시작하기]] 
-  * [[project:btsyncforrpi | 라즈베리 파이에서 BitTorrentSync로 데이터 동기화하기]] 
project/dokuwikisetting.1374070718.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki