2026년 11월 13일 금요일

포트 하나 안 열고 홈 서버 운영하기 (4) 백업과 정기 정비

홈서버-따라하기 시리즈 4편. 서버를 세우는 것보다 계속 굴리는 쪽이 일이 많다. 매일 도는 백업과, 한두 달에 한 번 하는 정비 절차를 적는다.

매일: 암호화 원격 백업

백업은 서버 밖에 있어야 의미가 있다. rclone 의 crypt 리모트를 쓰면 클라우드 드라이브에 올리되 내용과 파일 이름을 암호화할 수 있다.

  • DB 는 파일 복사가 아니라 덤프로 뜬다: docker exec <db 컨테이너> sh -c 'pg_dump -U "$POSTGRES_USER" -Fc "$POSTGRES_DB"'
  • 볼륨은 임시 컨테이너로 묶는다: docker run --rm -v <볼륨>:/data:ro -v /backup:/out alpine tar czf /out/data.tgz -C /data .
  • 모은 것을 rclone sync /backup crypt-remote:server 로 올린다.
  • 실행은 cron 대신 systemd timer 로 걸었다. 실패가 systemctl status 와 저널에 남아서 확인이 쉽다.

백업 스크립트를 Windows 에서 편집했다면 줄 끝이 LF 인지 꼭 확인한다. CRLF 면 예약 실행에서만 조용히 실패한다.

정비 전

docker ps --format '{{.Names}}\t{{.Image}}\t{{.Status}}' | sort > ~/pre-upgrade.txt
docker info --format '{{.LiveRestoreEnabled}}'

두 번째 명령이 false 면 Docker 패키지가 갱신될 때 컨테이너가 전부 재시작된다. 그 시간대에 해도 되는지 먼저 판단한다.

업그레이드

sudo systemd-run --unit=apt-upgrade \
  sh -c 'apt-get update && apt-get -y upgrade > /var/log/apt-upgrade.log 2>&1'

ssh 가 끊겨도 계속 돌도록 별도 유닛으로 실행하고 로그를 파일로 남긴다. 커널이 올라갔으면 재부팅한다. 내 서버는 재부팅 뒤 1분 남짓이면 원격 접속이 돌아왔다.

정비 후

docker ps --format '{{.Names}}\t{{.Image}}' | sort | diff <(cut -f1,2 ~/pre-upgrade.txt) - && echo OK
systemctl is-active cloudflared
curl -sI https://app.example.com | head -1

컨테이너 목록이 정비 전과 같은지, 터널이 살아 있는지, 바깥에서 실제로 열리는지 세 가지를 본다.

개별 서비스 업그레이드 순서

  1. 컨테이너를 멈춘다.
  2. 볼륨을 tar 로 백업한다(DB 는 덤프).
  3. 현재 이미지에 롤백용 태그를 붙여 둔다: docker tag app:latest app:rollback-1.2.3
  4. 새 버전으로 올린다. 이미지 태그는 latest 대신 버전을 고정해 두면 "언제 무엇이 바뀌었는지"가 분명해진다.
  5. 확인이 끝나면 예전 컨테이너는 지운다. 이름만 바꿔 남겨 두면 restart=always 때문에 다음 데몬 재시작 때 되살아나서, 이미 마이그레이션된 데이터에 구버전이 붙을 수 있다. 롤백 자료는 이미지 태그와 백업 파일로 충분하다.

기록

정비할 때마다 날짜, 올라간 버전, 평소와 달랐던 점을 한 줄씩 남긴다. "재부팅 직후 이 컨테이너는 몇 번 재시작하다 붙는다 — 정상" 같은 메모가 다음 정비 때 시간을 아껴 준다. 단, 확인한 사실과 추측은 구분해서 적는다. 추측을 사실처럼 적어 두었다가 낭패를 본 이야기는 운영 라벨의 글에 있다.

시리즈 전체 목록은 여기.

댓글 없음:

댓글 쓰기

반도체 주식을 보기 전에 그려 두는 지도 — 설계, 파운드리, 메모리, 장비, 소재, 후공정

"반도체주"라고 한 묶음으로 부르지만, 그 안의 회사들은 하는 일도 돈 버는 방식도 전혀 다르다. 같은 뉴스에 어떤 회사는 오르고 어떤 회사는 내리는 이유가 여기에 있다. 종목을 들여다보기 전에 머릿속에 그려 두면 좋은 지도를 정리한...