Oracle Cloud Ubuntu VM Instance에 Plex Media Server 설치하기

안녕하세요. 미뇽입니다.

아이들 영어 공부를 위해 음원 파일들을 PC에 저장해두고 사용하는데, 막상 들으려고 하면 항상 PC를 챙겨야 하는 점이 번거롭게 느껴졌습니다. 무거운 PC를 들고 다니지 않아도, 언제 어디서든 어떤 기기에서나 쉽게 저장된 음원이나 영상을 듣고 볼 수 있는 환경을 만들고 싶다는 생각이 간절했죠.

이러한 고민을 해결해 줄 수 있는 것이 바로 개인 미디어 스트리밍 서버 구축입니다. 여러 솔루션 중에서도 Plex Media Server는 사용자 친화적인 인터페이스와 강력한 기능으로 많은 사랑을 받고 있는데요. Plex를 사용하면 나만의 미디어 라이브러리를 구축하고, 스마트폰, 태블릿, 스마트 TV 등 다양한 기기에서 스트리밍으로 즐길 수 있습니다.

오늘은 Oracle Cloud의 Ubuntu VM 인스턴스 환경에서 Docker를 활용하여 Plex Media Server를 쉽고 빠르게 설치하는 과정을 자세히 공유해 드리려고 합니다.

사전 준비 사항

Plex Media Server를 설치하기 전에 몇 가지 준비가 필요합니다. Oracle VM Instace와 plex 계정을 미리 준비해 주세요

Plex 서버 운영을 위한 디렉토리 생성

Plex Media Server가 사용할 설정 파일, 트랜스코딩(미디어 파일을 다른 형식으로 변환하는 과정) 시 필요한 임시 파일, 그리고 실제 미디어 파일들을 저장할 디렉토리를 호스트 VM에 미리 생성해야 합니다. 이 디렉토리들은 나중에 Docker 컨테이너에 볼륨으로 연결되어 데이터가 영구적으로 보존되도록 합니다.

터미널에서 다음 명령어를 실행하여 필요한 디렉토리를 생성합니다. $USER 부분은 현재 로그인된 사용자 계정으로 자동 치환됩니다. (예: ubuntu)

mkdir -p /home/$USER/plex/config
mkdir -p /home/$USER/plex/transcode
mkdir -p /home/$USER/plex/medias
  • /home/$USER/plex/config: Plex 서버의 설정 파일 및 데이터베이스 등이 저장될 경로입니다.
  • /home/$USER/plex/transcode: 미디어 트랜스코딩 시 사용될 임시 작업 공간입니다.
  • /home/$USER/plex/medias: 영화, 드라마, 음악, 사진 등 실제 미디어 파일들을 저장할 경로입니다. 이 경로 아래에 movies, tvshows, music 등 하위 폴더를 만들어 관리하면 편리합니다.

Plex Claim Code 발급받기

Plex Media Server를 처음 설정할 때 서버를 Plex 계정에 안전하게 연결하기 위해 Claim Code가 필요합니다.

  1. 웹 브라우저에서 https://plex.tv/claim 주소로 접속합니다.
  2. Plex 계정으로 로그인되어 있다면, 즉시 Claim Code가 발급됩니다.

⚠️ 주의사항:

  • Plex Claim Code를 발급받기 위해서는 반드시 plex.tv 계정으로 로그인되어 있어야 합니다.
  • 발급된 Claim Code는 유효 시간이 매우 짧습니다 (약 4~5분). 따라서 Docker 컨테이너 실행 직전에 발급받아 바로 사용하거나, 만약 시간이 초과되었다면 다시 발급받아야 합니다.

Docker Compose 파일을 이용한 Plex Media Server 설치

이제 Docker 컨테이너를 생성하고 실행하기 위해 docker-compose.yml 파일을 작성합니다. docker-compose는 여러 컨테이너를 정의하고 실행하는 복잡한 Docker 애플리케이션을 쉽게 관리할 수 있게 해주는 도구입니다.

선호하는 텍스트 편집기(예: nano, vim)를 사용하여 plex 관련 디렉토리(예: /home/$USER/plex/) 내에 docker-compose.yml 파일을 생성하고 아래 내용을 입력합니다.

