Bookstack 설정
Bookstack 설정은 PV로 설정된 스토리지에 "/data/tomcat/bookstack/pv/php"의
php-local.ini
www2.conf
를 수정하다.
현재 수정값 -- 파일 업로드 사이즈 수정으로 인하여 override값 정의
; Edit this file to override php.ini directives
date.timezone = Asia/Seoul
upload_max_filesize = 10000M
post_max_size = 10000M
PDF 출력시 한글과 이모지(Emoji) 폰트가 안깨지게 하는 법
https://hamchobo.tistory.com/3
https://ko.linux-console.net/?p=2006#gsc.tab=0 <-- wkhtmltopdf

BookStack을 설치한 뒤 그대로 사용하면, 책 내용을 "파일로 받기" > "PDF 파일"로 내보낼 경우 한글이 모두 깨져서 출력됩니다. 또한 이모지(Emoji) 문자를 사용할 경우도 마찬가지로 깨져서 나옵니다. 이런 문제에 대한 해결책은 아래와 같습니다.(BookStack에서는 dompdf 라는 모듈을 써서 PDF 문서로 변환하는데, 이 경우 문서가 제대로 안 만들어지고 한글이 깨지는 문제가 있습니다. 그래서 한글이 제대로 나오게 하려면 wkhtmltopdf라는 대체모듈을 사용해야 합니다.)
제가 깐 도커 이미지는 linuxserver에서 제공하는 BookStack이미지였습니다.
https://hub.docker.com/r/linuxserver/bookstack
참고로 나중에 언급할 것이지만 /config/www/.env 파일에 적어줄 wkhtmltopdf의 경로는 /usr/bin/wkhtmltopdf 입니다.
작업은 다음과 같습니다.
BookStack 설정 변경하기
BookStack 메뉴 "설정"을 누르고 왼편 "맞춤"을 누른 뒤 가장 아래로 가서 "헤드 작성"부분을 아래처럼 바꿔 주고 적용을 누릅니다.

<link href=" https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap " rel="stylesheet"> <style> body { text-rendering: geometricPrecision; } body, button, input, select, label, textarea { font-family: "Noto Sans KR"; } </style> |
font는 Noto Sans KR을 사용했습니다. 원하면 다른 폰트를 적용할 수 있습니다(Google fonts에서 다운받아 깔고, 설정 변경하는 식으로).
글꼴 깔기
font-family로 설정한 글꼴(Noto Sans KR) 파일을 가져와 시스템의 기본글꼴 디렉토리(/usr/share/fonts)에 저장합니다 .
이 과정을 수행하기 위해 도커에 BookStack 컨테이너를 사용하는 경우에는 아래와 같이 합니다.
가. SSH로 서버에 접속합니다.
나. 도커의 BookStack컨테이너로 들어갑니다.
$ sudo docker exec -it bookstack bash
다. 시스템 기본글꼴 디렉토리(/usr/share/fonts)로 이동합니다.
Noto Sans KR 폰트를 다운받습니다.
$ curl -o notosanskr.zip https://fonts.google.com/download?family=Noto%20Sans%20KR
zip 파일 압축을 풀기 위해 upzip을 설치합니다.
$ apk add unzip
폰트파일 압축을 풉니다.
$ unzip -d /usr/share/fonts/notosanskr notosanskr.zip
$ fc-cache -fv
$ fc-list | grep noto 로 제대로 폰트가 설치됐는지 확인합니다.
이모지 문자(이모티콘) 깔기
이모지 문자를 사용하려면 아래처럼 Emoji One Color 폰트도 깔아줍니다. 이 폰트를 까는 이유는 다른 종류의 이모지 폰트들(예:font-noto-emoji)은 PDF변환시 모두 깨지기 때문입니다.
https://github.com/adobe-fonts/emojione-color.git 에서 Emoji One Color 폰트를 다운 받아 도커 컨테이너의 /usr/share/fonts에 올립니다.

