13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] Jellyfin

  • [Nas] Jellyfin 트랜스코딩 성능 벤치마크: N100 미니PC vs Ryzen 5700G NAS

    [Nas] Jellyfin 트랜스코딩 성능 벤치마크: N100 미니PC vs Ryzen 5700G NAS

    안녕하세요, 13년차 서버실 지킴이입니다. 😅 요즘 홈랩에서 미디어 서버 가지고 씨름하는 재미에 푹 빠져 있네요. 다들 Plex나 Emby 많이 쓰시겠지만, 저는 오픈소스의 매력에 빠져 Jellyfin을 열심히 굴리고 있습니다. 개인 미디어 라이브러리를 구축하고 언제 어디서든 원하는 콘텐츠를 스트리밍하는 건 정말 매력적인 일이거든요.

    근데 여기서 늘 고민되는 부분이 있죠? 바로 트랜스코딩(Transcoding) 성능입니다. 원본 파일을 그대로 재생할 수 없는 기기(낮은 대역폭, 특정 코덱 미지원 등)에서 미디어를 보려면, 서버에서 실시간으로 변환해줘야 하거든요. 이 과정이 서버에 꽤나 큰 부하를 줍니다.

    그래서 제가 직접 한번 비교해봤습니다. 요즘 가성비 미니PC로 핫한 N100 미니PC와, 제가 주력으로 쓰는 Ryzen 5700G 기반의 NAS에서 Jellyfin 트랜스코딩 성능이 얼마나 차이 나는지 말이죠. 혹시 어떤 하드웨어로 미디어 서버를 구축할지 고민 중이셨다면, 오늘 제 삽질 경험과 벤치마크 결과가 작은 힌트가 될 거예요! 함께 보시죠. 🚀

    N100 미니PC와 Ryzen 5700G NAS를 활용한 Jellyfin 미디어 서버 홈랩 아키텍처 다이어그램

    N100 미니PC와 Ryzen 5700G NAS를 활용한 Jellyfin 미디어 서버 홈랩 아키텍처 다이어그램

    💡 Jellyfin 트랜스코딩, 왜 중요할까요?

    자, 먼저 트랜스코딩(Transcoding)이 뭔지 쉽게 설명해 드릴게요. 쉽게 말해, ‘실시간 동영상 변환’이라고 생각하시면 됩니다. 우리가 스마트폰으로 4K 고화질 영화를 보려고 하는데, 인터넷 회선이 느리거나 스마트폰이 4K HEVC(H.265) 코덱을 제대로 지원하지 못할 때가 있잖아요? 이럴 때 Jellyfin 서버가 ‘아, 알겠어! 그럼 이 4K HEVC 영상을 1080p H.264로 바꿔서 보내줄게!’ 하고 실시간으로 변환해서 보내주는 게 바로 트랜스코딩입니다.

    이 과정이 중요한 이유는, 모든 기기가 모든 코덱과 해상도를 지원하지 않기 때문이에요. 특히 외부에서 접속할 때는 네트워크 대역폭 문제로 트랜스코딩이 필수적일 때가 많습니다. 문제는 이 변환 작업이 CPU 자원을 엄청나게 잡아먹는다는 점이죠. 그래서 우리는 하드웨어 트랜스코딩(Hardware Transcoding)에 주목해야 합니다.

    하드웨어 트랜스코딩은 CPU가 아닌 GPU(Graphics Processing Unit)에 내장된 전용 인코더와 디코더를 활용해서 처리하는 방식입니다. 인텔 CPU의 Quick Sync Video (QSV)나 AMD CPU의 Video Core Next (VCN) 같은 기술들이 여기에 해당하죠. 이 기능을 활용하면 CPU 부하를 획기적으로 줄이고, 훨씬 많은 동시 스트림을 처리할 수 있게 됩니다. Jellyfin은 이러한 하드웨어 가속 기능을 아주 잘 지원하는 고마운 미디어 서버입니다. 🎉

    🛠️ 실전 구현: Jellyfin 벤치마크 환경 구성

    본격적인 벤치마크를 위해 두 가지 시스템에 Jellyfin을 설치하고 설정해봤습니다. 둘 다 리눅스 기반 환경에서 Docker 컨테이너로 Jellyfin을 운영했습니다.

    1. N100 미니PC 환경

    • 프로세서: Intel N100 (4코어, 4스레드)
    • 내장 GPU: Intel UHD Graphics (Quick Sync Video 지원)
    • RAM: 16GB DDR5
    • OS: Ubuntu Server 22.04 LTS
    • Jellyfin 설치: Docker Compose

    N100은 저전력 프로세서로 유명하죠. 하지만 Quick Sync Video 덕분에 미디어 트랜스코딩 성능은 예상외로 꽤나 괜찮더라고요. 특히 전성비(전력 대비 성능)가 아주 훌륭합니다.

    2. Ryzen 5700G NAS 환경

    • 프로세서: AMD Ryzen 7 5700G (8코어, 16스레드)
    • 내장 GPU: Radeon Graphics (Video Core Next, VCN 지원)
    • RAM: 32GB DDR4
    • OS: Unraid OS (내부적으로 Linux 기반)
    • Jellyfin 설치: Docker Compose

    Ryzen 5700G는 CPU 성능도 강력하고, 내장 그래픽 성능도 꽤 괜찮아서 다재다능한 NAS 구축에 인기가 많죠. 과연 Jellyfin 트랜스코딩 성능에서는 어떤 모습을 보여줄까요?

    Jellyfin Docker 설치 및 하드웨어 가속 설정 (공통)

    기본적인 Jellyfin Docker Compose 설정은 다음과 같습니다. 하드웨어 가속을 사용하려면 /dev/dri 장치를 컨테이너에 매핑해주는 것이 핵심입니다.

    version: "3.8"
    services:
      jellyfin:
        image: jellyfin/jellyfin:latest
        container_name: jellyfin
        network_mode: host
        volumes:
          - /path/to/jellyfin/config:/config
          - /path/to/jellyfin/cache:/cache
          - /path/to/your/media:/media
          # 하드웨어 가속을 위한 장치 매핑
          - /dev/dri:/dev/dri
        devices:
          # 추가적으로 디바이스 직접 매핑 (N100/Intel QSV의 경우 필수)
          - /dev/dri/renderD128:/dev/dri/renderD128
          - /dev/dri/card0:/dev/dri/card0
        restart: unless-stopped
        environment:
          - PUID=1000
          - PGID=1000
          - TZ=Asia/Seoul
          # 추가적인 환경 변수 (예: NVIDIA GPU 사용 시)
          # - NVIDIA_VISIBLE_DEVICES=all
          # - NVIDIA_DRIVER_CAPABILITIES=all
    

    Jellyfin 웹 UI에 접속한 후, 관리자 대시보드 > 재생(Playback) 설정에서 하드웨어 가속 옵션을 선택해야 합니다. N100은 VAAPI를, Ryzen 5700G는 AMF 또는 VAAPI를 선택하고 선호하는 인코더/디코더를 설정해줍니다.

    Jellyfin 미디어 서버의 하드웨어 트랜스코딩 설정 화면 예시

    Jellyfin 미디어 서버의 하드웨어 트랜스코딩 설정 화면 예시

    ⚠️ 주의사항 및 트러블슈팅: 삽질은 나의 힘!

    제가 이 과정에서 겪었던 삽질 경험을 솔직하게 공유해 드릴게요. 😭

    1. 드라이버 문제: 하드웨어 가속은 단순히 장치를 매핑한다고 끝나는 게 아닙니다. 리눅스 환경에서 해당 GPU를 위한 드라이버와 라이브러리가 제대로 설치되어 있어야 하거든요.
      • N100 (Intel QSV): intel-media-va-driver-non-free (Debian/Ubuntu 계열) 패키지 설치가 필수였습니다. 처음엔 이것 때문에 VAAPI가 제대로 작동하지 않아서 ‘N100이 생각보다 별로인가?’ 하고 좌절했었죠. 🤦
      • Ryzen 5700G (AMD VCN): AMD는 인텔보다 드라이버 세팅이 까다로운 경우가 종종 있더라고요. mesa-va-drivers 같은 VAAPI 관련 패키지는 물론이고, 커널 모듈 (amdgpu)이 제대로 로드되어 있는지 확인해야 합니다. Unraid 같은 OS는 기본적으로 잘 세팅되어 있지만, 순수 Ubuntu에서는 조금 더 신경 써야 할 수 있어요.
    2. 권한 문제: Docker 컨테이너가 /dev/dri 장치에 접근할 권한이 없어서 문제가 발생하기도 합니다. Docker Compose 파일에 devices 섹션을 추가하고, 호스트 시스템에서 Jellyfin을 실행하는 사용자(PUID/PGID)가 video 그룹에 속해 있는지 확인하는 것이 중요합니다.
    3. 코덱 지원: 모든 GPU가 모든 코덱을 하드웨어 가속으로 지원하는 건 아닙니다. 특히 VP9, AV1 같은 최신 코덱이나 10비트 HEVC 같은 특정 포맷은 하드웨어 지원 여부를 확인해야 합니다. 제가 주로 테스트한 4K HEVC -> 1080p H.264 변환은 대부분의 최신 GPU에서 잘 지원하더라고요.

    이런 문제들 때문에 밤늦게까지 구글링하고 포럼을 뒤적거렸던 기억이 생생하네요. 😅 하지만 해결하고 나면 그 성취감이란! 여러분은 저처럼 삽질하지 마시라고 이렇게 자세히 적어봅니다. 💪

    📊 Jellyfin 트랜스코딩 벤치마크 검증 및 결과

    본격적인 벤치마크는 다음과 같은 방식으로 진행했습니다.

    • 테스트 파일: 4K HEVC (H.265) 10비트 영상
    • 트랜스코딩 목표: 1080p H.264
    • 측정 방법: 여러 클라이언트에서 동시에 스트리밍을 시작하며, 각 서버의 CPU 및 GPU 사용률, 그리고 버퍼링 발생 여부 확인
    • 모니터링 도구: htop (CPU), intel_gpu_top (N100 GPU), radeontop (Ryzen 5700G GPU), Jellyfin 대시보드 로그

    N100 미니PC 결과

    예상보다 훨씬 뛰어난 성능을 보여줬습니다! N100의 Intel Quick Sync Video는 정말 대단하더군요. 3개 정도의 4K HEVC -> 1080p H.264 동시 트랜스코딩은 무리 없이 소화해냈습니다. GPU 사용률은 70~80% 정도로 올라갔지만, CPU 사용률은 20~30% 정도로 매우 낮게 유지되면서 안정적인 스트리밍을 제공했습니다. 4개 스트림부터는 가끔 버퍼링이 발생하기 시작했거든요.

    저전력 미니PC에서 이 정도 성능이라니, 정말 인상 깊었습니다. 전력 소모도 아이들 시 10W 내외, 트랜스코딩 시 20W 내외로 매우 착했습니다. 💡

    Ryzen 5700G NAS 결과

    역시 Ryzen 5700G는 강력했습니다. 5~6개 정도의 4K HEVC -> 1080p H.264 동시 트랜스코딩도 거뜬히 처리했습니다. GPU 사용률은 50~60% 수준에서 안정적이었고, CPU 사용률도 N100과 마찬가지로 낮게 유지되었습니다. 7개 이상부터는 간헐적인 버퍼링이 발생하기 시작했거든요.

    N100보다 더 많은 동시 스트림을 처리할 수 있었고, 여전히 CPU 자원에 여유가 있어서 다른 NAS 작업(가상 머신, 다른 Docker 컨테이너 등)을 병행하기에도 충분했습니다. 다만, 전력 소모는 아이들 시 30W 내외, 트랜스코딩 시 50~60W 정도로 N100보다는 높았습니다.

    정리하자면 다음과 같습니다.

    Jellyfin 트랜스코딩 N100과 Ryzen 5700G의 동시 스트림 및 CPU/GPU 사용률 비교 그래프

    Jellyfin 트랜스코딩 N100과 Ryzen 5700G의 동시 스트림 및 CPU/GPU 사용률 비교 그래프

    마무리: 당신의 선택은?

    자, 이제 결론을 내릴 시간입니다. 어떤 시스템이 더 좋은 선택일까요?

    특성 N100 미니PC Ryzen 5700G NAS
    트랜스코딩 성능 (동시 스트림) 3~4개 (4K HEVC -> 1080p H.264) 5~6개 이상 (4K HEVC -> 1080p H.264)
    전력 소모 매우 낮음 (아이들 10W, 풀로드 20W 내외) 보통 (아이들 30W, 풀로드 50~60W 내외)
    가격 저렴 (10~20만원대) 높음 (30만원 이상, NAS 구성 시 더 높음)
    다용도성 Jellyfin 전용 미디어 서버로 최적 Jellyfin + NAS + VM 등 다용도 서버로 최적
    주요 장점 압도적인 전성비, 저렴한 구축 비용 강력한 CPU 성능, 높은 동시 스트림 처리, 높은 확장성
    추천 대상 1~3인 가구, 전력 소모에 민감한 사용자 3인 이상 가구, 다양한 서버 기능 원하는 사용자

    개인적인 생각으로는, 순수하게 Jellyfin 미디어 서버만을 위한 시스템을 구축한다면 N100 미니PC의 가성비와 전성비는 정말 타의 추종을 불허하더라고요. 저렴한 가격에 이 정도 성능을 뽑아준다는 건 정말 놀라운 일입니다. 혼자 또는 가족과 함께 사용하는 미디어 서버로는 충분하고도 남습니다.

    하지만 만약 NAS에 더 많은 기능(파일 서버, 백업, 가상 머신, 다른 Docker 서비스 등)을 올리고 싶고, 동시 스트림 사용자 수가 많다면 Ryzen 5700G 같은 더 강력한 프로세서가 탑재된 NAS가 좋은 선택이 될 거예요. 저처럼 홈랩에서 이것저것 실험하는 분들에게는 이쪽이 더 매력적일 수 있습니다.

    이번 벤치마크를 통해 하드웨어 가속의 중요성을 다시 한번 깨달았더라고요. 그리고 드라이버 세팅의 중요성도요! 😅 여러분도 자신의 환경과 예산에 맞춰 현명한 선택을 하시길 바랍니다. 다음번에는 Jellyfin과 Emby의 좀 더 심층적인 비교 분석으로 찾아올게요! 그때까지 즐거운 홈랩 생활 되세요! 👋

    N100 미니PC와 Ryzen 5700G NAS의 Jellyfin 미디어 서버 장단점 비교 인포그래픽

    N100 미니PC와 Ryzen 5700G NAS의 Jellyfin 미디어 서버 장단점 비교 인포그래픽

  • [NAS] Docker 컨테이너 5가지 비교 및 설치 가이드: Portainer부터 Vaultwarden까지

    NAS에 Docker 설치했는데, 뭘 올려야 할지 모르겠다고요?

    저도 처음에 딱 그랬거든요. Synology NAS에 Docker(도커, 컨테이너 기반 가상화 플랫폼)를 설치하고 나서 한참 멍하니 화면만 바라봤었어요. “이제 뭘 하지?” 하는 느낌 있잖아요. 근데 막상 하나씩 써보기 시작하니까, 진짜 NAS가 단순한 저장소에서 홈 서버로 완전히 탈바꿈하더라고요.

    이 글에서는 제가 13년 넘게 인프라를 운영하면서, 홈랩에서 실제로 돌려보고 “이건 진짜 쓸 만하다”고 느낀 NAS Docker 활용을 위한 인기 컨테이너 5가지를 비교하고 설치 방법까지 정리해 드릴게요. 특히 Docker 컨테이너를 처음 다루는 분들께 도움이 될 거예요.

    ▲ NAS 위에 Docker 컨테이너들이 올라가는 전체 구조 — 하나의 NAS가 여러 서비스를 동시에 제공합니다

    NAS Docker, 왜 써야 하나요?

    쉽게 말해, Docker는 “앱을 격리된 박스 안에 담아서 실행하는 기술”이에요. NAS에서 Docker를 활용하면 이런 게 가능해집니다:

    • 기존 NAS OS(DSM 등)에 영향 없이 별도 앱을 설치
    • 설치/삭제가 깔끔하고 충돌이 거의 없음
    • 오픈소스 서비스를 공식 패키지 없이도 자유롭게 설치
    • 업데이트, 백업, 이전이 훨씬 편함

    Synology NAS에서는 DSM의 패키지 센터에서 “Container Manager”라는 이름으로 Docker를 설치할 수 있어요. QNAP은 “Container Station”이라는 이름으로 제공하고 있고요. 둘 다 GUI(그래픽 인터페이스)를 제공하지만, 저는 개인적으로 SSH 터미널로 직접 명령어를 치는 게 훨씬 편하더라고요. 설정 파일도 관리하기 좋고요.

    NAS Docker 인기 컨테이너 5가지 비교

    일단 전체 비교를 한눈에 보고 시작하는 게 좋을 것 같아서 표로 정리했어요.

    컨테이너 카테고리 주요 용도 리소스 사용 난이도
    Portainer 관리 도구 Docker 컨테이너 GUI 관리 매우 낮음 ⭐ 쉬움
    Nginx Proxy Manager 리버스 프록시 도메인/SSL 인증서 관리 낮음 ⭐⭐ 보통
    Jellyfin 미디어 서버 영상/음악 스트리밍 중간~높음 ⭐⭐ 보통
    Nextcloud 클라우드 스토리지 자체 클라우드 저장소 구축 중간 ⭐⭐⭐ 어려움
    Vaultwarden 비밀번호 관리 Bitwarden 호환 셀프호스트 매우 낮음 ⭐⭐ 보통

    이제 하나씩 살펴볼게요. 각 컨테이너별 설치 명령어도 함께 드릴게요.

    1. Portainer — Docker 관리의 시작점

    Portainer는 Docker 컨테이너를 웹 브라우저에서 GUI로 관리할 수 있게 해주는 도구예요. NAS Docker를 시작하는 분들한테 제일 먼저 추천하는 거거든요. 설치도 제일 쉽고, 이게 있으면 나머지 컨테이너 관리가 훨씬 편해지니까요.

    실제로 써보니까, 어떤 컨테이너가 얼마나 CPU/메모리를 쓰는지 한눈에 보이고, 로그도 바로 확인할 수 있어서 문제 해결할 때 정말 유용하더라고요. 특히 컨테이너가 자동으로 재시작되지 않을 때 원인을 빨리 찾을 수 있어요.

    Portainer 설치 명령어

    # Portainer 데이터 저장용 볼륨 생성
    docker volume create portainer_data
    
    # Portainer 컨테이너 실행
    docker run -d \
      -p 8000:8000 \
      -p 9443:9443 \
      --name portainer \
      --restart=always \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v portainer_data:/data \
      portainer/portainer-ce:latest

    설치 후 https://NAS-IP:9443으로 접속하면 초기 설정 화면이 뜹니다. 관리자 계정을 만들고 나면 끝이에요. 진짜 간단해요.

    💡 팁: Synology의 Container Manager를 쓰고 있더라도 Portainer를 함께 올려놓으면 훨씬 세밀한 관리가 가능합니다. 두 도구를 병행해도 충돌이 없거든요.

    2. Nginx Proxy Manager — 도메인과 SSL을 한 방에

    이건 제가 홈랩에서 정말 애용하는 Docker 컨테이너예요. Nginx Proxy Manager는 리버스 프록시(외부 요청을 내부 서비스로 전달해주는 역할)를 GUI로 쉽게 설정하고, Let’s Encrypt SSL 인증서까지 자동으로 발급·갱신해줘요.

    처음엔 “리버스 프록시가 뭔데?” 싶었는데, 쉽게 말하면 이런 거예요. jellyfin.내도메인.com, nextcloud.내도메인.com 이렇게 서브도메인마다 다른 서비스로 연결해주는 교통 정리 역할이에요. HTTPS(암호화 통신)도 자동으로 붙여주고요.

    Nginx Proxy Manager docker-compose 설정

    version: '3.8'
    services:
      app:
        image: 'jc21/nginx-proxy-manager:latest'
        container_name: nginx-proxy-manager
        restart: unless-stopped
        ports:
          - '80:80'
          - '81:81'   # 관리 웹 UI 포트
          - '443:443'
        volumes:
          - ./data:/data
          - ./letsencrypt:/etc/letsencrypt

    위 내용을 docker-compose.yml 파일로 저장하고 아래 명령어를 실행하면 됩니다:

    docker compose up -d

    설치 후 http://NAS-IP:81로 접속하면 관리 UI가 뜨고요. 초기 계정은 [email protected] / changeme인데, 로그인하자마자 바로 바꿔야 해요. ⚠️ 이거 그냥 두면 정말 위험합니다. 누구나 접속해서 설정을 바꿀 수 있거든요.

    ▲ Nginx Proxy Manager에서 프록시 호스트를 추가하고 SSL 인증서를 자동 발급하는 화면

    3. Jellyfin — 나만의 미디어 서버 만들기

    Jellyfin은 오픈소스 미디어 서버예요. Plex와 비슷한데, 완전 무료에 계정 없이도 쓸 수 있다는 게 큰 장점이에요. NAS에 쌓아둔 영화, 드라마, 음악을 스마트TV, 폰, 태블릿에서 스트리밍할 수 있거든요.

    제가 직접 써보니까, 자막 자동 검색 기능이랑 메타데이터(영화 포스터, 줄거리 등) 자동 수집이 꽤 잘 되더라고요. 다만 하드웨어 트랜스코딩(영상 포맷 변환)은 NAS CPU/GPU 성능에 따라 다르니까 이 부분은 좀 알아보고 써야 해요.

    Jellyfin docker-compose 설정

    version: '3.8'
    services:
      jellyfin:
        image: jellyfin/jellyfin:latest
        container_name: jellyfin
        restart: unless-stopped
        ports:
          - '8096:8096'
        volumes:
          - ./config:/config
          - ./cache:/cache
          - /volume1/media:/media:ro  # NAS 미디어 폴더 경로로 수정하세요
        environment:
          - TZ=Asia/Seoul

    ⚠️ 주의사항: /volume1/media 경로는 본인 NAS의 실제 미디어 폴더 경로로 반드시 바꿔야 합니다. Synology 기준으로는 보통 /volume1/ 아래에 있어요.

    4. Nextcloud — 나만의 클라우드 저장소 구축

    Nextcloud는 자체 클라우드 스토리지를 구축할 수 있는 오픈소스 플랫폼이에요. 구글 드라이브, 드롭박스 같은 서비스를 내 NAS 위에 직접 올리는 거라고 보면 돼요. 파일 공유, 캘린더, 연락처, 노트 등 다양한 기능을 제공해요.

    솔직히 말하면, 다섯 가지 중에 설치가 제일 까다롭습니다. 저도 처음에 삽질을 좀 했어요. 데이터베이스(MariaDB 또는 PostgreSQL)를 함께 올려야 하거든요.

    Nextcloud + MariaDB docker-compose 설정

    version: '3.8'
    services:
      db:
        image: mariadb:10.11
        container_name: nextcloud-db
        restart: unless-stopped
        environment:
          - MYSQL_ROOT_PASSWORD=강력한루트비밀번호
          - MYSQL_DATABASE=nextcloud
          - MYSQL_USER=nextcloud
          - MYSQL_PASSWORD=강력한비밀번호
        volumes:
          - ./db:/var/lib/mysql
    
      nextcloud:
        image: nextcloud:latest
        container_name: nextcloud
        restart: unless-stopped
        ports:
          - '8080:80'
        depends_on:
          - db
        environment:
          - MYSQL_HOST=db
          - MYSQL_DATABASE=nextcloud
          - MYSQL_USER=nextcloud
          - MYSQL_PASSWORD=강력한비밀번호
          - TZ=Asia/Seoul
        volumes:
          - ./data:/var/www/html

    ⚠️ 꼭 확인하세요: 비밀번호는 절대 예시 그대로 쓰지 마세요. 복잡한 문자열로 바꿔야 해요. 그리고 Nextcloud는 신뢰된 도메인(trusted_domain) 설정을 별도로 해줘야 외부에서 접속이 돼요. 처음 설치하고 나서 “Access through untrusted domain” 오류가 뜨면 config/config.php 파일에서 trusted_domains 항목을 수정해줘야 합니다.

    5. Vaultwarden — 비밀번호 관리, 직접 호스팅하기

    Vaultwarden은 Bitwarden과 호환되는 비밀번호 관리 서버를 셀프호스팅할 수 있게 해주는 프로젝트예요. Bitwarden 공식 서버 대신 내 NAS에서 직접 돌리는 거라고 보면 돼요.

    이거 설치하고 나서 진짜 감탄했어요. 리소스를 엄청 적게 먹으면서도, Bitwarden 공식 앱이나 브라우저 확장 프로그램을 그대로 연결해서 쓸 수 있거든요. 비밀번호가 내 서버에만 저장되니까 보안 측면에서도 마음이 편하고요.

    Vaultwarden docker-compose 설정

    version: '3.8'
    services:
      vaultwarden:
        image: vaultwarden/server:latest
        container_name: vaultwarden
        restart: unless-stopped
        ports:
          - '8888:80'
        volumes:
          - ./vw-data:/data
        environment:
          - TZ=Asia/Seoul
          - SIGNUPS_ALLOWED=true  # 초기 계정 생성 후 false로 변경 권장

    💡 중요 포인트: Vaultwarden은 반드시 HTTPS 환경에서만 제대로 동작해요. 앞서 설치한 Nginx Proxy Manager와 조합해서 SSL을 붙여줘야 합니다. HTTP로는 브라우저 확장 프로그램 연결이 안 되더라고요. 저도 이거 몰라서 한참 헤맸었어요.

    ▲ Portainer에서 5개의 컨테이너가 모두 정상 실행(Running) 상태인 것을 확인하는 화면

    ⚠️ NAS Docker 활용 시 자주 겪는 문제들

    포트 충돌 문제

    NAS 앱 설치를 많이 해두셨다면, 포트 번호가 겹칠 수 있어요. 예를 들어 Synology의 기본 웹 서비스가 80, 443 포트를 이미 쓰고 있을 수 있거든요. 이럴 때는 컨테이너의 호스트 포트 번호를 바꿔주면 됩니다. 8080:80처럼 앞 숫자(호스트 포트)를 안 쓰는 번호로 바꿔주세요.

    볼륨 권한 문제

    NAS에서 Docker 볼륨을 마운트할 때 권한 오류가 나는 경우가 꽤 있어요. 특히 Synology에서 Permission denied 오류가 뜨면, 해당 폴더의 소유자와 권한을 확인해보세요.

    # 폴더 소유자 확인
    ls -la /volume1/docker/
    
    # 권한 수정 (예시)
    chown -R 1000:1000 /volume1/docker/nextcloud/

    메모리 부족

    NAS 램이 4GB 이하라면, 컨테이너를 너무 많이 올리면 전체 시스템이 느려질 수 있어요. 특히 Nextcloud + MariaDB 조합은 생각보다 메모리를 좀 먹거든요. 처음에는 2~3개부터 시작하는 걸 추천드려요.

    설치 전 체크리스트

    1. NAS에 Docker(Container Manager 또는 Container Station) 설치 완료 확인
    2. SSH 접속 활성화 (명령어 방식 사용 시)
    3. Docker 저장 경로 설정 — 가급적 빠른 볼륨(SSD 캐시 있는 풀)에 배치
    4. 포트 충돌 여부 사전 확인
    5. 외부 접속 필요 시 공유기 포트포워딩 설정
    6. 도메인 보유 여부 확인 (Nginx Proxy Manager, Vaultwarden 사용 시 필요)

    ▲ NAS Docker 인기 컨테이너 5가지 용도, 난이도, 리소스 사용량 한눈에 비교

    자주 묻는 질문 (FAQ)

    Q. Synology NAS에서 Docker를 못 쓰는 모델이 있나요?

    네, 있어요. Synology 기준으로 Intel/AMD x86-64 아키텍처 모델에서만 Container Manager(Docker)가 지원됩니다. ARM 기반의 일부 보급형 모델(J 시리즈 등)은 지원이 제한될 수 있으니, 설치 전에 Synology 공식 호환성 페이지에서 확인해보세요.

    Q. docker-compose 명령어가 안 먹혀요.

    최신 Docker에서는 docker-compose(하이픈 있는 구버전) 대신 docker compose(공백, 플러그인 방식)를 사용해요. 둘 다 안 된다면 Docker Compose 플러그인이 설치됐는지 확인해보세요.

    Q. 컨테이너가 재부팅 후 자동 시작이 안 돼요.

    restart: unless-stopped 옵션이 docker-compose에 들어있는지 확인하세요. 명령어 방식으로 실행했다면 --restart=unless-stopped 옵션을 추가해야 합니다.

    NAS Docker 활용, 이렇게 시작하세요

    오늘 소개한 다섯 가지 컨테이너 중에서 처음 시작하는 분들께는 이 순서를 추천드려요:

    1. Portainer 먼저 설치 → Docker 전체 현황 파악
    2. Nginx Proxy Manager 설치 → 도메인/SSL 환경 구축
    3. 그다음 원하는 서비스(Jellyfin, Nextcloud, Vaultwarden) 순서대로 추가

    처음부터 다 설치하려고 하면 꼬이기 쉬워요. 저도 처음에 욕심 부리다가 포트 다 꼬이고 한참 삽질했거든요. 하나씩 안정화시키면서 늘려가는 게 훨씬 낫더라고요.

    Docker Compose를 사용하면 설정 파일 하나로 관리가 되니까, 처음부터 compose 방식에 익숙해지는 걸 강력히 권장합니다. 나중에 마이그레이션이나 백업할 때 훨씬 편해요.

    다음 글에서는 Nginx Proxy Manager와 Let’s Encrypt를 연동해서 외부에서 안전하게 홈서버에 접속하는 방법을 더 자세히 다룰 예정이에요. 이 글에서 설치한 컨테이너들을 외부에서 HTTPS로 접근하게 만드는 실전 가이드가 될 거예요. 🎉

    궁금한 점이나 삽질 경험 있으시면 댓글로 나눠주세요. 같이 해결해봐요!