백업과 복원
포털은 두 스크립트를 제공합니다 — scripts/backup.sh와 scripts/restore.sh. PostgreSQL 데이터베이스와 workspace 볼륨이라는 두 상태 산출물을 다루며, 백업 시점의 Alembic head를 기록한 manifest를 함께 둡니다.
호스트 sudo 권한 보유 super_admin. pg_dump, tar, cron에 익숙해야 합니다.
백업 내용
v0.10.0 에는 두 디렉터리 명명 형식이 공존합니다.
- CLI 레거시 —
backups/YYYY-MM-DD-HHMMSS/(scripts/backup.sh와 아래 예시에서 사용). - UI / Celery —
backups/(auto|manual)-YYYYMMDDTHHMMSSZ/(apps/backend/tasks/backup.py와/admin/backup페이지에서 사용 — prefix 가 일일 Celery Beat 잡인지 운영자 클릭인지를 표시). 백업 트리거 섹션이 언급하는auto-보존 정리는 이 prefix 를 키로 동작합니다.
두 형식 모두 동일한 postgres.sql.gz + workspace.tar.gz + manifest.json 트리플로 디코드되며 복원 측에서는 호환 — 복원 스크립트(와 UI 복원 엔드포인트)가 둘 다 받습니다.
backups/2026-05-09-030000/
├── postgres.sql.gz # pg_dump --clean --if-exists | gzip
├── workspace.tar.gz # $WORKSPACE_HOST_PATH의 tar -czf
└── manifest.json # 타임스탬프, alembic head, db 크기, workspace 경로
postgres.sql.gz—--clean --if-exists포함 전체 논리적 덤프. 재적용 시 객체를 drop+recreate한 후 데이터 재삽입.workspace.tar.gz— 워커에/workspace로 마운트된 호스트 디렉터리. 스캔별 소스 클론(<scan_id>/source/), scancode 라이선스 탐지 출력(<scan_id>/scancode/scancode.json), cdxgen SBOM 캐시(<scan_id>/cdxgen/)를 포함.manifest.json—timestamp,alembic_head,db_size,workspace_path. 복원 스크립트가 라이브 상태와alembic_head를 검증.
포털은 .env(비밀값 포함 — 별도 비밀 관리 도구로 보관)와 Traefik의 ACME 상태(Let's Encrypt가 몇 분 내 재발급)는 백업하지 않습니다.
수동 백업 실행
bash scripts/backup.sh
출력:
Backup → backups/2026-05-09-030000
✓ wrote backups/2026-05-09-030000/postgres.sql.gz (12M)
✓ wrote backups/2026-05-09-030000/workspace.tar.gz (840M)
✓ wrote backups/2026-05-09-030000/manifest.json (alembic head = 9f1c8d2a3b4e)
Backup complete
backups/2026-05-09-030000
스크립트는 종료 시점에 BACKUP_RETENTION_DAYS(기본 7)보다 오래된 백업을 정리합니다. --no-prune으로 정리 생략 가능.
Admin UI 로 수동 백업
브라우저를 선호하는 운영자라면 /admin/backup이 셸로 떨어지지 않고도 같은 백업·복원 흐름을 노출합니다.

목록 표는 여섯 컬럼을 보여줍니다 — NAME, KIND, CREATED, SIZE, DB REVISION, ACTIONS. 갓 설치된 환경에서는 본문이 인라인 empty 카드("No backups yet…")로 시작합니다 — 툴바의 Run manual backup now 또는 Upload and restore… 로 채우거나 야간 자동 잡을 기다립니다.
백업 트리거
/admin/backup을 엽니다(Admin 사이드바 → Backup).- Run manual backup now를 클릭합니다. 버튼은
super_admin전용입니다. - 포털이 Celery 태스크를 큐에 넣습니다 — 행이 즉시 표에 나타나며 상태
running과 실시간 진행 바가 표시됩니다. - 태스크 완료 시 행이
succeeded로 전환되고 타임스탬프 옆에 Download 링크가 표시됩니다.

목록 표는 타임스탬프, 크기, auto 배지(Celery Beat가 만든 백업에 부여), Download, Delete를 보여줍니다. auto-tagged 백업은 자물쇠 아이콘으로 표시되며 — 7일 자동 보존 정책의 대상이고 시간순으로 정리됩니다. 수동 백업은 자동 보존 대상이 아니며 Delete를 클릭해야만 삭제됩니다.