셀프호스팅 입문 가이드 — 메모앱 설치 끝났다면 진짜 시작, 첫 한 달에 무너지는 5가지 벽과 해결책
셀프호스팅을 시작하고 Memos 컨테이너가 뜨고 브라우저에서 로그인까지 됐다면, 사실 그건 시작의 1/5만 끝난 것이다. 진짜 함정은 그 다음 한 달에 몰려 있다 — 외부에서 안 열리고, 인증서가 만료되고, 어느 날 데이터가 사라진다.
TL;DR
- 첫 달의 진짜 벽은 설치가 아니라 외부 접속·HTTPS·백업·모니터링·업데이트
- 포트포워딩 대신 Cloudflare Tunnel, HTTPS는 Caddy 한 줄이 정답
docker compose down -v한 번이면 named volume이 통째로 사라진다 — 3-2-1 백업 즉시 시작- Watchtower는 2025년 12월 공식 아카이브 — monitor-only로 알림만 받거나 대체재로 갈아타자
준비물: Docker가 설치된 서버(라즈베리파이/미니PC/VPS) 1대, 무료 Cloudflare 계정, 도메인 1개, 외장 저장소 1개
벽 1 — 외부 접속: 왜 포트포워딩은 더 이상 답이 아닌가
집 안에서만 쓰면 충분하다 싶다가, 출근길 지하철에서 메모를 적고 싶어지는 순간 막힌다. 공유기 포트를 여는 순간 그 IP는 며칠 안에 봇 스캔에 잡힌다.
포트포워딩이 만드는 3가지 비용:
- 공인 IP 또는 DDNS 운영
- 공유기 인바운드 포트 노출
- SSL 인증서 직접 발급/갱신
반면 Cloudflare Tunnel은 서버가 바깥으로 나가는 단일 outbound 커넥션만 유지한다. 인바운드 포트 0개, DDNS 0개, 무료 — 가정용 셀프호스팅의 사실상 표준이다. cloudflared 컨테이너 하나 + 대시보드 도메인 매핑이면 30분 안에 memo.내도메인.com이 살아 있다.
벽 2 — HTTPS: 직접 관리하지 마라
크롬이 "안전하지 않음"이라 띄우는 순간 가족은 더 이상 그 링크를 안 누른다. 첫 달에 Let's Encrypt 인증서를 직접 발급받겠다고 시간을 태우는 입문자가 가장 많다.
| 방식 | 자동 갱신 | 설정 난이도 | 추천도 |
|---|---|---|---|
| Nginx + certbot 수동 | 갱신 자주 깜빡 | 중상 | ✗ |
| Nginx Proxy Manager | 클릭 UI | 중 | △ |
| Caddy | 자동 | 한 줄 | ★ |
| Cloudflare Tunnel | Cloudflare가 처리 | 없음 | ★ |
Caddy와 Cloudflare Tunnel은 대체재가 아니라 조합이다. 외부 노출은 Tunnel로, 서버 내부 도메인 라우팅·HTTPS는 Caddy로 — 가정용 표준 스택이다.
Caddy 설정은 memo.내도메인.com { reverse_proxy memos:5230 } 한 줄로 끝난다. 80/443만 열려 있으면 인증서를 알아서 받고 갱신까지 끝낸다. 인증서 만료로 다음 달에 다시 디버깅하는 시간을 통째로 없앤다.
벽 3 — 백업: 한 줄로 모든 데이터가 사라진다
가장 흔한 사고는 디스크 고장이 아니다. docker compose down -v를 무심코 한 번. 그 순간 named volume이 통째로 삭제된다. 셀프호스팅 커뮤니티에 매주 올라오는 비명이다.
- 백업의 기준은 옛날부터 같다 → 3-2-1 룰: 사본 3개, 매체 2종, 원격 1개
- 입문자용 최소 구성:
- 라이브 데이터 (NVMe SSD)
- 외장 HDD 또는 NAS로 주 1회
rsync - 암호화 후 Backblaze B2 같은 오프사이트 (월 1~3천 원)
restic한 도구로 1·2·3 모두 자동화 가능- "백업이 있다"가 아니라 "복원해 봤다"가 백업이다 — 첫 달에 반드시 1회 복원 테스트
벽 4 — 모니터링: 며칠 뒤에 알면 의미가 없다
가족이 "사진 앱이 안 열려"라고 말해야 알게 되는 단계에서 벗어나야 한다. 입문자가 깔 모니터링 도구는 단 하나로 충분하다.
- Uptime Kuma — 컨테이너 하나, GUI에서 URL/포트 추가하면 끝
- 알림 채널 95종 이상, 그중 Telegram 봇 설정 3분이면 즉시 푸시 도착
- 자기 자신을 모니터링하지 마라 — Kuma는 셀프호스트 서버 밖에 두거나, 외부 ping 서비스로 Kuma를 한 번 더 감싸자
- "서버가 죽은 걸 모르는 단계"에서 "1분 안에 휴대폰에 뜨는 단계"로의 격차가 가장 크다
벽 5 — 업데이트: 자동 업데이트가 왜 새벽에 망가뜨리나
Watchtower로 모든 컨테이너를 자동 업데이트하면 편할 것 같지만, 2025년 12월 공식 아카이브된 상태라 더 이상 업데이트되지 않는다. 개발사 자신도 상용 환경 비권장이라 명시했었다.
- 새벽에 메이저 버전이 풀리면 자고 일어났을 때 DB 스키마가 깨져 있다
- 롤백 메커니즘이 없어 고장난 컨테이너를 그대로 재시작 루프에 넣는다
- 권장 패턴
WATCHTOWER_MONITOR_ONLY=true로 알림만 받거나, 후속 포크(nicholas-fedor/watchtower)·Diun 같은 알림 전용 도구로 교체- 주 1회 정해진 시간에
docker compose pull && docker compose up -d - 업데이트 전에 벽 3의 백업 실행 확인이 선행
첫 한 달, 이 순서대로 가자
순서를 지키면 사고 확률이 급격히 떨어진다.
- 1주차: Cloudflare Tunnel + Caddy로 외부 접속 + HTTPS 동시 정리
- 2주차: restic + 외장 HDD + B2로 3-2-1 백업 자동화, 복원 1회 테스트
- 3주차: Uptime Kuma + Telegram 알림 연결, 일부러 1개 컨테이너 죽여 알림 확인
- 4주차: 수동 업데이트 루틴 고정 (예: 매주 일요일 22시)
메모앱 하나로 시작했더라도 이 네 가지가 박히면, 그다음 무엇을 올려도 같은 패턴으로 안전하게 늘릴 수 있다. 첫 한 달에 운영 근육을 만들어 두는 것이 6개월 뒤 포기를 막는 유일한 방법이다.
📌 참고 자료
- After self-hosting for a year, here are my tips for beginners — XDA
- Cloudflare Tunnel Setup: Expose Self-Hosted Apps Without Port Forwarding — Panelica
- Caddy Reverse Proxy for Self-Hosted Services: Zero-Config HTTPS — Botmonster
- The 3-2-1 Backup Strategy for Self-Hosted Applications — ZeonEdge
- Uptime Kuma — A Fancy Self-Hosted Monitoring Tool — GitHub
- Watchtower isn't the set-and-forget solution everyone claims — XDA
- containrrr/watchtower — GitHub (Archived)
'🔬 과학·테크' 카테고리의 다른 글
| 라즈베리파이 5 vs N100 미니PC — 1년 홈서버 운영 후, 전기료보다 중요했던 3가지 기준 (0) | 2026.06.05 |
|---|---|
| Copilot·Cursor·Claude Code — 도구 차이보다 큰 격차는 사용자에서 난다 (0) | 2026.06.04 |
| 노코드 자동화에 AI 에이전트가 들어왔다 — n8n Zapier Make 선택 기준이 바뀐다 (0) | 2026.06.01 |
| 라즈베리파이 5 홈서버 구축기 — 1년 운영 후 진짜 쓸 만한 4가지 역할과 피해야 할 함정 3가지 (1) | 2026.05.13 |
| Copilot · Cursor · Claude Code의 함정 — 도입 6개월 뒤 마주한 진짜 비용 5가지 (0) | 2026.05.11 |