미니 PC에 Docker + Cloudflare Tunnel로 셀프 호스팅하기
집에 있는 미니 PC 한 대로 여러 웹 서비스를 안전하게 공개하는 법. 포트 개방 없이 Cloudflare Tunnel 로 HTTPS 를 붙이고 Docker Compose 로 굴립니다.
핵심 요약
미니 PC 에서 Docker Compose 로 서비스를 띄우고, Cloudflare Tunnel(cloudflared)로 포트 개방 없이 도메인·HTTPS 를 붙인다. 공유기 설정도, 고정 IP 도, 인증서 갱신도 필요 없다.
목차
클라우드 요금은 작은 프로젝트에 은근히 부담입니다. 저는 이 블로그를 포함한 몇 개 서비스를 집에 있는 미니 PC 한 대에 올려서 굴립니다. 방법을 공유합니다.
왜 미니 PC인가
- 늘 켜져 있고, 전기값은 월 몇천 원
- 도커만 있으면 배포 환경이 클라우드와 똑같음
- 트래픽이 커지면 그때 옮기면 됨
문제는 딱 하나, "집 네트워크를 어떻게 안전하게 바깥에 노출하냐"입니다.
포트를 열지 마세요
전통적으로는 공유기 포트포워딩 + DDNS + 인증서 갱신을 합니다. 번거롭고, 홈 네트워크를 그대로 인터넷에 여는 셈이라 위험하죠.
대신 Cloudflare Tunnel 을 씁니다. 미니 PC 에서 cloudflared 가 Cloudflare 로 바깥으로 연결을 열고, 트래픽은 그 터널로 들어옵니다. 바깥에서 열어둔 인바운드 포트가 0 이에요.
사용자 → Cloudflare(HTTPS) → 터널 → 미니 PC 의 컨테이너
- 공인 IP·포트포워딩 불필요
- HTTPS 인증서는 Cloudflare 가 자동 처리
- 유동 IP 여도 상관없음
Docker Compose 로 서비스 묶기
각 서비스는 컨테이너로 띄웁니다. Next.js 앱이라면 output: "standalone" 으로 빌드해 가벼운 이미지를 만들고요.
services:
blog:
build:
context: .
dockerfile: apps/blog/Dockerfile
container_name: why-next-blog
restart: unless-stopped
networks: [api]
networks:
api:
external: true # cloudflared 와 같은 네트워크
핵심은 cloudflared 와 같은 도커 네트워크에 두는 겁니다. 그래야 터널이 컨테이너 이름으로 서비스를 찾아가요.
도메인 붙이기
Cloudflare 대시보드(또는 터널 설정)에서 Public Hostname 을 하나 추가합니다.
blog.example.com → http://why-next-blog:3001
이게 끝입니다. docker compose up -d --build 하면 몇 분 뒤 도메인으로 사이트가 열려요.
정리
- 미니 PC + Docker = 저렴하고 클라우드와 동일한 배포
- Cloudflare Tunnel 로 포트 개방 없이 HTTPS·도메인
- cloudflared 와 같은 네트워크에 컨테이너 배치
- Public Hostname 으로
도메인 → 컨테이너:포트매핑
작은 서비스라면 이 조합만으로 충분히 오래 버팁니다. 저도 이렇게 여러 앱을 굴리며 만든 것들을 늘려가고 있어요.
자주 묻는 질문
집 IP 가 유동인데 괜찮나요?
괜찮습니다. Cloudflare Tunnel 은 미니 PC 가 Cloudflare 로 바깥 연결을 여는 방식이라, 공인 IP·포트포워딩·DDNS 가 전혀 필요 없습니다.
비용이 드나요?
Cloudflare Tunnel 자체는 무료입니다. 도메인 비용만 있으면 시작할 수 있습니다.
관련 글
- 💻 개발
AI가 코드를 짜주는 시대, Git은 왜 더 중요해졌나
AI가 코드를 다 써주는데 Git을 배워야 하나요? 순서가 거꾸로다. AI가 코드를 쓰기 때문에 Git이 필요하다. 거의 모든 코드를 AI와 함께 쓰는 1인 개발자가 정리한, AI 시대에 Git·GitHub와 친해져야 하는 네 가지 이유.
- 💻 개발
이중 실행을 막았더니, 크래시 한 번에 영원히 잠겼다
백그라운드 잡의 중복 실행을 막으려고 넣은 상태 가드가, 배포 중 프로세스가 죽자 잡을 '생성 중' 상태에 영구히 가둬버렸다. 잠금에는 반드시 풀리는 길이 함께 있어야 한다는 이야기.
- 💻 개발
Next.js로 MDX 블로그 직접 만들기 - 이 블로그를 만든 방법
CMS 없이 마크다운 파일만으로 굴러가는 블로그를 Next.js 16 App Router 로 만든 과정. 폴더 구조, MDX 설정, SEO 까지 실제 코드 흐름으로 정리했습니다.