개인 위키 – MediaWiki

This entry is part 36 of 48 in the series FreeNAS 서버 만들기

MediaWIKI 는 위키디피아의 위키 엔진으로서 세계에서 가장 많이 사용되는 위키 엔진입니다. 많은 기능들을 지원하고, 개발이 활발하며 사용자가 많아 지원을 받기 쉽습니다.

마운트 포인트

미디어위키는  파일 업로드를 허용합니다. 그런데 업로드 된 파일은 FEP 감옥이 위치한 System zpool 에 저장됩니다. 이미지 양이 적거나 외부 이미지 호스팅 서비스를 이용한다면 별 문제가 되지 않겠지만, 그렇지 않은 경우 SSD 에 미디어를 저장하는 것은 부담스러울 수 있습니다. 그러니 HDD 에 미디어가 저장될 수 있도록 마운트 포인트를 설정하겠습니다.

Dataset 만들기

Data/hosting/mediawiki

미디어위키의 이미지가 저장될 dataset 입니다. 압축을 해제하거나 lz4 로 설정하는 것이 좋습니다.

마운트

iocage exec FEP mkdir -p /usr/local/www/mediawiki/images/

파일이 업로드 될 디렉토리를 만들어주고

iocage stop FEP

감옥을 정지시킨 다음

/mnt/Data/hosting/mediawiki/usr/local/www/mediawiki/images/

마운트 해 줍니다.

이제 미디어위키의 이미지 디렉토리는 hdd 에 위치합니다.

MediaWIKI 설치

iocage console FEP

감옥으로 로그인 해 줍니다.

MeidaWIKI 패키지 설치

‘pkg 와 port – 레포 바꾸기’ 를 참고하여 레포를 최신으로 바꿔 주세요.

pkg search mediawiki

mediawiki 를 검색해 보면 mediawiki131mediawiki132 패키지가 있을 것입니다.  13113.1 버전으로 LTS 버전이고, 13213.2 버전으로 최신 버전입니다. 버전 수명 주기를 확인하려면 이 링크 에서 확인하시면 됩니다.

본 포스팅에서는 mediawiki131 을 설치하도록 하겠습니다. php7.2 를 사용하니 설치할 패키지의 이름은 mediawiki131-php72 입니다.

pkg install mediawiki131-php72 php72-intl php72-pecl-APCu php72-pecl-imagick-im7

mediawiki 와 MediaWiki 에서 일반적으로 요구하는 php 패키지를 설치하였습니다.

권한 설정

chown -R www:www /usr/local/www/mediawiki

미디어 위키 디렉토리의 권한을 www 유저와 그룹에게 주었습니다.

서버 블록 작성

vi /usr/local/etc/nginx/conf.d/mediawiki.conf

server {
    listen      80;
    root        /usr/local/www/mediawiki/;
    index       index.php;

    access_log /var/log/nginx/mediawiki/access.log;

    location / {
        try_files $uri $uri/ @rewrite;
    }

    location @rewrite {
        rewrite ^/(.*)$ /index.php?title=$1&$args;
    }

    location ^~ /maintenance/ {
        return 403;
    }

    include otherconf/php.conf;

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        try_files $uri /index.php;
        expires max;
        log_not_found off;
    }

    location = /_.gif {
        expires max;
        empty_gif;
    }

    location ^~ ^/(cache|includes|maintenance|languages|serialized|tests|images/deleted)/ {
        deny all;
    }

    location ^~ ^/(bin|docs|extensions|includes|maintenance|mw-config|resources|serialized|tests)/ {
        internal;
    }

    location ~* ^/images/.*.(html|htm|shtml|php)$ {
        types { }
        default_type text/plain;
    }

    location ^~ /images/ {
        try_files $uri /index.php;
    }

}

nginx 서버 블록을 설정합니다.

mkdir -p /var/log/nginx/mediawiki/

로그가 저장될 디렉토리를 만들어 주고

nginx -t

설정을 테스트한 후 문제가 없다면

service php-fpm restart && service nginx restart

재시작 해 줍니다.

MariaDB 데이터베이스 만들기

미디어위키는 다른 프로그램과 데이터베이스를 함께 사용할 수 있습니다. 만약 만들어 둔 데이터베이스가 있다면 그것을 사용할 수 있습니다. 본 포스팅에서는 미디어위키가 사용할 새로운 데이터베이스를 만들도록 하겠습니다.

