넥스트 클라우드는 이미지매직을 이용해서 이미지를 처리, 썸네일을 생성하거나 로딩을 줄이기 위한 저용량 이미지를 생성한다.
레거시는 웬만하면 잘 지원되지만 문제는 애플의 HEIC 포멧.
물론 핸드폰에서 동기화를 호환성 위주로 한다면 이미지 업로드때 JPG로 변환하여 서버에 업로드 하게 되는데, 이러면 HEIC 를 사용하는 장점이 사라진다. (알다시피 색공간도 2비트나 넓은데다가 손실 압축의 JPG 와는 다르게 이미지 편집과 다회차 저장에도 이미지 열화가 없는건 덤.
아무튼 HEIC를 원활하게 사용하기 위해서는 도커 허브에서 배포하는 이미지를 좀 다듬어줘야 한다. (기본 배포하는 이미지는 ffmpeg 도 없어서 동영상 파일의 썸네일도 만들지 못하므로..)
필수요소를 사용하고 사용성 확장을 위해 추가로 패키지를 설치하고,
설치되는 이미지 매직에 최신의 HEIF 코덱을 컴파일해서 적용시켜줌으로서 HEIC 를 사용할 수 있게끔 해보자.
기초적인 도커 관리 지식만 있으면 되므로 고고싱!
도커파일은 다음과 같이 구성하여 추가 패키지 생성 스크립트를 할 수 있도록 커스텀 이미지를 만들어주자.
도커 파일 이름은 입맛에 맞게 지어주되 도커 컴포즈에서 해당 도커파일을 읽어올 수 있도록 세팅해야 하는건 잊지 말자.
예)
web-nextcloud:
container_name: nextcloud-web
build:
context: .
dockerfile: nextcloud-web-custom
restart: always
도커 파일 이름은 컴포즈에서 build 에 언급된것과 같이 nextcloud-web-custom 로 지어주었다.
FROM nextcloud:latest
ENV NEXTCLOUD_UPDATE=1
COPY extra_package_install.sh extra_package_install.sh
RUN chmod +x ./extra_package_install.sh && ./extra_package_install.sh 2>&1 | tee /var/log/extra_package_install.log
RUN docker-php-ext-install bz2
COPY start.sh /
CMD /start.sh
참고로 도커 파일에서는 이미지 빌드가 되면서 휘리릭 지나가버리는 빌드 내용을 담기 위해서 tee 를 이용해서 컨테이너의 /var/log 에 extra_package_install.log 를 기록하도록 하였다.
이러면 기초적인 셋업?은 끝난 셈이고 입맛에 맞는 스크립트를 extra_package_install.sh 에 구성하여 넣으면 되겠다.
필자의 세팅은 다음과 같다.
#!/bin/bash
set -euxo pipefail
start_time=”$(date -u +%s)”
echo “[INFO] apt 업데이트 및 필수 패키지 설치…”
apt update
apt install -y –no-install-recommends
intel-media-va-driver
ghostscript
smbclient
exiftool
ffmpeg
imagemagick
build-essential
autoconf
automake
libtool
pkg-config
cmake
git
wget
nasm
yasm
libjpeg-dev
libpng-dev
libraw-dev
libwebp-dev
libopenjp2-7-dev
libavcodec-dev
libavformat-dev
libavutil-dev
libswscale-dev
libmagickwand-dev
libfreetype6-dev
liblcms2-dev
libxml2-dev
libbz2-dev
libtiff-dev
libgif-dev
libde265-dev
libx265-dev
libltdl-dev
libdav1d-dev
# libwebp (libsharpyuv 포함)
echo “[INFO] libwebp 설치…”
cd /usr/local/src
rm -rf libwebp
git clone https://chromium.googlesource.com/webm/libwebp
cd libwebp
./autogen.sh
./configure –enable-libwebpmux –enable-libwebpdemux
make -j”$(nproc)”
make install
# 환경 변수 설정
export PKG_CONFIG_PATH=”${PKG_CONFIG_PATH:-/usr/lib/pkgconfig}:/usr/local/lib/pkgconfig”
export CMAKE_PREFIX_PATH=”/usr/local”
export LD_LIBRARY_PATH=”/usr/local/lib:${LD_LIBRARY_PATH:-}”
export LIBRARY_PATH=”/usr/local/lib:${LIBRARY_PATH:-}”
export C_INCLUDE_PATH=”/usr/local/include:${C_INCLUDE_PATH:-}”
export PATH=”/usr/local/bin:${PATH:-}”
# libheif
echo “[INFO] libheif 소스 설치 및 빌드…”
cd /usr/local/src
rm -rf libheif
git clone https://github.com/strukturag/libheif.git
cd libheif
git submodule update –init –recursive
mkdir build && cd build
cmake ..
-D AOM_INCLUDE_DIR=FALSE
-D AOM_LIBRARY=FALSE
-D OpenH264_INCLUDE_DIR=FALSE
-D OpenH264_LIBRARY=FALSE
-D SDL2_INCLUDE_DIR=FALSE
-D SDL2_LIBRARY=FALSE
-DWITH_DAV1D=ON
-DWITH_X265=ON
-DWITH_LIBDE265=ON
-DWITH_LIBSHARPYUV=ON
-DWITH_UNCOMPRESSED_CODEC=ON
-DWITH_REDUCED_VISIBILITY=OFF
make -j”$(nproc)”
make install
ldconfig
# 디코더 플러그인 심볼릭 링크 설정
echo “[INFO] 디코더 플러그인 심볼릭 링크 설정…”
mkdir -p /usr/local/lib/libheif
find /usr/local/lib -name ‘libheif-*.so’ -exec ln -sf {} /usr/local/lib/libheif/ ;
end_time=”$(date -u +%s)”
elapsed=”$((end_time – start_time))”
echo “[INFO] 설치 완료 (총 ${elapsed}초 소요)”
N6005 로 돌리는 저전력 NAS 환경의 서버에서 이미지 빌드에는 대략 5분정도 걸렸…
뭐 한번 이미지 만들어지면 이후에 내렸다 올리는건 커스텀 이미지로 바로 적용되니 문제는 딱히 없…
이게 처음에 31.0.4에서 사용하던 스크립트가 먹히지 않아 31.0.5로 오면서 GPT를 이용해 새롭게 구성한 내용임… (31.0.5에서는 업데이트 된 이미지매직을 사용하지만 여전히 애플 HEIC 가 안나오는 문제가 있슴)
댓글을 남겨주세요