본문 바로가기
IT/HomeLabs

[HomeLab] 3일 차: 13년 차 엔지니어도 피해 갈 수 없는 '삽질'과 아키텍처 재설계 (File Browser + Cloudflare)

by 수누다 2026. 2. 12.

부제: Immich에 얹혀살던 파일 서버, '독립'을 선언하다

3. 본문 (Markdown)

들어가며

안녕하세요, 시스템 엔지니어이자 4남매 아빠 수누다입니다.

홈랩 구축 3일 차. 하드웨어 세팅(1일 차)과 사진 서버 Immich 구축(2일 차)은 성공적으로 끝났습니다. 이제 하드웨어와 OS는 준비됐으니, 본격적으로 "써 먹을 수 있는 서비스"를 올리는 단계입니다.

오늘은 11TB에 달하는 방대한 데이터를 웹에서 윈도우 탐색기처럼 관리할 수 있는 File Browser를 구축했습니다. 하지만 그 과정은 결코 순탄치 않았습니다. 아키텍처를 뒤엎고, 보안 설정과 싸워야 했던 13년 차 엔지니어의 리얼한 '삽질기'를 공유합니다.


1. 구조적 딜레마: 얹혀살기 vs 독립하기

처음 계획은 단순했습니다. 이미 잘 돌아가고 있는 Immich 컨테이너(ID 102)에 File Browser도 같이 설치하려 했습니다. 당장 편하니까요.
하지만 설치 직전, 엔지니어의 본능이 경고를 보냈습니다.

"잠깐, 만약 Immich가 업데이트하다 뻗으면? 파일 관리도 같이 먹통 되는 거 아니야?"

이건 전형적인 SPOF(Single Point of Failure, 단일 장애점)입니다. 사진 서버가 죽었다고 해서 일반 파일 접근까지 막히면 안 되죠.
결국 계획을 전면 수정했습니다. 파일 관리는 nas 컨테이너(nas-fileserver)를 새로 만들어 이사(Migration)시키기로 결정했습니다. 이것이 바로 마이크로서비스(Microservices) 아키텍처의 핵심, '역할 분리(Separation of Concerns)'입니다.


2. 난관 봉착: Proxmox LXC와 Docker의 권한 전쟁

새로운 100번 컨테이너(LXC)에서 Docker를 띄우려는데, 예상치 못한 에러가 터졌습니다.

AppArmor enabled... Permission denied

Proxmox의 LXC 컨테이너가 보안을 위해 쳐놓은 울타리(AppArmor)가 내부에서 실행되는 도커를 막은 것입니다. (LXC 안에 도커를 띄우는 'Nesting' 구조에서 흔히 발생합니다.)

해결책: 보안 제한 해제
호스트(Proxmox 쉘)에서 해당 컨테이너의 설정 파일을 열어 과감하게 제한을 풀어줬습니다.

# /etc/pve/lxc/100.conf 파일 수정
nano /etc/pve/lxc/100.conf

# 아래 내용을 파일 끝에 추가
features: nesting=1
lxc.apparmor.profile: unconfined

이 한 줄을 추가하고 컨테이너를 재부팅 하니, 거짓말처럼 도커가 살아났습니다.


3. File Browser 구축: 11TB를 한눈에

이제 깨끗한 도화지(100번) 위에 File Browser를 올렸습니다.
가장 중요한 건 마운트 포인트입니다. /mnt/nas 경로에 11TB 하드디스크 전체를 연결해서, 사진 폴더(immich)와 일반 데이터 폴더(files)를 한곳에서 관리하도록 설정했습니다.

# docker-compose.yml
version: '3'
services:
  filebrowser:
    image: filebrowser/filebrowser:latest
    volumes:
      - /mnt/nas:/srv  # 여기가 핵심! 11TB 전체 연결
      - ./filebrowser.db:/database.db
    ports:
      - 8080:80

4. 외부 접속: Nginx를 버리고 '터널'을 택하다

마지막 관문은 외부 접속(files.example.com)이었습니다.
처음엔 습관처럼 Nginx Proxy Manager(NPM)를 통해 연결하려 했으나, A 레코드 설정과 포트 포워딩이 꼬이면서 접속이 거부됐습니다.

여기서 발상의 전환을 했습니다.
*"이미 photos는 Cloudflare Tunnel로 잘 쓰고 있잖아? 굳이 복잡하게 문지기(NPM)를 또 세워?"*

과감하게 DNS A 레코드를 지우고, Cloudflare Zero Trust 대시보드에서 files 서브도메인을 터널에 태웠습니다.

  • Service: HTTP
  • URL: 192.168.XXX.XXX:8080 (파일 서버 직통)

결과는 대성공.
공유기 포트 포워딩 하나 없이, 보안은 챙기면서 LTE 환경에서도 내 집 서버에 0.1초 만에 접속됩니다.


5. 오늘의 결론

  1. 역할 분리는 진리다: Immich와 File Browser를 찢어놓으니, 한쪽이 터져도 다른 쪽은 살아있어 마음이 편안합니다.
  2. LXC에서 도커 돌릴 땐: lxc.apparmor.profile: unconfined 설정을 잊지 맙시다. (이거 모르면 밤샘 각입니다.)
  3. Cloudflare Tunnel은 신이다: 홈랩 초보자에게 이보다 더 안전하고 간편한 외부 접속 도구는 없습니다.

이제 파일 관리 시스템까지 완성되었습니다.