- 작성자는 수년간 다양한 셀프 호스팅 접근법을 시도한 끝에, 커스텀 환경을 성공적으로 구축했음
- 주요 목표는 개인 데이터 통제와 신뢰할 수 있는 인프라 유지였으며, 이를 위해 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 활용
- 메일, 비밀번호 관리는 ProtonMail과 Bitwarden 외부 서비스에 아웃소싱해 순환 의존성 차단
개별 이슈 및 해결
서비스 시작 페이지
- 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 등 신규 서비스 확장 고려
참고 자료
유용한 관련 링크들을 별도 제공