services:
  plex:
    image: lscr.io/linuxserver/plex:latest
    container_name: plex
    network_mode: host
    environment:
      - PUID=1001          # 호스트의 사용자 ID (id 명령어로 확인)
      - PGID=1001          # 호스트의 그룹 ID (id 명령어로 확인)
      - TZ=Asia/Seoul      # 시간대 설정
      - PLEX_CLAIM=claim-xxxxxxxxxxxxxxxxx # 위에서 발급받은 Plex Claim Code
    volumes:
      - /home/ubuntu/plex/config:/config      # Plex 설정 및 데이터 저장 경로
      - /home/ubuntu/plex/transcode:/transcode # 트랜스코딩용 임시 디렉토리
      - /home/ubuntu/plex/medias:/media       # 미디어 라이브러리 경로
    restart: unless-stopped
  • image: lscr.io/linuxserver/plex:latest: 사용할 Plex Docker 이미지입니다. linuxserver.io 이미지는 안정적이고 관리가 용이하여 많이 사용됩니다.
  • container_name: plex: 생성될 컨테이너의 이름을 지정합니다.
  • network_mode: host: 컨테이너가 호스트의 네트워크 환경을 직접 사용하도록 설정합니다. 이렇게 하면 복잡한 포트 포워딩 설정 없이 Plex가 사용하는 기본 포트(32400)로 바로 접근할 수 있습니다.
  • environment: 컨테이너 환경 변수를 설정합니다.
    • PUIDPGID: 컨테이너 내에서 Plex 프로세스가 실행될 사용자 ID(PUID)와 그룹 ID(PGID)를 지정합니다. 이는 호스트에 생성한 디렉토리의 파일 접근 권한 문제를 방지하기 위해 중요합니다. 호스트 터미널에서 id 명령어를 실행하여 현재 사용자의 UID와 GID 값을 확인하고, 그 값을 입력합니다. Bashubuntu@developinstance:~/plex$ id uid=1001(ubuntu) gid=1001(ubuntu) groups=1001(ubuntu),4(adm),27(sudo)... 위 예시에서는 UID와 GID가 모두 1001이므로, PUID=1001, PGID=1001로 설정합니다.
    • TZ: 시간대를 Asia/Seoul로 설정합니다.
    • PLEX_CLAIM: 3단계에서 발급받은 Plex Claim Code를 입력합니다. (예: claim-AbcDef123GhIjkLmN4oP)
  • volumes: 호스트의 디렉토리와 컨테이너 내부의 디렉토리를 연결(마운트)합니다.
    • /home/ubuntu/plex/config:/config: 호스트의 설정 디렉토리를 컨테이너의 /config로 연결합니다. (경로의 ubuntu 부분은 실제 사용자 계정명에 맞게 수정해주세요.)
    • /home/ubuntu/plex/transcode:/transcode: 트랜스코딩 디렉토리를 연결합니다.
    • /home/ubuntu/plex/medias:/media: 미디어 파일 디렉토리를 컨테이너의 /media로 연결합니다. Plex 내에서 라이브러리를 설정할 때 이 /media 경로를 사용하게 됩니다.
  • restart: unless-stopped: Docker 데몬이 시작되거나, 컨테이너가 예기치 않게 종료되었을 때 사용자가 명시적으로 중지하지 않는 한 자동으로 컨테이너를 다시 시작하도록 설정합니다.

volumes 항목의 호스트 경로는 2단계에서 생성한 실제 경로와 일치해야 하며, 사용자 계정명(ubuntu) 부분도 본인의 환경에 맞게 수정해야 합니다.

Docker 컨테이너 실행 및 확인

docker-compose.yml 파일 작성이 완료되었다면, 해당 파일이 위치한 디렉토리에서 아래 명령어를 실행하여 Plex Media Server 컨테이너를 생성하고 백그라운드에서 실행합니다.

docker compose up -d

