셀프 호스팅 환경 구축기

6 hours ago 1

  • 작성자는 수년간 다양한 셀프 호스팅 접근법을 시도한 끝에, 커스텀 환경을 성공적으로 구축했음
  • 주요 목표는 개인 데이터 통제와 신뢰할 수 있는 인프라 유지였으며, 이를 위해 NixOS, ZFS, Tailscale, Authelia 등 여러 핵심 기술을 조합했음
  • 가족 및 지인 사용성까지 고려해 SSO, 별도 시작 페이지 도입 등 접근성도 강화함
  • 실제 운영 중 마주친 이슈들과 구체적 해결법(예: 사설 서비스 공개 프록시, 혼합 VPN 환경, 인증 연동)을 상세히 공유함
  • 향후에는 백업 인프라 및 보안 강화 등 추가 개선을 계획하고 있으며, 노하우와 참고 자료도 남김

소개 및 동기

몇 년에 걸쳐 여러 셀프 호스팅 방식을 시도한 끝에, 본인에게 맞는 "충분히 좋은" 환경을 구축함. 여러 오픈소스 자료와 타인의 경험을 참고했으며, 해당 과정을 공유해 다른 개발자에게 도움이 되고자 함.

목표

  • 개인 데이터와 해당 서비스를 직접 통제함으로써, 프라이버시 강화 및 의존 서비스 변경·단종 리스크 최소화 추구
  • 이러한 통제를 가족과 지인들에게도 제공해, 신뢰할 수 있는 서비스 환경을 마련하는 데 집중함

요구사항

필수 요건

  • 최대한 서비스의 공개 인터넷 노출을 제한해, 보안사고 위험 감소
  • 실수로 인한 핵심 인프라 다운타임 최소화 (순환 의존성 회피 및 설정 롤백 용이성 확보)
  • 인증·네트워크·도메인 등 핵심 컴포넌트 소유권 보장 및 오픈소스 우선 적용
  • 가족·지인 관점의 사용성 배려 (일관된 SSO 로그인, 최소 유지보수 필요)
  • 선언형 구성 적극 도입(버전관리 및 백업·복구 용이성, 타인 설정 참고 및 활용성 확보)
  • 업데이트가 쉽고 안전해서, 주기적으로 관리 가능해야 함

비우선 요건

  • 극도의 모듈화/깔끔함 불필요(실용성 우선)
  • 모두가 오픈소스일 필요는 없으나, 가능하면 활용
  • 고가용성(HA) 미추구, 다운타임 감수하는 대신, 단순 구조 채택

기술 선택

NixOS

  • 모든 OS 설정을 Nix 언어와 패키지 관리자로 선언식 관리하는 리눅스 배포판
  • 구성이 코드화되어, 버전관리와 체계적 롤백이 가능
  • 다양한 패키지와 Docker/PODMAN 등 연동도 지원
  • 다른 개발자의 Nix 설정을 참고해 노하우를 축적

ZFS

  • 고성능 파일시스템으로 스냅샷, 롤백 등 데이터 보호 기능이 우수함
  • 4개의 10TB HDD를 RAIDZ2로 구성(2개 디스크 동시 장애 허용), 256GB SDD로 캐싱 적용
  • 단순하고 신뢰도 높은 메인 스토리지 아키텍처 구성

Tailscale & headscale

  • Tailscale은 메시 VPN으로, 기기간 직접 연결 지원
  • 서비스 접근시 공개 인터넷 노출없이 내부 네트워크 활용 가능
  • 데이터 보호를 위해 Tailscale 오픈소스 서버(headscale) 자체 운영
  • Usability 관점에선 기기별 클라이언트 설치 필요성이 다소 진입장벽

Authelia & LLDAP

  • Authelia는 인증·인가 통합 솔루션으로, OIDC 기반 SSO 제공 및 NGINX 프록시 연동 가능
  • LLDAP는 경량 LDAP 서비스로, Authelia의 사용자·그룹 관리 및 백업 인증 체계로 활용
  • 최소한의 리소스로 잘 동작하지만, 어떤 서비스와 어떻게 연동할지 학습 커브 존재

구조 설계

