60P by GN⁺ | ★ favorite | 댓글 19개
  • 소규모 하드웨어와 무료 클라우드 터널링을 결합해 미디어·AI·사진·모니터링 등 다양한 서비스를 자체 운영하는 홈랩 구축 사례 정리
  • OrangePI 5에서 시작해 GMKTec NUC(32GB RAM, 1TB NVMe)로 업그레이드하고, Hetzner 가상머신을 병행 운영하는 하이브리드 구조
  • 모든 서비스는 Docker 컨테이너로 실행되며, Ansible 역할(role) 기반 IaC와 SOPS 암호화로 재현성과 보안을 확보
  • Cloudflare Tunnel을 통해 인바운드 포트 개방 없이 외부 접근을 제공하고, Traefik + Authentik으로 리버스 프록시와 SSO 인증을 처리
  • 월 약 7유로의 운영 비용으로 벤더 종속 없이 데이터 소유권을 유지하며, 완벽보다 학습과 즐거움에 가치를 둠

하드웨어 구성

  • 초기에는 OrangePI 5를 사용했으나, 전원 관리 및 USB 연결 스토리지 문제로 GMKTec NUC로 전환
    • AMD Ryzen 7 5700U CPU, 32GB RAM, 1TB NVMe M2 스토리지 탑재
    • M2 슬롯 2개로 RAM과 디스크 모두 확장 가능
    • 연간 운영 기준 훨씬 안정적인 동작
  • 24/7 가동이 필요한 서비스는 Hetzner 가상머신에서 별도 운영
  • NAS는 아직 미구축이며, Syncthing으로 중요 데이터 동기화
    • Ugreen NAS, Ubiquiti 등에 관심은 있으나 현재는 직접 만지는 과정 자체를 더 즐기는 단계

운영 원칙

  • Infrastructure-as-Code: 가능한 모든 설정을 스크립트 또는 관리 플랫폼(Ansible 등)으로 자동화하고 코드로 저장
  • 재현성(Reproducibility): 장애 발생이나 머신 교체 시 인프라를 빠르게 재배포·재구성 가능해야 하며, 실험 서비스 제거 시에도 잔여물이 남지 않아야 함
  • 사용 편의성: 취미 프로젝트인 만큼 표준적이고 익숙한 접근 방식 선호

운영체제

  • Debian 배포판을 베어메탈에 직접 설치하여 사용
  • NixOS(재현 가능한 빌드)나 Talos(k8s 클러스터) 등도 고려했으나, 단일 머신에서의 k8s 워크로드 관리 부담과 시간 부족으로 보류
  • ProxMox 같은 하이퍼바이저도 불필요하다고 판단하여 미사용

네트워크 아키텍처

  • 외부 노출 방식으로 Cloudflare Tunnel 채택
    • 서버에서 Cloudflare 네트워크로 아웃바운드 전용 연결을 생성하므로 방화벽에서 인바운드 포트를 열 필요 없음
    • 터널 설정 후 양방향 트래픽이 터널을 통해 흐름
    • 도메인을 Cloudflare DNS에 연결하면 서브도메인별로 머신의 특정 포트·프로토콜(HTTP/HTTPS/TCP 등)에 매핑 가능
    • 완전 무료로 제공되며, ngrok보다 나은 대안으로 평가
  • 고정 IP(White IP) 방식은 비용과 보안 위험이 있고, Tailscale Funnel 등의 대안도 있으나 가장 간편한 솔루션으로 Cloudflare Tunnel 선택
  • Traefik

    • 오픈소스 리버스 프록시로, Docker를 네이티브로 인식하여 서버 자동화에 유리
    • 컨테이너에 적절한 라벨을 붙이면 자동으로 라우팅을 감지하여 별도 설정 파일 수정 불필요
  • Authentik

    • IdP(Identity Provider) 및 SSO 플랫폼
    • 설정을 블루프린트(YAML 파일) 형태로 저장할 수 있어 IaC 원칙 준수 가능
    • ForwardAuth 미들웨어를 통해 민감한 서비스에 접근 시 로그인 페이지로 리다이렉트

