# 빠른 시작 — 처음 설치하는 사람

- 먼저 [첫 서버 입력 준비](FIRST_SITE.ko.md)를 완료합니다. 입력 파일을 갖추지 않은 상태에서 APPLY하지 않습니다.
- 아래 경로는 HOST 경로입니다. `/opt/contextra`는 선택 가능한 예시입니다.
- 도구를 USB에서 바로 root로 실행하기 전에 담당자가 알려준 배포물 SHA256를 별도 신뢰 경로로 확인합니다.
- `--apply`는 실제 변경입니다. 출력 확인 없이 `--yes`부터 쓰지 않습니다.

## 1. 세 파일을 준비

담당자에게 검토된 도구 디렉터리, release `.tar.gz`, 별도 승인 SHA256를 받습니다.
site에는 경로/Compose 순서만 넣고 비밀값은 private env/파일로 분리합니다.

```bash
KIT=/path/to/verified-kit
SITE=/opt/contextra/state/site.json
BUNDLE=/path/to/usb/contextra-v1.tar.gz
EXPECTED_SHA256=담당자가_별도_전달한_64자리_SHA256
cd "$KIT"
./deployctl doctor
./deployctl configure
```

`doctor`에서 Docker가 없다는 BLOCKED는 이 단계에서는 정상적인 안내입니다. [Host 준비](HOST_BOOTSTRAP.ko.md)를 진행합니다.
configure는 질문에 답해도 기본은 미저장입니다. 같은 입력을 확인한 뒤 적용합니다.

```bash
sudo ./deployctl configure --apply
sudo ./deployctl --site "$SITE" storage prepare --apply
./deployctl bundle verify "$BUNDLE" --sha256 "$EXPECTED_SHA256"
sudo ./deployctl --site "$SITE" install "$BUNDLE" --sha256 "$EXPECTED_SHA256"
```

## 2. 계획을 읽고 실제 설치

기존 project가 있으면 신규 설치로 자동 인수하지 않습니다. 담당자에게 운영 상태와 경로를 비교하도록 요청합니다.
이미지와 모델 검증·private env·mount 권한 준비가 끝난 경우에만 아래를 실행합니다.

```bash
sudo ./deployctl --site "$SITE" install "$BUNDLE" --sha256 "$EXPECTED_SHA256" --apply
sudo /opt/contextra/deployctl doctor
```

정상 출력의 핵심:

```text
HOST_READY: PASS
DEPLOYED: PASS
RUNTIME_READY: PASS
EXTERNAL_READY: NOT_RUN
```

이는 AI 서비스/모델 준비까지입니다. 실제 카메라 시작·새 Event·관제 조회는 담당자가 승인된 최소 시험으로 따로 확인합니다.

## 3. 실패하면

```text
[BLOCKED] STORAGE_MOUNT_MISMATCH
```

폴더 이름은 맞아도 원래 디스크가 아닙니다. 반복 APPLY하지 말고 [오류 사전](ERROR_CATALOG.ko.md)을 봅니다.
실패한 배포는 자동 재시도/rollback하지 않습니다. [복원](ROLLBACK.ko.md)에 따라 실제 상태를 먼저 확인합니다.
