시놀로지 도커에 immich 설치하기

image.png

immich-app/immich: High performance self-hosted photo and video management solution.

 

이미치 서비스야 워낙 유명하니 따로 설명 드릴 내용이 없겠지만

구글 포토와 비슷한 느낌의 사진 관리 솔루션이라고 보시면 됩니다

도커에 설치가 가능하고요

여러 플랫폼이나 os에서 여러 형태로 제공하기도 했던 거 같습니다

리눅스(도커 또는 개별 스토어)나 proxmox 등에서 설치하는 방법은 가이드가 많으니 검색을 한 번 해보시고요

이 글은 시놀로지 도커에 컨테이너 매니저로 설치하는 방법 입니다 

 

image.png

우선 패키지 센터에서 컨테이너 매니저를 설치 해줍니다

도커를 사용하시는 분은 대부분 설치가 돼있을 겁니다

 

image.png

컨테이너 매니저 설치는 그냥 다음다음 누르시면 끝입니다

별도의 네트워크 서브넷 설정을 사용하시려면 설정하셔도 됩니다

 

image.png

컨테이너 매니저 설치 완료 후 실행하시면 이런 창이 뜹니다

아직은 아무것도 설치가 안된 상태죠

 

image.png

파일스테이션을 실행해 확인 해보시면 도커 폴더가 생성 된 걸 보실 수 있습니다

 

우선 docker 폴더는 컨테이너 매니저의 권한이 기본적으로 허용 된 상태라

별다른 권한 설정 없이 대부분 사용이 가능 합니다

 

문제는 다른 볼륨이나 다른 경로의 폴더에 접근 하기 위해서는 권한 설정을 따로 해줘야합니다

이런저런 컨테이너를 가이드대로 설치 후 동작을 안한다?

대부분 임의로 수정한 폴더 경로의 권한 문제인 경우가 많습니다

 

그러니 폴더 경로를 수정하기 전에 본인이 지금 무슨 작업을 하는지

어떤 추가 작업이 필요한지를 인지한 상태에서 작업을 해주셔야 오류가 없습니다

 

우선은 기본 경로로 설치를 해서 동작을 확인 후 수정을 하시기 바랍니다

왜냐하면 다른 문제로 실행이 안되는데 권한 문제까지 겹치면 뭐가 문제인지 찾기 힘들거든요

 

image.png

우선 파일스테이션에서 docker 폴더에 immich 폴더를 하나 만들어 줍니다

이건 프로젝트 폴더로 해당 폴더에 immich를 설치하기 위해 만들어 주는 겁니다

이름은 임의대로 수정하셔도 상관 없습니다

 

그 후에 immich 하위에 library 폴더와 postgres 폴더를 생성 해주세요

 

이 두 폴더는 나중에 확인하게 될 컴포즈 파일과 .env 파일에서 요구하는 폴더 입니다

ssh나 터미널에서 명령어로 작업을 하면 폴더 생성도 한번에 할 수 있지만

지금은 컨테이너 매니저로 설치 중이니 수동으로 만들어 주셔야 합니다

 

이제 폴더를 다 만들었으니 컨테이너를 만들 내용이 있어야 겠죠?

 

image.png

immich/docker at main · immich-app/immich

이미치 깃헙에 보면 도커 관련 파일들이 있습니다

여기서 필요한 건 도커 컴포즈 파일과 .env 파일입니다

 

도커 컴포즈 파일은 일종의 설계도라고 보시면 됩니다

여러 이미지 설정이나 환경변수 볼륨, 네트워크 설정 등등을 모두 적어놓고

자동으로 컨테이너를 생성 하는 방식이죠

.env는 뭐냐? 환경 변수를 모아놓은 파일입니다

 

외부로 노출하기 좀 그런 시크릿키나 이런저런 보안관련 키들 또는

한 프로젝트 안에 여러개의 컨테이너가 필요하고 각 컨테이너에 중복 된 환경변수를 적어줘야할 때

