운영 작업

Compose 중지·재시작·제거

보존 범위를 확인하고 설치 수명주기를 관리한다

무엇을 하게 되나

설치 데이터를 보존하며 Compose 서비스를 중지·재시작하고, 삭제가 필요한 때의 범위를 확인한다.

준비물

이번 설치의 project, env, 상태 디렉터리와 최근 성공 백업을 확인한다. 진행 중 turn과 미수거 checkpoint 수를 먼저 보고 사용자에게 중단을 알린다.

단계

중지와 재시작

상태는 scripts/test-ops.sh status로 본다. 출력의 미수거 checkpoint 수를 확인하고, 수집 불가를 0개로 해석하지 않는다. 데이터를 보존하며 내리려면 stop, 같은 volume으로 다시 올리려면 start를 쓴다. 아래 두 명령은 중지와 재시작을 각각 선택해 실행한다.

scripts/test-ops.sh stop
scripts/test-ops.sh start

stop은 api, scheduler, reconciler와 세션이 만든 worker를 멈추고 컨테이너와 network를 지우되 volume은 남긴다. start는 상태 디렉터리의 current.json이 가리키는 release를 그대로 올리고 healthcheck를 기다린다. stop, compose down, 호스트 재부팅 중 무엇으로 내려갔든 같다. deploy는 쓰지 않는다. release가 이미 기록돼 있으면 deploy는 use upgrade로 거부하고, 멈춘 설치에서 upgrade는 postgres가 없어 실패한다. 배포한 적 없는 호스트와 끝나지 않은 업그레이드(pending.json)가 있는 설치에서는 start도 거부한다. 후자는 같은 release 파일로 upgrade를 다시 불러 푼다.

start는 checkout이 release의 source commit이 아니어도 infra/가 그 commit의 것과 같으면 올린다. compose 파일만 checkout에서 읽기 때문이다.

env 파일의 값을 바꾼 설치에는 scripts/test-ops.sh upgrade /var/lib/werft/test-ops/current.json으로 같은 release를 다시 적용한다. start가 바뀐 env 값을 반영한다고 가정하지 않는다.

DB와 workspace volume은 남는다. LocalStack은 volume 없이 메모리에 저장하므로 컨테이너를 내리면 -v가 없어도 checkpoint object가 사라진다. DB에 미수거 checkpoint가 남아 bucket이 비면 API가 시작을 거부한다. 시험 설치의 재부팅에서 reseed 조건을 확인한다. 미수거 checkpoint가 있는 LocalStack 설치의 start와 운영 S3 설치의 재부팅 전체는 실행 확인하지 않았다.

호스트 재부팅

상주 서비스는 restart: unless-stopped이므로 Docker가 자동 시작되고 컨테이너가 남아 있으면 재부팅 뒤 다시 시작한다. stop 또는 compose down으로 컨테이너를 제거했다면 scripts/test-ops.sh start로 올린다. 이전 release에서 restart 정책이 달랐던 설치는 컨테이너를 새 정책으로 다시 만들기 전까지 예전 동작을 유지한다. LocalStack 컨테이너 재생성은 object를 잃으므로 시험 설치의 재부팅 경고를 따른다.

재부팅 전 진행 중 turn·status·호스트 밖 백업을 확인한다. 재부팅 뒤 NTP·XFS prjquota·Docker 자동 시작·디스크와 inode·status·ready를 확인하고, 기존 세션을 재개해 새 worker가 checkpoint를 이어받는지 본다.

첫날 점검

  • 설치 직후·1시간 뒤·업무 종료 전에 scripts/test-ops.sh status로 서비스·release·object store·ready·scheduler/reconciler health를 확인한다.
  • api·scheduler·reconciler 로그와 디스크·inode·quota를 확인한다. 디스크 여유 20% 아래로 내려가기 전에 대응한다.
  • 자동 백업과 실패 알림을 시험하고 GC dry-run을 별도 일정에 둔다.
  • key 폐기 연락과 비용·토큰 상한(Compose·chart의 SESSION_COST_LIMIT_USD 기본값 25 USD)을 사용자에게 안내한다.
  • Anthropic 등 제공자 콘솔에 월 한도를 걸고, 세션당 상한과 플랫폼의 추정 비용을 제공자의 실제 비용과 함께 대조한다.
  • Datadog 기준에 맞춰 감시한다.

설치 전체 삭제를 선택한 경우

reset은 중지·재시작 명령이 아니다. 이 설치의 컨테이너와 volume(DB·LocalStack), worker 컨테이너와 workspace volume, 세션·checkpoint·API key를 지운다. 이번 project의 삭제 범위를 대조하고 백업과 별도 대상 복원이 확인된 경우에만 다음을 실행한다.

scripts/test-ops.sh reset --yes

확인

stop 뒤 해당 project의 컨테이너가 내려갔는지, start 뒤 같은 release·owner·데이터와 ready가 유지됐는지 실제 출력으로 확인한다. 미수거 checkpoint가 있는 재부팅과 AWS S3 설치 재부팅 전체는 실행 확인하지 않았다.

자주 막히는 곳

pending.json이 있으면 start와 이전 release 적용이 거부된다. 원인을 고치고 pending과 같은 대상 release로 upgrade를 재실행한다. ready 200만으로 세션 context 보존을 판단하지 않는다.

되돌리기

중지 상태를 되돌리는 것은 start다. reset은 DB·checkpoint·workspace를 잃는 별도 파괴 작업이며 중지의 반대 명령이 아니다. 삭제 전에 복원 가능한 백업과 이번 project의 리소스 목록을 대조한다.

다음에 읽을 곳

백업과 복원, Compose 업그레이드.

이 페이지