아키텍처

  • 각 서버는 Star Wars 행성명으로 명명
  • 진입점(public server)은 "taris"로 Authelia, headscale, 블로그 등 필수 서비스 제공
  • headscale, Authelia, LLDAP는 외부 접근 가능해야 하기에, 제한된 범위에서 퍼블릭 운영
  • 사설 서비스(Foundry VTT, 모니터링 등)는 NGINX로 프록시 처리하여 선택적으로 노출

프라이빗 서버

  • 메인 서버 "kuat"에서는 TrueNAS로 NixOS VM과 ZFS 스토리지 풀 관리
  • "files"(복구불가 데이터)와 "media"(원한다면 복구 가능한 데이터)로 스냅샷/백업 스코프 분리
  • 주요 서비스는 "bespin" VM에서 NixOS로 운영, 테스트용 VM("alderaan")도 별도 구축

기타 서비스

  • 미션크리티컬 디바이스는 단일 목적 어플라이언스로 구성(예: 스마트홈엔 Home Assistant OS 별도 사용)
  • Matrix 서버·Element 클라이언트는 공식 Ansible Playbook 활용
  • 메일, 비밀번호 관리는 ProtonMailBitwarden 외부 서비스에 아웃소싱해 순환 의존성 차단

개별 이슈 및 해결

서비스 시작 페이지

  • Flame 기반의 심플 대시보드로, 사용자별 서비스 접근성 향상
  • 사용량 적고 시각적 완성도가 높아서, 대체 서비스 도입 전까지 실용적 운영

Tailscale과 타 VPN 병행 사용

  • 일부 OS(특히 Android, Windows)는 멀티 VPN 동시 구동 불가
  • Tailscale exit node 기능과 Gluetun(Container 기반 VPN 클라이언트) 조합으로, ProtonVPN 등 외부 VPN 우회 활용
  • 단, 배터리 사용량 증가 및 간헐적 속도 저하 등의 부작용 존재

인증(Authentification) 주의점

  • 셀프 호스팅 서비스별 주요 인증 프로토콜: OIDC(우선), OAuth, LDAP
  • 각 서비스와 Authelia에 별도 설정 필요
  • 관리자 계정은 반드시 Authelia/LLDAP 연동과 별도로 유지해, 인증 문제시 복구 수단 확보
  • OIDC 미지원 서비스는 NGINX와 Authelia 프록시 연동으로 접근제어 구현
  • Authelia의 OIDC와 NGINX Proxy 접근제어는 별도 구성 필요

DNS 및 SSL 발급

  • 공개 서비스는 일반적인 방법(도메인→퍼블릭IP)으로 운영
  • 내부 서비스는 "internal" 서브도메인과 Tailscale IP 활용, 외부 노출 차단
  • SSL 인증서는 NixOS 내장 Lets Encrypt 지원(공개 서비스는 HTTP-01, 내부 서비스는 DNS-01 방식)

NixOS VPS 설치 주의

  • 다수 VPS에서 NixOS 설치 옵션 미제공
  • 설치 필요시 커뮤니티 위키 등을 참조해, 지원되는 설치 경로 확인 필요

TrueNAS 데이터셋 VM 마운트

  • TrueNAS의 기본 방화벽은, VM의 호스트 접근을 차단
  • 공식 가이드(Bridge 네트워크 생성)에 따라 NFS 데이터셋 마운트 구현

개인 서비스 공개 프록시

  • headscale 기반일 때, NGINX proxyPass로 프라이빗 서비스 외부 노출 가능
  • Tailscale 공식 Funnel 외에도, 설정 예제 및 구성 참고 자료 제공

다음 단계와 과제

  • 전용 백업 서버와 복구 검증 체계 추가 필요
  • Tailscale/headscale의 접근제어 적극 활용 계획
  • SSH 접근 등 추가 보안 강화 진행 예정
  • Pi-hole, AdGuard Home 등 로컬 DNS 암호화·캐싱 솔루션 도입 검토
  • Forgejo, Manyfold, RomM 등 신규 서비스 확장 고려

참고 자료

유용한 관련 링크들을 별도 제공

  • 작성자: Matthew Booe

Read Entire Article