예를 들어 폴더 경로를 여기저기 다 적어줘야 하는데 폴더 경로를 변경하면 다시 여기저기 수정을 해줘야겠죠 

그런데 .env 안에 폴더 경로를 적어두고 그 파일을 각각의 컨테이너가 참조하면 경로 수정을 할 때

.env 파일의 내용만 바꿔주면 전부 수정이 되는 겁니다

 

우선 .env 파일이 immich 폴더 루트에 있어야 합니다

 

# You can find documentation for all the supported env variables at https://docs.immich.app/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=./library # 업로드 된 파일이 저장 될 경로

# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=./postgres # DB가 저장 될 경로

# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Etc/UTC
TZ=Asia/Seoul # 서울 시간대 추가

# The Immich version to use. You can pin this to a specific version like "v2.1.0"
#IMMICH_VERSION=v2 # 특정 버전을 지정해서 설치도 가능
IMMICH_VERSION=release # 최신 버전 설치

# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=postgres # 특문 없이 임의의 암호로 수정하면 됩니다

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres # DB 사용자 이름 
DB_DATABASE_NAME=immich # DB 데이터 베이스 이름 둘 다 수정하지 마세요

# DB 와 REDIS 컨테이너 연결이 안될 경우를 위해 추가
DB_HOSTNAME=immich_postgres
REDIS_HOSTNAME=immich_redis

깃헙에서 다운 받으셔서 수정 후 .env로 이름 변경 후 업로드 하셔도 되고

파일 스테이션에 아무 파일이나 복사해서 .env.txt로 수정 후

텍스트 편집기로 해당 내용 붙여 넣어서 저장하시고 .env로 바꿔주셔도 됩니다

편한 방법 대로 진행 하세요

 

 .env 파일 내용을 수정을 좀 했고 주석을 달아놨습니다

 폴더 경로 중에 ./ 의 의미는 .env파일이 있는 해당 폴더 그러니까 여기서는 immich 폴더가 되겠죠

그 폴더 내의 있는 폴더라는 의미입니다

/volume1/docker/immich/library 와 ./library 는 같은 의미가 되는 겁니다

 

image.png

자 이제 .env 파일도 저장을 했으니 이제 프로젝트 생성을 하겠습니다

컴포즈 파일은 .env 처럼 업로드를 하셔도 되고 프로젝트 생성 과정 중에 입력 해도 됩니다

 

image.png

컨테이너 매니저의 프로젝트로 이동 해줍니다

이 프로젝트는 포테이너의 스택과 같은 기능입니다

컴포즈 파일을 베이스로 여러개의 컨테이너를 하나로 묶어 설치 해주는 기능이죠

프로젝트 생성을 눌러주시고

 

 

image.png

프로젝트 이름과 경로 그리고 컴포즈 업로드를 통해 파일을 업로드 하시거나

만들기를 통해 복사 붙여넣기 하셔도 됩니다

저 같은 경우는 수정이 편해서 붙여넣기 했습니다

해당 폴더에 컴포즈 파일이 있는 경우에는 만들기가 안되니

업로드 한 파일을 수정하시거나 삭제하시면 됩니다

#
# WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose
#
# Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.

name: immich

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    # extends:
    #   file: hwaccel.transcoding.yml
    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
    volumes:
      # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
      - ${UPLOAD_LOCATION}:/data
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - '2282:2283' # 2282 포트는 접속 포트 입니다 수정하셔도 됩니다 우측 2283은 수정 금지
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false

  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
    # Example tag: ${IMMICH_VERSION:-release}-cuda
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    # extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false

  redis:
    container_name: immich_redis
    image: docker.io/valkey/valkey:8@sha256:81db6d39e1bba3b3ff32bd3a1b19a6d69690f94a3954ec131277b9a26b95b3aa
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
      # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
      # DB_STORAGE_TYPE: 'HDD' # 디비를 저장하는 공간이 HDD인 경우 설정 해줍니다
    volumes:
      # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    shm_size: 128mb
    restart: always