exit

FEP 감옥에서 나가 준 다음

iocage exec MariaDB mysql -u root -p

MariaDB 콘솔에 로그인합니다.

CREATE USER mediawikiuser@'FEP감옥의IP' identified by 'superstrongpassword';
CREATE DATABASE mediawikidb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
grant all privileges on mediawikidb.* TO mediawikiuser@'FEP감옥의IP';
FLUSH PRIVILEGES;
exit;

mediawikiuser 유저가 superstrongpassword 라는 비밀번호로 FEP Jail 에서만 접근 가능하게 하고,

utf8mb4 문자셋을 가진 mediawikidb 를 만들었고,

mediawikiusermediawikidb의 모든 권한을 가지도록 하였습니다.

  • 유저명 : mediawikiuser 
  • 비밀번호 : superstrongpassword 
  • DB명 : mediawikidb

superstrongpassword 를 그대로 사용하지 말고, 자신만의 비밀번호를 만들어 주세요. 비밀번호는 가능하면 숫자와 영어 대소문자만을 사용해서 만들어 주세요. 특수문자 들어가면 에러가 날 수도 있습니다.

비밀번호에 무슨 문자를 사용해도 되는지 정리해 둔 거라도 있으면 좀 나을텐데 그런 걸 못찾겠네요. 그냥 비밀번호를 충분히 길게 만들어 주세요.

리버스 프록시에 연결

iocage exec Nginx_WAF vi /usr/local/etc/nginx/conf.d/mediawiki.conf

nginx 리버스 프록시에 mediawiki 서버 블록을 만들어 줍니다.

server {
    listen      443 ssl http2;
    server_name wiki.example.com;

    include /usr/local/etc/nginx/options/*;

    allow 192.168.1.0/24;
    deny all;

    location / {
        proxy_pass http://FEP감옥의IP/;
        include /usr/local/etc/nginx/otherconfig/proxy.conf;
   }
}

내부망에서만 접속할 수 있도록 제한하였습니다. 설치 중에 누군가가 접근하는 것을 막기 위해서입니다.

엑세스 로그를 기록하지 않습니다. FEP 감옥에서 엑세스 로그를 기록하기 때문에 리버스 프록시에서 로그를 기록하게 되면 로그가 이중으로 기록되게 됩니다.

iocage exec Nginx_WAF nginx -t

구문을 테스트하고 문제가 없다면

iocage exec Nginx_WAF nginx -s reload

리로드 해 줍니다.

웹으로 설치

올바르게 설정하였다면 https://wiki.example.com 에서 미디어위키를 설치할 수 있습니다.

설치 시 입력하는 데이터베이스 정보는 위에서 생성한 데이터베이스 정보를 입력하면 됩니다.

설치 시에 데이터베이스 접두사를 설정해 주면 데이터베이스를 다른 프로그램과 같이 사용할 수 있습니다. 나중에 다른 시스템으로 옮기거나 하는 경우를 상정하여 접두사를 설정해 주는 것이 좋습니다.

외부 접속 허용

설치가 끝나면 외부에서 접근이 가능하도록 해 줍니다.

allow 192.168.1.0/24;
deny all;

위 두 줄을 삭제하거나 주석 처리 해 주세요.

이제 미디어위키가 설치되었고, 외부에서 접속이 가능합니다.

업데이트

업데이트 하기 전에 데이터베이스를 mysqldump 로 백업해 주는 것을 권장합니다.

service service nginx stop && service php-fpm stop

nginx 와 php 를 중지하고

pkg update && pkg upgrade -y

패키지 업데이트를 실행합니다.

chown -R www:www /usr/local/www/mediawiki

미디어위키가 설치된 디렉토리의 권한을 www 로 설정하고

su -m www -c "php /usr/local/www/mediawiki/maintenance/update.php"

업데이트를 실행합니다.

service service nginx start && service php-fpm start

업데이트가 완료되었다면 서비스를 시작해 줍니다.

미디어위키 업데이트 가이드 (미디어위키 공식 페이지)

마치면서

다음 포스팅에서는 워드프레스를 설치하는 방법에 대해 다룰 것입니다. 

시리즈 네비게이션<< 웹 서버 – FEMP블로그 – WordPress >>

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다