업그레이드
scripts/upgrade.sh 래퍼는 동작 중인 설치를 in-place로 업그레이드합니다. 어떠한 작업 전에도 사전 백업을 먼저 수행하며, docker-compose pull + up -d 흐름을 사용해 이미지 해시가 변경된 서비스만 재생성합니다.
대상 독자
포털 호스트의 sudo 권한 운 영자. docker-compose ps/logs에 익숙해야 합니다.
호환성 및 정책
- Forward-only Alembic 마이그레이션. 본 포털은
alembic downgrade를 지원하지 않습니다. 되돌리려면 사전 백업을 복원하세요(롤백). - 마이너·패치 업그레이드는 동일 메이저 버전 내에서 항상 in-place 지원됩니다. 메이저 업그레이드(예: 2.x → 3.x)는 별도 릴리스 노트로 안내되며
scripts/upgrade.sh를 무작정 사용하면 안 됩니다. - 다운타임 예상: 이미지가 변경된 서비스가 재생성되는 동안 포털이 잠시 중단됩니다. 일반적으로 30초 이내.
사전 요구사항
- 직전 정상 설치 상태 (즉,
docker-compose -f docker-compose.yml ps출력에서 모든 서비스가 healthy). - PATH의
docker-compose(V1). - 새 이미지 레이어와 사전 백업을 위해 5 GB 이상 여유 디스크.
- 의도한
IMAGE_TAG가.env에 명시 (혹은 마법사 기본값0.11.0사용). 사설 레지스트리를 운영한다면IMAGE_TAG는 그곳에 게시된 매니페스트와 일치해야 합니다.
1단계 — 업그레이드 시점 점검
조용한 시점을 선택합니다(진행 중인 스캔 없는 시점). 대시보드 /scans에서 전역 큐가 모두 비기를 기다리세요.
docker-compose -f docker-compose.yml ps
모든 행이 Up (healthy)여야 합니다. 재시작 중이거나 unhealthy인 서비스가 있으면 먼저 그것을 해결하세요 — 깨진 설치 위에 업그레이드를 쌓지 마세요.
2단계 — 업그레이드 래퍼 실행
bash scripts/upgrade.sh
흐름:
- 사전 백업 —
bash scripts/backup.sh(필수, 건너뛰는 플래그 없음). docker-compose pull— 새 이미지 가져오기.docker-compose up -d— 이미지 해시가 변경된 서비스만 재생성.alembic upgrade head— 새로운 마이그레이션 적용.- Health 프로브 —
/health를 최대 60초간 폴링.
성공 시 출력:
✓ backend is healthy
Upgrade complete
If something looks off, restore the pre-upgrade backup:
bash scripts/restore.sh $(ls -td backups/* | head -1)
3단계 — 업그레이드 검증
- 포털에 로그인.
- /admin/health 방문 — 모든 컴포넌트가 녹색이어야 합니다.
- 알려진 프로젝트(혹은 가장 최근 스캔된 프로젝트)에 작은 스캔을 실행. WebSocket 진행률이 Completed까지 이동하는지 확인.
- 릴리스 노트가 새 admin 화면이나 설정을 안내한다면 한 번씩 점검합니다.
롤백
업그레이드 후 포털이 망가졌다면 사전 백업을 복원합니다.
bash scripts/restore.sh "$(ls -td backups/* | head -1)"
scripts/restore.sh 동작:
- 파괴적 작업을 대화형으로 확인 (y 입력).
- 애플리케이션 컨테이너(
backend,frontend,worker,beat) 중지. PostgreSQL과 Redis는 유지. - PostgreSQL 덤프(
postgres.sql.gz) 복원. - workspace tar(
workspace.tar.gz)이 있다면 복원. - 애플리케이션 컨테이너 재시작.
- Alembic head가 백업의
manifest.json과 일치하는지 검증.
manifest.json이 없거나 head가 일치하지 않으면 경고를 출력하며 alembic upgrade head를 수동 실행해야 합니다.
데이터 손실
restore.sh는 라이브 데이터베이스 내용과 WORKSPACE_HOST_PATH 디렉터리를 교체합니다. 되돌릴 수 없습니다. 가리키는 백업이 올바른지(ls -td backups/*는 최신 순) 반드시 확인하세요.