이 명령을 실행하면 Docker는 docker-compose.yml 파일에 정의된 대로 lscr.io/linuxserver/plex:latest 이미지를 다운로드하고(이미지가 로컬에 없는 경우), 설정에 맞게 컨테이너를 생성하여 실행합니다.

정상적으로 실행되면 다음과 유사한 메시지가 출력됩니다.

[+] Running 12/12
     ✔ plex Pulled             57.3s
   ✔ 14cb57f57702 Pull complete 16.5s
   ✔ e1cde46db0e1 Pull complete 16.8s
   ... (이미지 레이어 다운로드 완료 메시지들) ...
[+] Running 1/1
 ✔ Container plex  Started 1.6s

docker ps 명령어를 통해 plex 컨테이너가 정상적으로 실행 중인지 확인할 수 있습니다.

Oracle Cloud 방화벽 설정 (포트 32400 열기)

Plex Media Server는 웹 인터페이스 및 클라이언트 접속을 위해 기본적으로 TCP 포트 32400을 사용합니다. Oracle Cloud 환경에서는 VM 인스턴스가 속한 VCN(Virtual Cloud Network)의 NSG(Network Security Group) 또는 보안 목록(Security List) 에서 이 포트에 대한 인그레스(수신) 규칙을 추가하여 외부에서의 접속을 허용해야 합니다.

  • 프로토콜: TCP
  • 소스 유형: CIDR
  • 소스 CIDR: 0.0.0.0/0 (모든 IP에서 접속 허용) 또는 특정 IP 대역
  • 대상 포트 범위: 32400

Oracle Cloud에서 수신 규칙을 추가하는 자세한 방법은 이전에 제가 작성했던 ‘Oracle Cloud Instance에 수신 규칙 추가하기’ 관련 글을 참고해 주시기 바랍니다.

Plex Media Server 접속 및 초기 설정

모든 설정이 완료되었다면, 이제 웹 브라우저를 통해 Plex Media Server에 접속하여 초기 설정을 진행할 수 있습니다.

주소창에 http://<호스트 VM의 공인 IP 주소>:32400/web을 입력하고 접속합니다. (예: http://123.45.67.89:32400/web)

  1. 로그인: 이전에 생성했거나 Claim Code 발급 시 사용했던 Plex 계정으로 로그인합니다.
  2. 서버 이름 설정: Plex 서버의 이름을 지정하고, ‘외부에서 내 미디어에 액세스 허용’ 옵션이 선택되어 있는지 확인합니다.
  3. 미디어 라이브러리 추가: ‘라이브러리 추가’ 버튼을 클릭하여 영화, TV 프로그램, 음악, 사진 등 원하는 유형의 라이브러리를 생성합니다. 라이브러리 유형을 선택하고, ‘폴더 추가’를 클릭한 후 컨테이너 내부 경로인 /media 아래에 실제 미디어 파일이 있는 폴더를 지정합니다. (예: 영화 라이브러리의 경우 /media/movies 폴더 지정)
  4. 설정 완료: 필요한 라이브러리를 모두 추가했다면 ‘다음’ 및 ‘완료’ 버튼을 클릭하여 초기 설정을 마칩니다.

설정이 완료되면 Plex가 라이브러리에 추가된 미디어 파일들을 스캔하고 메타데이터(포스터, 줄거리, 출연진 정보 등)를 가져오기 시작합니다.

마무리

지금까지 Oracle Cloud Ubuntu VM 인스턴스에 Docker와 Docker Compose를 이용하여 Plex Media Server를 설치하고 기본 설정을 완료하는 과정을 상세히 살펴보았습니다. Docker를 활용하니 복잡한 설치 과정 없이 비교적 간편하게 강력한 개인 미디어 서버를 구축할 수 있었습니다.

이제 어디서든 PC, 스마트폰, 태블릿 등 다양한 기기를 통해 나만의 미디어 라이브러리에 접속하여 저장된 음원이나 영상을 편리하게 즐길 수 있게 되었습니다. 특히 아이들 교육용 미디어를 관리하고 활용하는 데 매우 유용할 것으로 기대됩니다.

읽어주셔서 감사합니다. 🙂

댓글 달기

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

위로 스크롤