운영 도구

  • Ansible

    • 에이전트리스(SSH만 필요) 인프라 자동화 도구로, YAML 기반 설정과 풍부한 예제가 장점
    • 각 서비스를 역할(role) 단위로 정의: tasks, defaults, handlers, templates, files로 구성
      • tasks: 실행할 작업 정의
      • defaults: 이미지 태그, 포트, 컨테이너 이름 등 기본값
      • handlers: 설정 변경 시 컨테이너 재시작
      • templates: Jinja2 기반 .env 파일, config.yaml 렌더링
      • files: 정적 설정, 스크립트
    • 서비스 배포의 일반적 단계:
      • 공유 리소스(네트워크, 볼륨) 생성 → PostgreSQL에 스키마·사용자 생성 → 설정 템플릿 렌더링 → Docker 이미지 풀 → 컨테이너 실행(환경변수, 로깅 설정 포함) → Authentik 블루프린트에 인증 설정 프로비저닝 → 필요시 Cloudflare Tunnel 설정
    • 단점으로는 방대한 문서, 반복적인 DSL 구조와 보일러플레이트가 존재하나 익숙해서 계속 사용 중
    • GitOps 통합 없이 수동으로 플레이북 실행, 현재로서는 충분
  • SOPS (Secrets OPerationS)

    • YAML/JSON 값만 암호화하고 키 구조는 그대로 유지하여 Git diff가 유용하게 동작
    • age 암호화 백엔드 사용 — "PGP 없이 암호화를 단순하게 만든" 도구
    • 호스트별로 일반 설정 파일(homelab.yaml)과 암호화 파일(homelab.sops.yaml)을 분리 관리
    • 워크플로우:
      • age-keygen으로 키 생성 → sops 명령으로 암호화 파일 편집(에디터에서 복호화 후 저장 시 자동 재암호화) → Ansible 실행 시 자동 복호화
      • Ansible이 SOPS를 네이티브 지원하므로 별도 모듈이나 플래그 불필요
    • Ansible Vault 대비 장점: 파일 전체가 아닌 값 단위 암호화로 diff 활용 가능
    • 한계: age 개인키를 팀원과 안전하게 공유해야 하며, 키 분실 시 시크릿 복구 불가
      • 1인 운영 홈랩에서는 적절한 수준의 복잡도

