🔬 과학·테크

셀프호스팅 입문 가이드 — 메모앱 설치 끝났다면 진짜 시작, 첫 한 달에 무너지는 5가지 벽과 해결책

_eNKI 2026. 6. 3. 07:45
반응형

셀프호스팅 입문 가이드 — 메모앱 설치 끝났다면 진짜 시작, 첫 한 달에 무너지는 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개
  • 입문자용 최소 구성:
    1. 라이브 데이터 (NVMe SSD)
    2. 외장 HDD 또는 NAS로 주 1회 rsync
    3. 암호화 후 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. 1주차: Cloudflare Tunnel + Caddy로 외부 접속 + HTTPS 동시 정리
  2. 2주차: restic + 외장 HDD + B2로 3-2-1 백업 자동화, 복원 1회 테스트
  3. 3주차: Uptime Kuma + Telegram 알림 연결, 일부러 1개 컨테이너 죽여 알림 확인
  4. 4주차: 수동 업데이트 루틴 고정 (예: 매주 일요일 22시)

메모앱 하나로 시작했더라도 이 네 가지가 박히면, 그다음 무엇을 올려도 같은 패턴으로 안전하게 늘릴 수 있다. 첫 한 달에 운영 근육을 만들어 두는 것이 6개월 뒤 포기를 막는 유일한 방법이다.

📌 참고 자료

반응형