- 2020년 락다운 때 웹 개발을 시작한 Varun은 Replit과 개인 PC를 거쳐, 집에서 직접 서비스와 실험 프로젝트를 운영하는 홈랩을 구축함
- 학교용 실시간 퀴즈 게임 Quickz, 직접 만든 소셜 미디어 플랫폼, Scratch 커뮤니티 도구처럼 실제 사용자가 있는 서비스가 늘면서 셀프호스팅 운영 경험도 함께 커짐
- Windows 10 Pro로 시작한 첫 서버는 업데이트와 다운타임 문제를 겪었고, 2020년 11월 Ubuntu Server로 옮기며 Linux·nginx·Docker 기반 운영으로 전환함
- Dell OptiPlex의 저장공간과 성능 한계가 드러난 뒤, 2022년 5월 중고 Dell PowerEdge R720XD를 들여 Proxmox와 Ubuntu Server VM 구조로 확장함
- 직접 만든 Dock’n’Roll은 Replit식 빠른 배포 흐름을 자체 하드웨어와 도메인에서 재현하지만, 홈랩은 자유와 학습만큼 소음·전력·이사 같은 현실적 제약도 함께 남김
방 안의 홈랩과 운영 중인 서비스
- Varun은 집에서 두 대의 서버를 운영함
- 바닥의 Dell OptiPlex
- 작은 IKEA 커피 테이블 위의 Dell PowerEdge R720XD
- 두 서버는 빨간색과 노란색 이더넷 케이블로 연결돼 있음
- 홈 서버에는 실험 프로젝트부터 실제 사용자가 있는 서비스까지 함께 올라가 있음
- 수천 명의 사용자가 있는 직접 만든 소셜 미디어 플랫폼
- 학교용 실시간 퀴즈 게임 Quickz
- MYP Personal Project 데모 인스턴스인 플립북 스타일 애니메이션 제작·공유 플랫폼
- Scratch 커뮤니티용 검색 엔진 같은 도구
- 친구들을 위한 게임 서버
- 여러 Plausible Analytics 인스턴스
- 실험용 프로젝트를 만들고 호스팅하는 Replit 유사 도구
2020년 락다운에서 시작된 셀프호스팅
- 출발점은 2020년 락다운 시기였고, 당시 Varun은 13세였음
- 처음에는 정적 HTML 웹사이트로 웹 개발을 시작했고, 곧 백엔드가 필요한 더 복잡한 앱을 만들기 시작함
- 초반 웹 앱, Discord 봇, 자동화 스크립트는 Replit에서 호스팅함
- Minecraft 서버는 개인 컴퓨터를 계속 켜 두는 방식으로 친구들에게 제공함
- 클라우드보다 집 서버를 택한 이유는 비용 절감보다 전체 스택 학습에 가까웠음
- 사용자-facing 프런트엔드
- 백엔드와 데이터베이스
- 실제로 서비스를 올리는 서버 운영까지 직접 익히고 싶어 함
- 본인 규모에서는 클라우드를 쓰는 편이 더 비용 효율적일 수 있다고 봄
첫 서버: Dell OptiPlex와 Windows 10 Pro
- eBay에서 i7-3770S와 8GB RAM이 들어간 Dell OptiPlex를 구함
- 미국에서 스위스로 배송받는 과정에서 판매자가 처음에 잘못된 RAM 용량을 보냈고, 해결까지 몇 주가 걸림
- 익숙하다는 이유로 처음에는 Windows 10 Pro를 서버 운영체제로 계속 사용함
- 집에 정적 IPv4 주소가 있어 웹사이트 호스팅이 더 쉽고 안정적이었음
- 모든 서비스는 Cloudflare 뒤에 두었고, Cloudflare가 무료로 SSL, DNS, DDoS 보호로 추정되는 기능을 처리함
Windows에서 Ubuntu Server로 전환
- 당시 Windows 10 서버 운영에는 Varun에게 몇 가지 장점이 있었음
- 이미 Windows에 익숙했음
- 개인 데스크톱과 비슷한 환경에서 테스트할 수 있었음
- 집에서는 RDP로 빠르고 품질 좋은 연결을 사용할 수 있었음
- 학교 지급 Chromebook에서는 웹 기반 접근이 필요해 Chrome Remote Desktop을 사용할 수 있었음
- Windows 업데이트가 다운타임을 만들고 창 배치를 다시 해야 하는 일이 반복되자, 2020년 11월 Ubuntu Server로 전환함
- 전환 전에는 시스템 전체를 빠르게 파악하는 감각을 잃을까 걱정했지만, Windows에서 코드 작성 중 명령줄에 익숙해진 덕분에 Linux 적응은 빠르게 진행됨
- 초기 Linux 구성은 단순하지만 위험 요소도 함께 안고 있었음
- 인터넷에 노출된 nginx가 포트 443에서 자체 서명 인증서로 HTTPS 트래픽을 처리하고 Cloudflare가 아닌 요청은 거부함
- 24시간 온라인 상태로 두고 싶은 여러 프로젝트를 실행함
- 프로젝트들이 공유하는 MongoDB 인스턴스 하나를 운영함
- Minecraft Java 서버 몇 개를 실행함
- 학교에서 서버에 접근하려고 webssh2를 노출했지만, 스스로도 매우 안전하지 않았을 가능성을 인정함
- 서드파티 소프트웨어 설치는 의존성과 apt 저장소 추가로 빠르게 복잡해졌고, Docker가 설치와 실행을 단순화하는 도구가 됨
- 서드파티 소프트웨어는 Docker로 실행함
- 직접 작성한 코드는 서버에서 직접 실행함
저장공간 한계와 PowerEdge R720XD 도입
- 약 1년 뒤 Quickz와 직접 만든 소셜 미디어 플랫폼처럼 실제 사용자가 있는 프로젝트를 운영하게 됨
- 학교에 있는 동안 서버가 멈췄고, SSH 접속을 시도했지만 디스크 오류가 나타난 뒤 결국 잠김
- 원인은 저장공간 부족이었고, 집에서 일부 파일을 삭제해 시간을 벌었음
- 기존 Dell OptiPlex는 8GB RAM과 i7-3770S로 늘어난 사용량을 감당하기 어려워짐
- 2022년 5월, 버그 바운티로 모아둔 돈을 써서 중고 Dell PowerEdge R720XD를 구입함
- 3TB 드라이브 3개
- DDR3 RAM 128GB
- 전력 소모가 큰 2×E5-2690 CPU
- 구입 전에는 공간, 소음, 전력 소모를 충분히 고려하지 않았고, iDRAC 팬 속도를 지원되지 않는 해킹으로 10% 고정해 소음 문제 일부를 줄임
- R720XD에는 전원공급장치, CPU, NIC가 두 개씩 있고, 꺼져 있어도 원격 관리가 가능한 미니 컴퓨터 성격의 iDRAC도 있음
- 처음에는 거실 TV 옆 커피 테이블에 서버를 올려두었고, 랙과 장착 장비는 서버 자체보다 비쌌음
Proxmox와 원격 접속 구조
- 새 서버에서는 하이퍼바이저를 사용하기로 하고 Proxmox를 실행함
- 대부분의 자원은 Ubuntu Server VM에 할당했고, 모든 서비스는 이제 Docker 안에서 정리돼 실행됨
- 이 구조 덕분에 나중에 서비스를 옮길 때 모든 것을 다시 설정하지 않아도 되는 유연성이 생김
- 별도로 Xubuntu VM인
backdoor를 운영하며 Chrome Remote Desktop을 사용함- 어디서든 홈 네트워크에 편한 작업 공간으로 접근할 수 있음
- OpenVPN이나 WireGuard 같은 VPN을 설정할 수도 있지만, 이 방식은 iPad 같은 제한된 기기와 학교 공용 Wi-Fi에서도 동작함
- 봇의 무차별 대입 시도를 걱정하지 않아도 되는 점도 장점으로 봄
Replit 경험을 자체 구현한 Dock’n’Roll
- 여러 서버를 갖춘 뒤에도 Replit의 빠른 실험 흐름은 계속 아쉬움으로 남음
- Replit은 일회성 프로젝트, 실험, 데모용 격리 앱을 빠르게 띄우기 좋았고, 웹 IDE에서 코드를 쓰면 즉시 웹에 공개되는 흐름이 강점이었음
- Replit은 무료였지만 수익화를 위한 기능을 도입했고, 비활성 repl은 사용자가 없으면 비활성화되며, 무료 공개 동적 웹사이트 호스팅도 더 이상 가능하지 않다고 이해함
- Varun은 자체 하드웨어와 직접 제어하는 도메인을 쓰기 위해 Docker 기반의 셀프호스팅 Replit 클론 Dock’n’Roll을 만듦
- Dock’n’Roll은 단일 사용자 서비스임
- 비공개 인터페이스
dockn.varun.ch에서 웹 앱을 코딩함 - 결과물은
*.varunbiniwale.com아래에서 즉시 공개 접근 가능함
- 비공개 인터페이스
- 구성 요소는 다음과 같음
- ExpressJS로 만든 제어판과 VSCode의 Monaco Editor 기반 웹 인터페이스
- 프로젝트 시작 버튼이 Docker Engine API로 이미지를 빌드하고 컨테이너를 실행함
- 프로젝트 메타데이터는 Redis에 저장함
- 각 컨테이너의 포트 80은 Lua 플러그인으로 Redis와 통신하는 OpenResty 리버스 프록시를 통해
:project.varunbiniwale.com으로 자동 노출됨 /persisted/아래 파일은 컨테이너 재시작 후에도 유지되고 웹 인터페이스에서 확인·수정할 수 있음- 웹 관리자 인터페이스는 직접 만든 custom nginx auth proxy로 보호됨
- Dock’n’Roll은 버그 헌팅에도 활용됨
- blind SSRF와 XSS 같은 취약점을 찾는 데 쓰는 임의의 도구를 호스팅함
yourip.varunbiniwale.com에서 자동 생성 이미지를 제공하는 예시가 있음
홈랩의 현재와 앞으로의 제약
- Varun은 자신의 홈랩이 조금 과할 수 있지만, 직접 소유하고 좋아하는 환경이라고 정리함
- 언젠가 졸업 후 대학 진학을 위해 이사하게 되면 서버를 가져가지 않을 가능성이 높고, 부모님 집에서 계속 하드웨어를 돌리는 부담도 주고 싶지 않다고 봄
- 셀프호스팅은 모두에게 맞는 방식은 아니지만, tinkerer이고 결과를 감당할 의지가 있다면 작은 셀프호스팅을 시도해볼 만하다고 봄
- 직접 서버를 운영하며 많은 것을 배웠고, 자기 통제 아래 도구와 프로젝트를 실행할 장소를 갖는 경험에서 자유를 느낌
- 이 구성은 때때로 스트레스를 만들고 가장 실용적인 방식도 아닐 수 있지만, 다른 방법으로는 배우기 어려웠을 많은 기술을 얻게 해줌