실행 중인 서비스

  • 미디어 관리: *arr 스택

    • Prowlarr: 인덱서 관리자로, 검색 결과를 다른 *arr 서비스에 전달
    • Radarr: 영화 컬렉션 관리자 — 원하는 영화를 지정하면 검색·다운로드·정리를 자동 수행
    • Lidarr: 음악용 동일 기능, Navidrome과 연동
    • Bazarr: 자막 자동 다운로드
    • Tidarr: Tidal 음원을 로컬에 보관할 수 있는 서비스
    • Transmission: BitTorrent 클라이언트(포트 9091)로, 모든 *arr 서비스의 다운로드 요청 처리
    • 모든 서비스가 Authentik 인증 뒤에 위치
    • 공유 다운로드 디렉토리(/mnt/data/docker/transmission/downloads)와 PUID/PGID 1000을 사용해 하드링크로 디스크 공간 절약
    • 워크플로우 예시: 영화를 Radarr에 추가 → Prowlarr로 검색 → Transmission이 다운로드 → Radarr가 미디어 라이브러리로 이동 → Jellyfin에서 시청 가능
  • 미디어 소비

    • Jellyfin: 오픈소스 미디어 서버로, Plex와 달리 클라우드 로그인 불필요. 자체 인증 사용, Android TV 앱 포함 다양한 기기 지원
    • Navidrome: Subsonic API를 지원하는 음악 스트리밍 서버, 모바일 앱(DSub2000 등)과 연동. Lidarr가 라이브러리 폴더에 음악을 공급
    • Calibre Web: 전자책 라이브러리 관리자 및 리더
      • 랩톱의 Calibre 데스크톱 앱에서 관리하는 메타데이터 DB를 Syncthing으로 서버에 동기화
      • OPDS API를 통해 여러 리더에서 책 접근 가능
  • AI 및 채팅

    • LibreChat: 셀프호스팅 AI 채팅 인터페이스로, 여러 LLM 프로바이더(OpenAI, Anthropic, 로컬 Ollama)에 연결 가능
      • RAG(Retrieval Augmented Generation) 지원
      • MongoDB(채팅 이력), PostgreSQL + pgvector(임베딩), MeiliSearch(전문 검색) 필요로 상대적으로 무거운 구성
      • Claude Code의 접근성이 더 좋아 사용 빈도가 낮으며, 제거를 고려 중
  • 사진 및 파일

    • Immich: 셀프호스팅 Google Photos 대체 서비스
      • 폰에서 자동 사진 백업, 얼굴 인식, 앨범 정리, EXIF 메타데이터 추출
      • 자체 PostgreSQL(pgvector 포함)과 머신러닝 컨테이너(이미지 분류)를 사용하며, 현재 수천 장의 사진 저장 중
    • Syncthing: 랩톱·폰·서버 간 폴더 동기화. 클라우드 중개 없이 P2P 직접 동기화
      • Obsidian Vault, 문서 등을 여러 기기와 Android에서 동기화
    • MinIO: S3 호환 오브젝트 스토리지로, S3 API가 필요한 테스트나 애플리케이션에 활용
  • 독서 및 정보

    • Miniflux: 미니멀 RSS 피드 리더로, 약 50개 블로그·뉴스 소스 구독
      • 키보드 단축키 지원, 알고리듬 기반 정렬 없이 시간순 피드 제공
  • 인프라 및 인증

    • Traefik: 호스트네임 기반으로 Docker 컨테이너에 트래픽을 라우팅하는 리버스 프록시. 컨테이너 시작 시 적절한 라벨만 있으면 자동 감지
    • Authentik: SSO 및 ID 프로바이더. ForwardAuth 미들웨어로 서비스 보호, 블루프린트를 Git에 저장하여 전체 인증 설정 관리
    • PostgreSQL: 공유 데이터베이스 서버로, Authentik·Miniflux·Immich·LibreChat 등이 각각 별도 DB 대신 하나의 인스턴스를 공유하여 리소스 절약 및 백업 용이
    • Redis: 공유 캐시 및 세션 저장소, 주로 Authentik 등의 세션 관리와 작업 큐에 사용
  • 커스텀 소프트웨어

    • Highlight Exporter: KOReader, Readwise, Apple Books에서 책 하이라이트를 추출하여 Obsidian 호환 마크다운으로 변환하는 Go 서비스
    • Telegram Assistant: 다양한 자동화 작업과 그룹 채팅 내 AI 접근을 제공하는 Telegram 봇. 새로운 기술 시험용으로 가장 자주 재작성하는 프로젝트
    • Chess-blunder trainer: chess.com이나 lichess.com 게임을 불러와 Stockfish로 분석 후 실수한 수를 선별하여 훈련하는 웹앱으로, 곧 오픈소스 공개 예정

모니터링

  • Beszel

    • 간편한 설정과 운영, 좋은 기본값을 갖춘 경량 모니터링 솔루션
    • Grafana 스택은 두 대의 머신에서 기본 OS 통계를 보기에는 과도하고 복잡하다고 판단
    • Glances 등 유사 프로젝트들도 지나치게 튜닝이 필요하다고 느낌
    • Beszel은 필요 기능의 120%를 커버하면서 설치가 간편
  • Statsping

    • 특정 리소스에 대한 세밀한 모니터링을 위한 미니멀 서비스 핑 도구
    • 정의된 엔드포인트에 핑을 보내 지연 시간과 가용성을 보고하고, 서비스 장애 시 다양한 방법으로 알림
    • 홈랩 장애 시에도 살아남도록 클라우드 머신에서 호스팅, 별도 유지보수 오버헤드 없음

