Proxmox LXC로 트랜스코딩되는 Plex , Immich 구축하기

 안녕하세요. 달소입니다.

 

이번글에서는 proxmox LXC를 활용해서 트랜스코딩이 되는 Plex와 Immich 환경을 구성해보도록하겠습니다.

 

Plex와 Immich에 대해서는 많이들 아실듯하니 생략합니다.

*Plex : 영상 관리

*Immich : 사진관리

 

tteck의 스크립트를 사용하면 내장그래픽(igpu)을 공유하는 Plex LXC를 손쉽게 만들수있고 여기에 Docker로 Immich를 올려서 사진관리까지 함께하고자 하는 용도입니다.

 

 

Plex LXC 생성하기

tteck의 스크립트를 사용해서 간단하게 Plex LXC를 생성합니다.

 

Proxmox VE Helper-Scriptstteck.github.ioScripts for Streamlining Your Homelab with Proxmox VE 

 

bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/plex.sh)"

 

image.png.jpg

 

image.png.jpg

 

Ubuntu 22

 

image.png.jpg
image.png.jpg

여기서 NFS에 연결할것이라면 Privileged로 선택하셔야합니다.

저같은경우 Data는 헤놀에 연결할거라서 Privileged로 선택했습니다.

image.png.jpg
image.png.jpg
image.png.jpg

 

image.png.jpg
image.png.jpg
image.png.jpg
image.png.jpg
image.png.jpg

 

네트워크는 dhcp로 하고 다 나머지는 기본으로했습니다.

 

image.png.jpg

 

설치과정도 나오게해서 잘보입니다 ㅎㅎ

igpu도 잘 찾은걸로 보이네요

image.png.jpg

 

이제 해당 ip:32400/web으로 접속하시면 plex는 잘되실겁니다.

 

image.png.jpg

 

 n100 igpu lxc + plex hw트랜스코딩 성공[서버 구축(Self-Hosted)] 달소 2024.06.30오랜만에 plex를 설치해서 테스트했는데 tteck님 스크립트로 잘되네요. bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/plex.sh)" 아래 명령어로 내장그래픽이 잘 활성화 됐는지 확인해볼 수 ... 

 

 

Immich 설치

immich도 내장그래픽을 사용하기위해서 위 plex 스크립트를 사용했기때문에 ㅎㅎ

docker 설치 후 immich 설치도 진행해보겠습니다.

 

아래는 immich의 트랜스코딩에 대한 설명입니다.

Hardware Transcoding [Experimental] | Immichimmich.appThis feature allows you to use a GPU to accelerate transcoding and reduce CPU load. 

 

도커는 아래 명령어로 설치합니다.

 

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

 

그리고 immich의 데이터를 보관할 디렉터리와 환경설정파일 docker-compose.yml파일도 만듭니다.

 

mkdir -p /data/immich
vi .env

 

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

# The location where your uploaded files are stored
UPLOAD_LOCATION=./library
# The location where your database files are stored
DB_DATA_LOCATION=./postgres

# 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

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secret for postgres. You should change it to a random password
DB_PASSWORD=postgres

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

 

 

image.png.jpg

 

전체 docker-compose.yml은 아래와같습니다.

 

#
# WARNING: 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
    devices:
      - /dev/dri:/dev/dri
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - 2283:3001
    depends_on:
      - redis
      - database
    restart: always

  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, openvino] 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://immich.app/docs/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always

  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine@sha256:328fe6a5822256d065debb36617a8169dbfbd77b797c525288e465f56c1d392b
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    healthcheck:
      test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command: ["postgres", "-c" ,"shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"]
    restart: always

volumes:
  model-cache:

 

image.png.jpg

 

이다음 ip:2283으로 접속해보시면 끝입니다.

 

image.png.jpg

 

일단은 여기까지가 끝입니다~~