volumes:
  model-cache:

깃헙에 있는 이 컴포즈를 사용했고요

 

찬찬히 한 번 보시면 앞에서 설정했던 폴더나 .env 파일의 내용등이 보이실 겁니다

대충 이런 구조구나 하시고 보시면 되겠습니다

프로젝트 내부에 만들어지는 컨테이너지만 컨테이너 이름은 고유하기 때문에

만약 이미치를 하나 더 만든다면 컨테이너 이름도 변경을 해줘야 합니다

헬스 체크 같은 부분도 리소스를 먹기 때문에 굳이 필요 없다 싶으시면 제거를 해주셔도 되고요

HW가속을 위한 설정도 지금 주석 처리가 돼있죠

hwaccel.ml.yml 부분인데 .env 처럼 깃헙에서 다운 받아서 업로드 하시고 수정해줘야 합니다

데이터 베이스 컨테이너의 환경 변수 중에 디비가 저장되는 공간이 HDD라면 수정을 해야하는 부분도 있습니다

우선 지금은 이대로 기본 설치를 진행하시고 나중에 다듬으시면 됩니다

 

접속 포트 2282 포트는 임의대로 수정 하셔도 됩니다

겹치지 않는 포트로 수정 해주세요

 

아 참고로 도커 컨테이너는 가상 환경에서 실행된다고 생각하시면 됩니다

컨테이너를 삭제하면 모든 파일들이 함께 제거가 되죠

 

그래서 실제 볼륨과 연결을 해서 컨테이너가 삭제가 되더라도 파일이 남아있게 하는 겁니다

파일이 남아있으면 다시 컨테이너를 생성할 때 경로만 그대로 연결 해주면 기존 데이터들이 그대로 인식 되거든요

가끔 컨테이너 삭제나 프로젝트 정리 했더니 다 날아갔다 라고 하시는 분들은 

이 경로 연결이 제대로 안된 겁니다

 

경로 연결을 하려면 읽기 쓰기 권한이 있어야 하고 docker 폴더는 별다른 설정없이 대부분 가능하지만

다른 폴더는 이 권한이 없다면 기록이 안되고 컨테이너를 삭제했을 때 다 날아가는 거죠

 

그러니 컨테이너를 생성하고 실행 후에 폴더에 실제로 파일들이 생성 됐는지 확인을 하셔야 합니다

제대로 파일이 기록되고 읽을 수 있을 때 자료들을 업로드 하시거나 설정을 하시면 됩니다

 

image.png

이제 프로젝트 생성 창에서 다음다음 눌러주시고 완료를 눌러주세요

 

 

image.png

별다른 문제가 없다면 컴포즈 내용대로 필요한 이미지를 다운 받고

 

image.png

컨테이너들이 생성 됩니다

 

image.png

프로젝트가 제대로 만들어 졌네요

 

 

image.png

프로젝트 이름인 immich를 클릭했을 때 

네 개의 컨테이너가 제대로 실행 되고 있다면 설치가 완료 된 겁니다

 

이제 서버아이피:2282 로 접속을 하시면

 

 

image.png

이런 화면과 함께 이미치를 시작 하실 수 있습니다

 

이후 설정 부분은 다른 이미치 가이드들을 참고하시면 되겠습니다

 

업데이트 부분은 수동 업데이틀 해줘야 하지만

귀찮아서 IDIM이라는 서비스를 만들었습니다

 

https://svrforum.com/nas/2071086

IDIM (Immich Docker Image Manager) – 서버포럼

위 링크 글을 참고 해주세요

 

아니면 컨테이너 매니저에서 프로젝트 정리 후 이미지를 수동으로 삭제하시고

프로젝트 재빌드를 하셔도 됩니다

 

그럼 새로 설치하시는 분들 문제 없이 잘 빌드 되길 바랍니다

긴 글 읽으시느라 고생 하셨습니다

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다