현재 부족한 부분

  • 백업

    • 백업의 중요성을 인지하면서도 현재 전혀 구현하지 않은 상태
    • 영화·음악·사진 데이터 손실보다는 각 서비스의 데이터베이스 백업이 필요하나, 적절한 솔루션(restic 등)과 하드웨어 구성을 아직 결정하지 못함
  • RAID 설정

    • 미디어 데이터와 시스템이 단일 M2 NVMe 드라이브에 공존하는 상태
    • NAS 서버나 별도 백업 머신을 위한 물리적 공간이 부족
  • 클라우드 독립성

    • 리소스 가용성을 Cloudflare Tunnel 인프라에 크게 의존
    • Cloudflare 장애 시 인프라 접근도 함께 중단되며, 향후 대안에 투자할 계획
  • 완전한 IaC 및 자동화

    • CI 파이프라인이나 자동 프로비저닝 없이 Ansible 플레이북을 수동 실행
    • 현재로서는 GitOps로의 전환이 큰 이점을 가져올 것으로 느끼지 않음

비용 효율성 및 결론

  • Hetzner 가상머신에 월 약 7유로 지출, 홈서버의 전기 사용량은 매우 적을 것으로 추정
  • 새 서비스 추가나 설정 수정에 약 20~30분 소요, Claude Code에 상당 부분 위임하고 배포 전 간단한 리뷰만 수행
  • 전체 프로젝트에 투입된 시간은 수년에 걸쳐 약 100~150시간으로 추정
  • 최소한의 벤더 종속 없이 데이터를 소유하며, 갑작스러운 서비스 약관 변경이나 알고리듬 피드, 인수합병에 따른 데이터 소실 위험이 없음
  • 완벽한 시스템이 아니라 인프라 이해와 즐거움이 목표이며, 배포하는 서비스, 작성하는 Ansible 역할, 암호화하는 시크릿 하나하나가 학습의 가치
  • 홈랩을 시작하려면 작게 시작하고, 과도하게 고민하지 않는 것이 중요
GeekNews Weekly에 포함된 글입니다. 에디터 코멘트 보기

댓글과 토론

Tailscale 쓰다가 Cloudflare Tunnel 쓰는데 정말 좋아요. 쓰임새가 서로 좀 다르긴하지만 저같은 경우엔 Tailscale은 Adguard랑 충돌나서 쓰기 어렵더라구요.

Tailscale의 parent dns를 adguard로 지정하면 되지 않나요?

adguard desktop은 아닌데 adguard mobile은 로컬 vpn으로 동작해서 같이 쓸 수가 없습니다

dns가 아니라 vpn 부분에서 충돌났던것 같습니다.

최근에 구글 네스트에서 mbc 라디오 나오게 하려고 이것저것 시도하다가.
Cloudflare tunnel 을 사용 했습니다. 왜 무료일까 물어보게 만드는 좋은 서비스에요.

재미있겠네요. 썰 좀 풀어주시죠.

저는 오라클 클라우드 free tier로 사용하고 있습니다. 4vcpu에 24ram 200gb, arm기반이라 가끔 호환안되는 것이 있는것을 제외하고는 장난감으로 너무 좋아요.

새로 가입한 통신사에서 80, 443 포트를 막아놨던데 cloudflare tunnel로 우회해서 쓰고있습니다
없으면 위약금 물고 통신사 바꿀 뻔 했어요

어디 통신사 이용하시는데 포트를 막아둔걸까요?

정확히는 직접 막아둔 건 아니고 통신사 공유기가 80, 443 포트 포워딩을 못하게 막아둔 게 맞았는데요
포트 포워딩하려고 사제 공유기 쓰니까 1g 옵션으로 가입한 요금제 속ㄷ7를 몰래 100mbps로 너프시켜버리는 바람에
대안을 찾다보니 cf tunnel에 붙여버리는게 제일 깔끔하더라고요

사제 공유기에 mac address 변환해주는 기능이 있는 지 확인해 보시고 통신사 공유기의 것으로 변환 해보시면 그것도 우회 가능할 것 같아요

cf tunnel을 설정하고 나니까 80이랑 443포트에 fail2ban 로그 쌓이던게 하나도 없어져서 아에 빼버리고 더이상 생각을 안했네요
도메인 자체를 클라우드플레어에서 구매하고 SSO도 클라우드플레어에서 설정하고 SSO 통과 못하면 서비스 사용못하게해서 모든 공격을 클라우드플레어가 대신 탱킹하게 만들어놨어요
저 혼자 쓰는 서비스들만 들어가있어서 이 구성으로도 충분히 쓸만하더라고요
클라우드플레어 장애나면 그정도는 감수하기로 마음먹었습니다

