앞에 작성한 포스트들은 이 dokuwiki를 설치하기 위한 준비작업이었다. 뭔가 길어서 포기하고 싶어질 수 있는데, 추후에 체험판(?) 역할을 할 수 있는 내장서버를 이용한 dokuwiki도 설명할 계획이다.(사실 그걸 먼저하고 이걸 나중에 했어야...)
HowtoForge의 문서는 wget을 이용해서 다운받는 것으로 설명되어 있는데, 난 그냥 웹브라우저에서 파일을 다운받는 것을 더 선호한다.(이유는 바로 뒤에서 설명할 예정)
웹브라우저에서 dokuwiki 다운로드 페이지로 이동한다.
특별한 이유가 없는한 Stable을 선택하고, 그 다음은 Languages로 넘어가면 Toggle all 버튼을 눌러서 필수인 영어만 남기고 다 선택을 해제한다.
내가 사용할 dokuwiki는 공개용이 아닌 개인용도로 사용할 예정이라서 다국어 지원이 필요없는데 굳이 필요없는 언어파일들을 설치하고 싶지 않았다.(사실 공개용도로 사용해도 영어, 한국어만 되면...😉)
대신 한국어는 지원하는 것이 좋으니 스크롤을 쭉 내려서 ko - 한국어
를 체크해서 선택한다.
그리고 Popular Plugins에서 다른 플러그인은 생각보다 사용율이 높지 않은데, Wrap 플러그인
은 활용도가 높으니 반드시 선택하도록 하자.
PC에 다운받았으면 이제 서버에 업로드를 할 시간이다.
사실 HowtoForge에서는 wget 명령어로 서버에서 바로 파일다운로드를 하도록 문서를 작성한 것은 아마도 이 업로드하는 과정이 생략되니 작성이 보다 용이해서라고 추정된다.😁
ssh로 접속이 가능하니 FileZilla같은 ftp 클라이언트를 이용해서 업로드를 한다.
(주의: FileZilla의 경우에 포트를 반드시 ssh 포트번호로 입력해야 sftp를 통해서 접속한다.)
$ ls dokuwiki-2020-07-29_Hogfather_20210816.tgz
아 업로드하기 전에 파일명의 일부는 변경해줬다.
변경 전 파일명 :
dokuwiki-8c896fb6c6bd28c5e1cb10f821008875.tgz
변경 후 파일명 :dokuwiki-2020-07-29_Hogfather_20210816.tgz
이유는 보통 저 설치파일은 보관해두는 편인데, 어느 버전의 dokuwiki(2020-07-29 Hogfather
)인지랑 언제 다운로드 받았았는지(20210816
)를 파일명만 보고서 알 수 있도록 하기 위함이다.(사실 크게 의미는 없다...😂)
이제 tgz 파일을 압축해제한다. 해제할 위치는 웹서버의 디렉토리(/var/www/html
)로 한다.
$ sudo mkdir /var/www/html/dokuwiki $ ll /var/www/html total 32 drwxr-xr-x 3 root root 4096 Aug 16 08:22 ./ drwxr-xr-x 3 root root 4096 Aug 16 07:12 ../ drwxr-xr-x 2 root root 4096 Aug 16 08:22 dokuwiki/ -rw-r--r-- 1 root root 18 Aug 16 08:04 index.html -rw-r--r-- 1 root root 21 Aug 16 07:23 info.php $ sudo tar -xvzf dokuwiki-2020-070-29_Hogfather_20210816.tgz -C /var/www/html/dokuwiki/ --strip-components=1 dokuwiki/.htaccess.dist dokuwiki/COPYING dokuwiki/README dokuwiki/VERSION dokuwiki/bin/.htaccess (... 중간 생략 ...) dokuwiki/vendor/splitbrain/php-cli/src/PSR3CLI.php dokuwiki/vendor/splitbrain/php-cli/src/TableFormatter.php $
웹서버 디렉토리에 dokuwiki용 디렉토리를 하나 생성한 뒤에 해당 경로에 압축을 풀어 넣어준다.
$ cd /var/www/html/dokuwiki $ sudo cp /var/www/html/dokuwiki/.htaccess{.dist,} $ ll total 116 drwxr-xr-x 8 root root 4096 Aug 16 08:28 ./ drwxr-xr-x 3 root root 4096 Aug 16 08:22 ../ -rw-r--r-- 1 root root 1688 Aug 16 08:28 .htaccess -rw-r--r-- 1 2012 2012 1688 Jul 29 2020 .htaccess.dist -rw-r--r-- 1 2012 2012 18092 Jul 29 2020 COPYING -rw-r--r-- 1 2012 2012 308 Jul 29 2020 README -rw-r--r-- 1 2012 2012 23 Jul 29 2020 VERSION drwxr-xr-x 2 root root 4096 Aug 16 08:25 bin/ drwxr-xr-x 2 root root 4096 Aug 16 08:25 conf/ drwxr-xr-x 12 root root 4096 Aug 16 08:25 data/ -rw-r--r-- 1 2012 2012 3618 Jul 29 2020 doku.php -rw-r--r-- 1 2012 2012 19576 Jul 29 2020 feed.php drwxr-xr-x 20 root root 4096 Aug 16 08:25 inc/ -rw-r--r-- 1 2012 2012 2540 Jul 29 2020 index.php -rw-r--r-- 1 2012 2012 20463 Jul 29 2020 install.php drwxr-xr-x 8 root root 4096 Aug 16 08:25 lib/ drwxr-xr-x 11 root root 4096 Aug 16 08:25 vendor/ $
.htaccess 파일을 .htaccess.dist 파일을 이용해서 생성해준다.(사실 저런 명령어 처음 봄...😅)
아파치에 도쿠위키용 설정을 넣어보자.
$ vi /etc/apache2/sites-available/dokuwiki.conf
vi로 dokuwiki.conf
파일을 생성하고, 아래의 내용을 붙여넣는다.
<VirtualHost *:80> ServerName wiki.simplism.kr DocumentRoot /var/www/html/dokuwiki <Directory ~ "/var/www/html/dokuwiki/(bin/|conf/|data/|inc/)"> <IfModule mod_authz_core.c> AllowOverride All Require all denied </IfModule> <IfModule !mod_authz_core.c> Order allow,deny Deny from all </IfModule> </Directory> ErrorLog /var/log/apache2/dokuwiki_error.log CustomLog /var/log/apache2/dokuwiki_access.log combined </VirtualHost>
위에서 ServerName
은 도메인이 없는 경우에는 localhost
로 입력해도 무관하다(고 알고 있다.. 테스트 못해봄😅)
위 설정파일을 아파치에 등록하기 위해서는 아래의 명령어를 실행한다.
$ sudo a2ensite dokuwiki.conf
참고로 저렇게 등록한 site 정보는 아래의 명령어로 해제가 가능하다.
$ sudo a2dissite dokuwiki.conf
저렇게 등록한 site 정보를 현재 구동 중인 아파치 웹서버에 적용하기 위해서는 아래의 명령어로 설정파일을 reload해주면 된다.
$ sudo systemctl reload apache2
웹브라우저에서 dokuwiki 페이지를 열어본다. 도메인이 없다면 http://[IP주소]/dokuwiki
일 것이다.
dokuwiki 주소로 접근했는데, 위처럼 나온다면 아~~주 정상이다. 웹서버 프로세스인 apache2 프로세스의 실행계정이 해당 파일에 대한 권한이 없어서 발생하는 것으로 자연스러운 현상이다.(전체적으로 설명하려면 포스트를 따로 만들어야한다...🤐)
$ ps -ef | grep apache2 root 1372 1 0 17:06 ? 00:00:01 /usr/sbin/apache2 -k start www-data 2472 1372 0 17:23 ? 00:00:00 /usr/sbin/apache2 -k start www-data 2473 1372 0 17:23 ? 00:00:00 /usr/sbin/apache2 -k start www-data 2474 1372 0 17:23 ? 00:00:00 /usr/sbin/apache2 -k start www-data 2475 1372 0 17:23 ? 00:00:00 /usr/sbin/apache2 -k start www-data 2476 1372 0 17:23 ? 00:00:00 /usr/sbin/apache2 -k start www-data 2477 1372 0 17:23 ? 00:00:00 /usr/sbin/apache2 -k start www-data 2505 1372 0 17:34 ? 00:00:00 /usr/sbin/apache2 -k start ubuntu 4937 4762 0 22:14 pts/0 00:00:00 grep --color=auto apache2 $
ps 명령어로 apache2 프로세스를 확인해보면 맨 앞에 www-data
가 가장 많은 것을 확인할 수 있을 것이다. 디테일한 설명은 pass하고, 이 서버에서는 apache2 프로세스를 실행하는 계정은 www-data
라는 것을 저것으로 확인할 수 있다.
사실 더 정확한 확인 방법은 아래의 설정파일을 확인하는 것이긴하다.
$ cat /etc/apache2/envvars | grep APACHE_RUN export APACHE_RUN_USER=www-data export APACHE_RUN_GROUP=www-data export APACHE_RUN_DIR=/var/run/apache2$SUFFIX $
/etc/apache2/envvars
라는 설정파일에 apache2 프로세스를 실행할 계정과 그룹이 설정으로 저장되어있다.
다시 위에 퍼미션 오류가 발생했던 화면을 보면 /data/pages
을 찾을 수 없다고 나와있다.
$ cd /var/www/html/dokuwiki/ $ cd data $ ll total 104 drwxr-xr-x 12 root root 4096 Aug 16 08:25 ./ drwxr-xr-x 8 root root 4096 Aug 19 16:55 ../ -rw-r--r-- 1 root root 143 Jul 29 2020 .htaccess -rw-r--r-- 1 root root 32 Jul 29 2020 _dummy drwxr-xr-x 2 root root 4096 Aug 16 08:25 attic/ drwxr-xr-x 10 root root 4096 Aug 19 17:22 cache/ -rw-r--r-- 1 root root 24642 Jul 29 2020 deleted.files -rw-r--r-- 1 root root 6516 Jul 29 2020 dont-panic-if-you-see-this-in-your-logs-it-means-your-directory-permissions-are-correct.png -rw-r--r-- 1 root root 12093 Jul 29 2020 dont-panic-if-you-see-this-in-your-logs-it-means-your-directory-permissions-are-correct.xcf drwxr-xr-x 2 root root 4096 Aug 16 08:37 index/ drwxr-xr-x 2 root root 4096 Aug 19 17:22 locks/ drwxr-xr-x 3 root root 4096 Aug 16 08:25 media/ drwxr-xr-x 2 root root 4096 Aug 16 08:25 media_attic/ drwxr-xr-x 2 root root 4096 Aug 16 08:25 media_meta/ drwxr-xr-x 2 root root 4096 Aug 16 08:25 meta/ drwxr-xr-x 4 root root 4096 Aug 16 08:25 pages/ drwxr-xr-x 2 root root 4096 Aug 16 08:25 tmp/ $
dokuwiki가 설치된 경로 하위에 data 디렉토리 안에 들어가서 ll 명령어로 확인해보면 소유주와 그룹이 root로 되어있음을 확인할 수 있다.
쉽지는 않지만 간략하게 설명하면 apache2 프로세스가 동작 중인 www-data 프로세스는 (어렵...🥱 퍼미션에 대한 내용은 따로 다루겠지만 그 전에 궁금한 사람은 검색을 해보는 걸로...)data/pages
디렉토리에 대해서 소유주도 아니고, 그룹에 속하지도 않으므로 other에 해당한다. other의 권한은 r-x이므로 read(읽기)와 execute(실행)은 가능하나 write(쓰기)가 되질 않는다.
퍼미션 문제를 해결하는 방법은 여러가지가 있으니 선호에 따라서 하면 된다.
3번 방법의 경우에는 www-data 계정뿐만 아니라 다른 계정도 동일한 권한이 부여되므로 보안상 적절치 않다.(만약 root계정이 아닌 다른 계정이 탈취되면 해당 디렉토리를 삭제하는 것도 가능하니...)
2번 방법은 나쁘지 않으나 손이 많이간다. (소유주변경 & 퍼미션 추가) 그러므로 보통은 1번 방법을 권장한다.
아래의 명령어를 이용해서 소유주를 변경한다.(보통 그룹도 같이 변경하긴 한다.)
$ cd /var/www/html/dokuwiki/data $ sudo chown -R www-data:www-data pages
그 다음에 다시 웹브라우저에서 오류가 났었던 페이지를 F5(새로고침)해본다.
data/pages
에 대한 퍼미션 문제가 해결되니 다른 디렉토리의 퍼미션 문제가 있다고 나온다.(data/attic
) 이 과정을 저 에러가 사라질때 까지 반복한다.
$ sudo chown -R www-data:www-data attic $ sudo chown -R www-data:www-data media $ sudo chown -R www-data:www-data media_attic $ sudo chown -R www-data:www-data meta $ sudo chown -R www-data:www-data media_meta $ sudo chown -R www-data:www-data cache $ sudo chown -R www-data:www-data index $ sudo chown -R www-data:www-data locks $ sudo chown -R www-data:www-data tmp $
퍼미션 하나 설정하고 F5, 퍼미션 하나 설정하고 F5 하다보면...
드디어 dokuwiki 화면이 뚜둥!
원래는 한 포스트로 작성하려고 했는데.. 내용이 길어져서 2개로 나눈다.