폰트 다운로드 링크: emojione-color-master.zip |
DSM을 이용해 위에서 받은 emojione-color-master.zip을 도커 볼륨연결 폴더(/docker/config/)아래에 업로드하고,
SSH로 접속해서 BookStack 도커 컨테이너로 들어갑니다.
$ sudo docker exec -it bookstack bash
$ cd /config/
$ mv emojione-color-master.zip /usr/share/fonts 명령을 내려서 폰트 디렉토리로 이동시킵니다.
그 후 압축을 풀고 폰트를 적용시킵니다.
$ unzip -d emojionecolor emojione-color-master.zip
$ fc-cache -fv
폰트가 깔렸는지 확인합니다.
$ fc-list | grep emojione
WKHTMLTOPDF 설치 <-- 이거는 안되던데 ... 일단 이거 없이 실행은 됨
linuxserver의 도커가 포팅된 OS는 알파인 리눅스이므로 알파인 리눅스용 wkhtmltopdf를 설치해야 하는데, 이 파일 찾기가 어렵습니다.
그래서 일단 알파인 리눅스용 wkhtmltopdf만 담고 있는 도커 컨테이너(surnet/alpine-wkhtmltopdf)를 깐 뒤, 이 도커 컨테이너에 있는 파일을 BookStack 도커 컨테이너로 복사하는 방법을 써보겠습니다.
아래처럼 가져온 뒤 surnet/alpine-wkhtmltopdf 도커 컨테이너를 깔아줍니다.

도커를 실행은 안 시키고 그냥 설치만 할 것이므로 아래 그림처럼 "마법사 완료 후 이 컨테이너 실행"의 체크표시를 꺼줍니다.

가령 예를 들어 wkhtmltopdf1이라는 이름으로 설치를 하면 아래 같은 컨테이너가 만들어집니다. 실행시키면 에러가 나올 것입니다.(원래 WKHTMLTOPDF는 input주소, output파일을 지정하는 형태로 쓰는데 그냥 실행시키니 에러가 나오는 것입니다)

이거 받는 위치는 찾았음 : https://ko.linux-console.net/?p=2006#gsc.tab=0 !!!!!!
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
첨부함 : wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
sudo tar -xvf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
cp ./wkhtmltox/bin/wkhtmltopdf /usr/bin/
SSH 창에서 exit로 빠져나와서,
$ exit
아래처럼 하여 현재 디렉토리에 wkhtmltopdf 파일을 복사해 놓고,
$ docker cp wkhtmltopdf1:/bin/wkhtmltopdf .
이를 BookStack 도커 컨테이너의 /usr/bin/로 복사해줍니다(docker to docker 복사기능을 지원안하니 일단 내려받고 다시 옮기는 겁니다).
$ docker cp wkhtmltopdf bookstack:/usr/bin
참고로 복사가 끝나면 임시로 만들어놓은 wkhtmltopdf1 컨테이너는 지워도 됩니다.
이제 다시 BookStack 도커 컨테이너로 들어가서 /config/www아래의 .env 파일을 고쳐준다.
$ sudo docker exec -it bookstack bash
$ cd /config/www
$ vi .env
아래 내용을 추가한 뒤 Esc키를 누른 뒤 : 을 누르고 wq! 로 저장하고 빠져나옵니다.
WKHTMLTOPDF=/usr/bin/wkhtmltopdf ALLOW_UNTRUSTED_SERVER_FETCHING=true |
나는 위의 WKHTMLTOPDF=/usr/bin/wkhtmltopdf를 주석으로 처리 !!!!!
그런 다음 wkhtmltopdf를 실행에 있어서 부수적으로 필요한 패키지들을 깔아줍니다.
$ apk add --update --no-cache libstdc++ libx11 glib libxrender libxext libintl libcrypto1.1 libssl1.1 ca-certificates fontconfig freetype ttf-dejavu ttf-droid ttf-freefont ttf-liberation
만약에 Microsoft제공 폰트들도 깔고 싶으면 아래 명령을 실행시킵니다(참고로 저는 설치 안했습니다).
$ apk add --no-cache --virtual .build-deps msttcorefonts-installer
$ update-ms-fonts
$ fc-cache -f
$ rm -rf /tmp/*
$ apk del .build-deps
마지막으로 폰트 리스트를 업데이트합니다.
$ fc-cache -fv
끝나면 bookstack에서 "파일로 받기" > "PDF 파일"을 눌러보면 제대로 동작할 것입니다.