보통 통신사용 공유기에서 포트포워딩을 막아두는 경우가 있다고 들었어요

사제 공유기 하나 달면 열리기야 하겠지만... 말씀하신대로 cf tunnel이 기본적인 WAF도 달려있고 심지어 ICN 리전으로 잡아줘서 안쓸 이유가 크게 없죠

홈랩에 n8n 올리고 앤트로픽, 텔레그램, 스토리지 등등 연결해서 자질구레한 작업들 돌리는 중인데, 커넥터들이 잘 되어 있어서 편하더라구요.

라이젠 8000 시리즈 저전력 기기를 24/7 홈서버로 사용하고 있는데요
평소 NAS로 사용하고 컨테이너와 서비스 등 합쳐서 70개 정도 사용하고 있는데 전력 사용량 한 달에 10kWh도 안 나오더라구요. 2000원쯤 되는 비용입니다.

Cloudflare Tunnel
너무 좋아요.

응답 완료까지 시간이 걸리는 친구들이 종종 502를 뿜어내기는 합니다만은
무료니까요~

저도 클라우드 터널 사용하고 있는데 참 좋습니다.
보통 공유기가 물리면 외부 아이피를 공유기가 가지는 경우가 많은데

클라우드 플레어 터널을 사용해서 내부 아이피도
도메인 등록을 통해 외부 연결이 가능해질 수 있어요~

심지어 공짜죠,

