CLI개인서버백업모니터링복구
개인 서버 구축 5: 백업·모니터링·복구 운영을 완성하는 CLI 프롬프트
변수 입력8개
변수를 채운 뒤 완성본을 복사하세요
구축의 완료는 복구 가능성으로 판단한다
홈 서버는 cloud VM 비용을 줄이는 대신 전원, 회선, 디스크, 온도, 보안 업데이트를 직접 책임진다. 서비스가 오늘 접속된다는 사실보다 장애 후 데이터를 되살리고 안전하게 이전 버전으로 돌아갈 수 있는지가 더 중요하다.
이 단계에서는 3-2-1 backup 원칙을 목표로 삼는다. 데이터 사본 3개, 서로 다른 매체 2종, 집 밖의 off-site 사본 1개를 지향하되 개인정보와 secret은 전송 전 암호화한다. backup job의 성공 로그만 믿지 않고 격리된 위치에서 정기적으로 restore drill을 수행한다.
준비할 정보
{{SERVICES}}: Compose project와 중요도{{DATA_INVENTORY}}: DB, upload, config, secret, 재생성 가능한 cache 구분{{RPO}}: 허용 가능한 데이터 손실 시간{{RTO}}: 허용 가능한 복구 시간{{BACKUP_TARGETS}}: local external disk와 암호화된 off-site 위치{{ALERT_CHANNEL}}: email 등 장애 시 실제 확인할 수단{{MAINTENANCE_WINDOW}}: update·reboot 가능 시간{{POWER_NETWORK_LIMITS}}: 정전, 동적 IP, 회선 장애 대응 범위
복사해서 쓰는 CLI agent 프롬프트
Tailscale, Cloudflare Tunnel, Docker Compose로 운영하는 개인 서버의 운영 체계를 설계해줘.
서비스: {{SERVICES}}
데이터 목록: {{DATA_INVENTORY}}
목표 RPO/RTO: {{RPO}} / {{RTO}}
backup 위치: {{BACKUP_TARGETS}}
alert 수신: {{ALERT_CHANNEL}}
maintenance window: {{MAINTENANCE_WINDOW}}
전원·회선 제약: {{POWER_NETWORK_LIMITS}}
작업 규칙:
1. 파일을 '원본 데이터 / DB / upload / config / secret / image로 재생성 가능 / 임시 cache'로 분류하고 각 항목의 backup·복구 순서·보존 기간을 표로 만들어.
2. database는 engine에 맞는 일관된 logical 또는 physical backup을 설계해. 실행 중인 DB volume을 단순 복사하는 방법을 정상 backup으로 간주하지 마.
3. 3-2-1 원칙과 {{RPO}}를 만족하는 local·off-site schedule을 제안해. off-site 전송 전에 암호화하고 key는 backup 데이터와 분리해.
4. backup destination, 남은 용량, checksum, 최근 성공 시각을 검증해. job exit code 0만으로 성공 판정하지 마.
5. production data를 덮어쓰지 않는 격리된 경로에서 restore drill 절차를 만들고, 실제 복구 시간과 누락 항목을 기록해. 운영 DB restore는 별도 명시 승인 없이는 실행하지 마.
6. CPU, memory, load, disk 사용률·inode, SMART, 온도, container health·restart, HTTP health, certificate, cloudflared, tailscaled, backup age를 감시해. alert threshold와 지속 시간을 함께 정해 일시 spike 알림을 줄여.
7. log에는 rotation과 보존 상한을 두고 secret, token, 개인정보가 남는지 확인해. 문제 조사에 필요한 최소 기간만 보존해.
8. OS security update, Docker·cloudflared·Tailscale update를 자동·수동으로 구분해. 자동 reboot를 켜기 전 maintenance window와 부팅 후 검증·원격 복구 수단을 정해.
9. image와 dependency update는 backup -> 새 version 확인 -> pull -> 점검 -> 배포 -> smoke test -> 관찰 -> rollback 순서의 runbook으로 작성해. `latest`만으로 이전 version을 잃지 마.
10. 정전, disk failure, ISP outage, domain 만료, tunnel token 노출, tailnet 계정 잠김, 애플리케이션 오류를 시나리오별로 탐지·초동·복구·사후조치로 정리해.
11. destructive cleanup, volume 삭제, DB restore, firewall 변경, credential revoke·rotation은 대상과 영향, backup, rollback을 보여주고 승인을 기다려.
12. 명령과 문서에는 실제 secret을 넣지 말고 placeholder와 secret manager 위치만 표시해.
결과는 '서비스 등급 / 데이터·backup matrix / 자동화 schedule / restore drill / monitoring·alert / update runbook / 장애 시나리오 / 월간 점검표 / 폐기·이전 절차' 순서로 작성해.최소 운영 점검표
매일 자동 확인
- public health와 주요 사용자 흐름
- container unhealthy·restart loop
- disk 사용률·inode·온도·SMART 이상
- backup 최근 성공 시각과 off-site 복제 상태
cloudflared,tailscaledservice 상태
매주 사람이 확인
- 실패한 systemd unit과 반복 오류 log
- 보류된 security update와 reboot 필요 여부
- backup 용량 증가율과 보존 정책
- 공개 listening port와 Cloudflare hostname 목록
- 관리자·tailnet device·Access 허용 사용자 변화
매월 또는 주요 변경 후 확인
- 격리 환경 restore drill과 실제 RPO/RTO 기록
- 직전 image·compose config로 rollback 연습
- domain 자동 갱신, 결제 수단, 복구 이메일
- 분실 장치와 사용하지 않는 SSH key·token 제거
- UPS가 있다면 shutdown 정책과 배터리 상태
읽기 전용 점검 명령 예시
uptime
free -h
df -hT
df -ih
systemctl --failed
systemctl status tailscaled cloudflared --no-pager
docker compose ps
docker system df
sudo ss -lntupdocker system prune, 오래된 backup 삭제, volume 제거는 점검 명령이 아니다. 자동 정리 전에 보존 대상과 복구 가능성을 별도로 검증한다.
장애 복구 우선순위
- 사람과 데이터의 안전을 확인한다. 과열·타는 냄새·배터리 팽창이 있으면 전원을 차단한다.
- 변경을 멈추고 장애 시작 시각과 최근 배포·update를 기록한다.
- 외부 health, Cloudflare, tunnel, host, container, application, DB 순으로 경계를 좁힌다.
- 증거를 보존하되 secret과 개인정보를 외부로 복사하지 않는다.
- RTO 안에 원인 수정이 어렵다면 검증된 이전 image·config 또는 대체 안내 페이지로 복구한다.
- DB restore가 필요하면 현재 장애 데이터도 별도 보존하고 목표 시점·대상 DB를 재확인한다.
완료 기준
- 다른 장비에서 문서만 보고 서비스를 새로 올릴 수 있다.
- 가장 최근 backup을 격리 환경에 복원했고 소요 시간과 데이터 시점을 안다.
- 운영자가 외부에 열린 hostname과 port를 설명할 수 있다.
- 장애 알림이 서버 자체가 죽어도 외부 경로로 도착한다.
- OS, Docker, Tailscale, Cloudflare, domain 계정에 MFA와 복구 수단이 있다.
공식 자료
- Ubuntu 자동 보안 업데이트: https://documentation.ubuntu.com/server/how-to/software/automatic-updates/
- Docker daemon log 설정: https://docs.docker.com/engine/logging/configure/
- Tailscale device 관리: https://tailscale.com/docs/features/access-control/device-management
- Cloudflare Tunnel 상태 확인: https://developers.cloudflare.com/tunnel/monitoring/
댓글 0개
아직 댓글이 없습니다.
