이 레포가 무엇을 하는 물건인가.
Self-Hosting-Guide는 실행되는 소프트웨어가 아니다. 거대한 README 한 장(약 59만 자)에 셀프호스팅에 필요한 개념 설명, 도구 목록, 학습 자료 링크를 주제별로 모아 둔 awesome-list다. "넷플릭스 대신 Jellyfin, 드롭박스 대신 Nextcloud, 구글 포토 대신 Immich를 내 서버에 올리려면 무엇을 알아야 하나?"에 대한 단계별 답안지라고 보면 된다.
이 저장소의 주 언어가 Dockerfile로 잡히는 이유도 여기 있다. 실제 애플리케이션 코드는 거의 없지만, 레포에 포함된 Getting Started with Self-Hosting.dockerfile 예시 파일 하나 때문에 GitHub이 주 언어를 Dockerfile로 분류한 것이다(README 안의 코드블록은 언어 감지 대상이 아니다). 즉 "코드를 읽는 레포"가 아니라 "지도를 따라 직접 서버를 구축하는 레포"다.
왜 ★2만 개를 넘기고 지금도 트렌딩에 오르는가.
셀프호스팅은 최근 몇 년간 꾸준히 커지는 흐름이다. 구독료 인상, 클라우드 서비스의 갑작스러운 정책 변경·서비스 종료, 프라이버시 우려, 그리고 라즈베리파이·미니PC·중고 서버의 가격 하락이 맞물리면서 "내 데이터는 내가 들고 있겠다"는 사람이 늘었다. 이 가이드가 트렌딩에 오르는 이유는 다음과 같다.
셀프호스팅 입문자가 가장 막히는 지점은 "무엇부터 배워야 할지 모른다"는 것이다. Docker, 네트워킹, 리버스 프록시, DNS, 백업, 보안… 흩어진 지식을 하나하나 검색해야 한다. 이 레포는 그 모든 갈래를 한 페이지의 목차로 묶어 "여기서 출발하라"를 제공한다.
유명한 awesome-selfhosted가 "설치할 수 있는 앱 카탈로그"라면, 이 가이드는 그 앱을 돌리기 위한 인프라 지식(컨테이너·VPN·쿠버네티스·모니터링·보안·언어별 개발)까지 포함한다. 앱을 고르는 곳이 아니라, 앱을 돌릴 실력을 쌓는 곳이다.
mikeroyal은 같은 형식의 거대 가이드(Apple, Linux, Windows, Machine Learning, Cybersecurity 등) 시리즈를 운영하는 큐레이터다. 덕분에 각 주제가 "개념 → 학습 자료 → 도구"라는 동일한 틀로 정리돼, 어느 섹션을 펼쳐도 같은 방식으로 읽힌다.
① 깊이보다 넓이. 각 주제는 "여기 좋은 자료 링크들이 있다" 수준이라, 실제 설치·트러블슈팅은 외부 문서로 넘어가야 한다. ② 링크 부패(link rot). 수천 개 외부 링크 중 일부는 시간이 지나 죽는다. ③ 거대한 단일 README. 59만 자가 한 파일이라 브라우저에서 무겁고, 원하는 항목 찾기가 Ctrl+F 의존적이다. 이 가이드는 "지도"이지 "매뉴얼"이 아니다 — 방향을 잡는 용도로 쓰고, 실제 시공은 각 도구 공식 문서로 한다.
이 가이드가 다루는 기술을 "셀프호스팅 스택" 층위로 재배열했다.
README는 주제를 나열식으로 늘어놓지만, 실무에서는 아래에서 위로 쌓는 계층으로 이해하는 게 빠르다. 하드웨어 위에 OS, 그 위에 컨테이너 런타임, 네트워킹·보안으로 감싸고, 맨 위에 실제 앱을 올린다.
| 계층 | 역할 | 가이드가 소개하는 대표 도구 |
|---|---|---|
| ① 하드웨어 | 물리 서버 본체 | Raspberry Pi, 미니PC, NAS, 중고 서버, 또는 임대 VPS |
| ② OS | 운영체제 기반 | Linux(Ubuntu/Debian), Raspberry Pi OS, TrueNAS |
| ③ 컨테이너 | 앱 패키징·격리 | Docker, Podman, Docker Compose, Portainer |
| ④ 오케스트레이션 | 다중 노드 자동화 | Kubernetes(K8s), Ansible |
| ⑤ 네트워킹/접속 | 안전한 원격 접근 | WireGuard(VPN), 리버스 프록시, DNS |
| ⑥ 보안 | 방어·인증·프라이버시 | OpenSSF, OAuth, 차등 프라이버시(Differential Privacy) |
| ⑦ 관측(Observability) | 상태 모니터링 | Grafana, 데이터 시각화 도구 |
| ⑧ 데이터 | 저장·DB | SQL/NoSQL DB, 백업, MinIO(오브젝트 스토리지) |
| ⑨ 애플리케이션 | 실제 쓰는 서비스 | Nextcloud(파일), Home Assistant(홈오토), 로컬 LLM(ollama·LocalAI·llama.cpp), 검색·미디어 서버 |
| (부록) 개발 | 직접 만들기 | Node.js, Python, Rust, Go, C/C++, Java, Swift 가이드 |
셀프호스팅 스택은 집 짓기와 같다. ① 땅(하드웨어) → ② 기초공사(OS) → ③ 조립식 방(컨테이너) → ④ 여러 채 관리(쿠버네티스) → ⑤ 대문·울타리·전용 통로(VPN·프록시) → ⑥ 보안 시스템 → ⑦ CCTV(모니터링) → ⑧ 창고(스토리지) → ⑨ 실제 가구·가전(앱). 입문자는 ①③⑨만으로도 시작할 수 있고, 규모가 커질수록 ④~⑦을 더한다.
가이드의 도구들이 실제로 어떻게 한 시스템으로 엮이는가.
이 레포에는 "아키텍처"라는 코드가 없으므로, 가이드가 설명하는 개념을 현실적인 1대 서버 셀프호스팅 구성으로 조립해 보면 다음과 같다. 외부에서 들어온 요청이 어떤 길을 거쳐 컨테이너 안의 앱에 닿는지가 핵심이다.
각 앱(Nextcloud, Grafana 등)을 독립 컨테이너로 띄우고 docker compose로 묶는다. 한 앱이 죽어도 다른 앱에 영향이 없고, 업그레이드·롤백이 컨테이너 단위로 깔끔하다. README의 Docker 예시들이 모두 이 패턴이다.
여러 앱이 각자 포트를 열지 않고, 리버스 프록시 하나가 80/443만 받아 도메인으로 분기한다. cloud.mydomain.com→Nextcloud, photos.mydomain.com→Immich 식. HTTPS 인증서도 프록시가 한 곳에서 자동 관리한다.
가장 안전한 접근법은 인터넷에 아무 포트도 열지 않고 WireGuard 터널로만 들어오는 것. 외부 공격면(attack surface)을 0에 가깝게 줄인다. 외부 공유가 꼭 필요한 서비스만 프록시로 선별 노출한다.
라우터에서 서버 포트를 인터넷에 바로 열면 즉시 봇 스캔·무차별 대입 공격의 표적이 된다. 최소한 VPN 또는 인증 프록시 뒤에 두고, 방화벽·자동 보안 업데이트·강한 비밀번호·2FA를 기본으로 깔아야 한다. 이 가이드의 "Open Source Security" 섹션이 그래서 중요하다.
파일이 아니라 README의 목차가 곧 이 레포의 "구조"다.
이 저장소는 사실상 README.md(약 59만 자) 하나가 본문 전부이고, 그 외엔 짧은 Getting Started with Self-Hosting.dockerfile 예시와 CONTRIBUTING.md가 전부다. 따라서 "디렉토리 구조" 대신 목차를 학습 묶음으로 그룹핑해 두면 길을 잃지 않는다.
각 묶음은 거의 동일한 내부 패턴을 따른다 — ① 개념 정의 → ② Learning Resources(공식 문서·강의·자격증) → ③ Tools(도구·프레임워크 목록). 이 패턴을 알면 처음 보는 섹션도 빠르게 스캔할 수 있다.
| 읽는 목적 | 먼저 펼칠 묶음 |
|---|---|
| 처음 셀프호스팅 시작 | A(시작하기) → B의 Nextcloud/Raspberry Pi |
| 집 밖에서 안전하게 접속 | B의 WireGuard → D(보안) |
| 여러 서버로 확장 | C의 Kubernetes·Ansible |
| 서버 상태 감시 | B의 Grafana → C의 Databases |
| 직접 앱 개발 | F(언어별 가이드) + E의 ML |
이 가이드를 거치며 실제로 손에 남기면 좋은 것들.
셀프호스팅의 90%는 컨테이너로 한다. docker compose 파일 하나를 읽고 쓸 줄 알면 대부분의 앱을 올릴 수 있다. 아래는 셀프호스팅에서 가장 자주 보는 형태다.
# docker-compose.yml — Nextcloud + DB 최소 구성
services:
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: change-me
volumes:
- ./db:/var/lib/postgresql/data # 데이터는 볼륨에 영속
app:
image: nextcloud:latest
ports:
- "8080:80" # 호스트 8080 → 컨테이너 80
depends_on: [db]
volumes:
- ./data:/var/www/html # 파일/설정 보존
여기서 배울 핵심: volume(데이터 영속), ports(포트 매핑), depends_on(기동 순서), environment(비밀·설정 주입). 이 네 가지만 이해하면 README의 거의 모든 Docker 예시가 읽힌다.
포트, DNS, 리버스 프록시, HTTPS 인증서, NAT/포트포워딩 — 셀프호스팅 트러블슈팅의 대부분이 네트워킹이다. 가이드의 "Networking" 섹션으로 OSI 계층·프로토콜 감을 잡고, 실제로는 리버스 프록시(Caddy가 입문 난이도 최저) 한 개를 세워 보는 게 가장 빠른 학습이다.
내 서버를 인터넷에 두는 순간 공격 대상이 된다. 최소 권한, 정기 업데이트, 백업, 2FA, VPN 우선이 기본기다. 가이드의 OpenSSF·차등 프라이버시 섹션은 "조직 수준"까지 다루지만, 개인은 위 5개만 지켜도 안전도가 급상승한다.
이 가이드를 잘 쓰는 법은 목차에서 지금 필요한 1개 주제만 펼쳐, 거기 링크된 공식 문서로 직접 한 번 설치해 보는 것이다. 예: 이번 주는 "Docker로 Nextcloud 올리기"만. 한 번에 전부 읽으려 하면 59만 자에 깔린다.
"셀프호스팅 하려면 뭘 사야 하나"에 대한 현실적 답.
가이드는 라즈베리파이를 비중 있게 다룬다. 입문용으로 충분하지만, 무엇을 돌리느냐에 따라 권장 사양이 다르다.
| 용도 | 현실적 하드웨어 | 비고 |
|---|---|---|
| 입문·소규모(파일·홈오토) | Raspberry Pi 4/5 (4~8GB) + SSD | 저전력 24시간 가동, 입문 비용 최저 |
| 가족용 사진·미디어 | 미니PC(N100급) 또는 NAS | 트랜스코딩·다수 앱에 RAM·CPU 여유 필요 |
| 다중 앱·여러 사용자 | 중고 워크스테이션/서버, 16GB+ | 가상화·다수 컨테이너 동시 운용 |
| 집에 둘 수 없을 때 | 임대 VPS(클라우드) | 물리 장비 없이 시작, 월 비용 발생 |
라즈베리파이의 microSD는 쓰기 수명이 짧아 DB·로그를 올리면 금방 망가진다 — SSD/USB 부팅을 권장한다. 그리고 셀프호스팅의 진짜 비용은 본체가 아니라 백업이다. 내 데이터를 내가 책임지는 만큼, 3-2-1 백업(사본 3개·매체 2종·오프사이트 1개)은 선택이 아니다.
가이드를 "읽기"에서 "하기"로 바꾸는 난이도별 과제.
Docker를 설치하고 docker run -d -p 8080:80 nginx로 웹서버 하나를 띄워 브라우저에서 확인한다. 컨테이너의 "이미지→실행→포트" 흐름을 몸으로 익히는 단계.
위 §6의 compose 파일로 Nextcloud + PostgreSQL을 올리고, 파일 업로드·앱 설치까지 해본다. volume로 데이터가 컨테이너 재시작 후에도 살아있음을 확인한다.
Caddy를 앞단에 세워 cloud.내도메인으로 Nextcloud에 접속되게 하고, Caddy가 자동으로 TLS 인증서를 발급하게 한다. "포트 노출 → 도메인 라우팅"으로의 전환을 경험한다.
WireGuard 서버를 세우고 폰에 클라이언트를 설정해, 인터넷에 포트를 열지 않고 외부에서 내 서버에 접속한다. 공격면을 줄이는 가장 실용적 패턴을 체득한다.
Prometheus + node_exporter로 서버 지표를 수집하고 Grafana 대시보드로 CPU·메모리·디스크를 시각화한다. 알림(임계치 초과 시 통지)까지 붙이면 "운영" 단계에 진입한 것.
이 가이드를 4주 코스로 압축한다면.
| 주차 | 주제 | 도달 목표 |
|---|---|---|
| 1주차 | Linux 기본 + Docker | SSH 접속, 컨테이너 실행/중지, compose 읽기 |
| 2주차 | 앱 1개 운영(Nextcloud) | 볼륨·백업·업데이트까지 한 사이클 경험 |
| 3주차 | 네트워킹 + 프록시 + HTTPS | 도메인 라우팅, TLS 자동화, 포트 이해 |
| 4주차 | 보안 + VPN + 모니터링 | WireGuard 접속, 방화벽·2FA, Grafana 대시보드 |
| 이후 | Kubernetes / Ansible | 여러 서버로 확장·자동화(규모가 필요할 때만) |
대부분의 개인 셀프호스터는 1~4주차까지로 충분하다. 쿠버네티스·Ansible은 "서버가 여러 대로 늘어 손으로 관리가 힘들 때" 비로소 필요해지는 것이지, 입문 단계에서 먼저 손댈 도구가 아니다. 가이드의 분량에 압도되지 말고 필요해질 때 해당 섹션을 펼치는 사전(辭典)처럼 쓰는 게 정석이다.
가이드를 읽다 막히는 용어 빠른 참조.
| SaaS | Software as a Service. 월 구독으로 쓰는 클라우드 소프트웨어(구글 드라이브 등). 셀프호스팅이 대체하려는 대상. |
| 컨테이너 | 앱+의존성을 묶어 격리 실행하는 표준 단위. Docker가 대표. |
| 이미지 | 컨테이너의 "설치 파일". 실행하면 컨테이너가 된다. |
| 볼륨(Volume) | 컨테이너가 사라져도 데이터를 보존하는 저장 공간 연결. |
| Compose | 여러 컨테이너를 YAML 한 파일로 정의·기동하는 도구. |
| Podman | 데몬 없이(rootless) 도는 Docker 호환 컨테이너 엔진. 보안 이점. |
| 리버스 프록시 | 외부 요청을 받아 도메인별로 내부 앱에 분배하고 HTTPS를 관리하는 단일 진입점. |
| WireGuard | 가볍고 빠른 최신 VPN. 포트를 열지 않고 안전하게 원격 접속. |
| Kubernetes(K8s) | 다수 컨테이너의 배포·확장·복구를 자동화하는 오케스트레이션 시스템. |
| Ansible | 서버 설정을 코드로 정의해 자동 적용하는 구성 관리 도구. |
| Observability | 관측가능성. 지표·로그·추적으로 시스템 상태를 파악하는 것(Grafana 등). |
| 차등 프라이버시 | 데이터에 통계적 잡음을 더해 개인을 식별 불가능하게 보호하는 기법. |
| 3-2-1 백업 | 사본 3개·매체 2종·오프사이트 1개. 데이터 손실 방어의 표준 규칙. |
| awesome-list | 특정 주제의 좋은 자료·도구를 큐레이션해 모은 GitHub 문서 형식. |