Hacker News 의견들
  • 이건 정말 멋지지만, Cloudflare Tunnel을 미디어 스트리밍용으로 쓰면 안 됨
    이용약관상 금지되어 있거나 최소한 의도된 사용이 아님. 서비스가 차단될 수도 있음
    대신 WireguardTailscale을 쓰는 게 좋음
    관련 기사

    • 그래서 나도 같은 이유로 월 5달러짜리 VPS를 임대해서 Tailscale로 연결함
      CGNAT 해제용으로도 좋고, GUI 기반으로는 Nginx Proxy Manager를 추천함
    • 혹시 Tailscale Funnel이 커스텀 도메인을 지원하게 됐는지 궁금함
      나는 지금 rathole + traefik 조합으로 옮기는 중임. 새벽까지 실험하다가 밤을 새버렸음
    • Cloudflare Tunnel은 서비스를 공개적으로 노출시키지만, Wireguard/Tailscale은 VPN임
      Tailscale(Headscale은 아님)은 Funnel이라는 리버스 프록시 기능을 제공하지만, 개인 도메인은 쓸 수 없음
      CF Tunnel의 대안으로는 Pangolin이 가장 비슷하고, NetBird를 리버스 프록시 기능과 함께 셀프호스팅하는 방법도 있음
    • 기억하기로는 CF 약관은 미디어 캐싱을 금지한 것이지, 스트리밍 자체를 금지한 건 아니었던 걸로 앎
  • 이건 ‘독립’에 대한 판타지라기보다 시스템 관리자가 되는 판타지 같음

    • 나는 라이선스 문제로 좋아하는 음악 접근이 막힐까 걱정하지 않아도 되는 게 정말 좋음
    • 독립에는 책임이 따라오는 법임. 둘은 분리될 수 없음
    • 예로 r/homelab에서 NAS를 직접 만들어 아내의 사진을 Google Photos 대신 저장하게 한 사람들 얘기가 있음
      하지만 솔직히 Google이나 Apple에 월 5달러 내는 게 훨씬 나은 선택 같음. 3-2-1 백업이라도 하고 있는지 의문임
  • 지역 도서관에서 이런 서비스를 운영하는 자원봉사 그룹이 있으면 좋겠음
    아이들이 서비스 운영을 배우고, 기술이 부족한 사람들도 오픈소스를 활용할 수 있는 좋은 기회가 될 것 같음

    • 하지만 문제는 항상 지원(서포트)
      아무도 고객 지원을 맡고 싶어 하지 않음. 그래서 대부분의 서비스는 “지원은 저쪽에 문의하세요”라고 말할 수 있게 돈을 내는 구조로 되어 있음
  • 나는 비밀 관리용으로 fnox를 씀
    sops보다 훨씬 많은 백엔드를 지원하고, DX(개발자 경험) 도 더 좋다고 느낌

    • 나는 Infisical을 셀프호스팅해서 사용함
    • 흥미로워 보임. 지금은 SOPS를 쓰고 있는데, 대체제로 고려해볼 만함
  • ‘독립적이고 준비된 남성의 판타지’라는 말이 있지만, 결국 Cloudflare가 중간에 있으니 완전한 독립은 아님

  • Cloudflare Tunnel은 정말 훌륭한 도구임
    예전엔 집 IP로 직접 호스팅했지만, 지금은 cloudflared로 훨씬 편하게 관리함
    방화벽이나 네트워크 침입 걱정도 줄었음
    homelab은 이제 Claude가 작성한 idempotent bash 스크립트로 관리함
    의존성은 속성을 바꾸려는 사람의 욕구 때문에 복잡해지고, 그 상호작용이 버그를 만든다고 느낌
    그래서 단순한 bash 스크립트로 모든 걸 표현하는 게 더 안정적임
    현재는 systemd + podman 컨테이너를 사용 중이며, 내 기록용으로 메모 페이지를 남겨둠

    • Cloudflare가 모든 데이터를 볼 수 있다는 프라이버시 우려는 없나?
      현실적인 편의성이 그 단점을 상쇄한다고 생각하는지 궁금함
    • 단순히 Wireguard를 쓰는 것보다 Cloudflare Tunnel의 장점이 뭔지 알고 싶음
  • 왜 다들 이런 걸 공개 인터넷에 올리는지 이해가 안 됨. 그냥 Tailscale 쓰면 되지 않나

    • 앱을 설치하고 공개 URL만 지정하면 되는 게 편하긴 함. 같은 tailnet에 묶일 필요가 없으니까
    • Tailscale은 과한 솔루션임. 포트 80, 443만 열고 리버스 프록시로 인증만 제대로 하면 충분히 안전함. 나는 그렇게 수년째 운영 중임
    • 하지만 스마트TV처럼 Tailscale을 설치할 수 없는 외부 사용자가 Jellyfin에 접속해야 하는 경우도 있음
  • 작성자가 homelabself-hosting을 혼동한 것 같음
    self-hosting은 실제 사용하는 서비스를 운영하는 것이고, homelab은 실험과 학습용 환경
    나는 개인 데이터나 서비스를 homelab에 두지 않음. 깨질 수 있는 공간이니까

  • 우크라이나에서 실제로 지하 벙커 안에서 프로덕션 트래픽을 처리하는 SaaS 회사를 본 적 있음

  • 스트리밍 구독료만 연간 1,300달러가 나와서 충격받음
    그래서 NAS와 36TB 하드를 사서 arr 스택을 구축하고 모든 구독을 해지함
    가족 전체가 따라 하면서 연간 5~6천 달러를 절약 중임
    NAS는 몇 달 안에 본전이 나올 예정이고, 이제는 전부 순이익임
    Claude 코드 덕분에 설정도 몇 시간 만에 끝남
    게다가 Netflix나 Hulu의 잡음 없는 콘텐츠 큐레이션이 가능해져서 훨씬 즐거움

    • 또 하나의 큰 장점은 고비트레이트 스트리밍이 가능하다는 점임
      4K 블루레이를 리핑해서 집에서 스트리밍하면 상용 서비스보다 훨씬 고화질임
    • 나는 하이브리드 방식을 씀. 저가형 구독은 유지하되, 광고 없는 최고 화질은 자체 미디어 서버에서 봄
      요즘 스트리밍 서비스의 가성비가 바닥이라 느껴짐. 비싼 요금제도 1080p가 한계인 경우가 많음
    • 그게 합법인지 궁금함. 업로드는 피하는 방식인지 알고 싶음
    • 혹은 아예 돈도 시간도 주지 말고, 콘텐츠 소비 중독에서 벗어나 다른 취미를 찾는 것도 방법임