본문으로 건너뛰기

설치

quant-ai 스택을 새 환경에 올리기 위한 단계별 가이드입니다. 본 페이지는 요구 사항과 구성도를 다루며, 실제 명령은 하위 페이지에서 단계별로 설명합니다.

개요

quant-ai는 단일 호스트 Docker Compose 토폴로지로 설계되어 있어, 로컬 개발자 PC와 운영 VM에서 동일한 docker-compose.*.yml이 동작합니다. Compose 파일은 두 가지가 있습니다.

  • docker-compose.yml — 로컬 / 단일 VM용. 이미지를 로컬에서 빌드.
  • docker-compose.prod.yml — Azure VM용. ACR(Azure Container Registry)에 푸시된 이미지를 pull, 강화된 시크릿 검증, json-file 로그 회전, ALLOW_LIVE 킬 스위치 적용.

사전 요구 사항

항목최소 버전비고
Docker Engine24+Compose v2 플러그인 포함
Docker Composev2.20+docker compose (스페이스, 하이픈 아님)
Python3.11컨테이너 내부에서 사용. 호스트에 별도 설치 불요
디스크20GB+TimescaleDB / Redis / Grafana 볼륨 + 이미지
RAM4GB+ (로컬), 8GB+ (Azure VM B2s)analysis-worker가 PyTorch CPU 사용

Azure VM 배포를 한다면 추가로 다음이 필요합니다.

  • az CLI (ACR 로그인용)
  • docker buildx (Apple Silicon → linux/amd64 크로스 빌드)
  • VM에 SSH 키 등록

컨테이너 토폴로지

┌─────────────────────────────────────────────────────────────────┐
│ host:80 host:3000 host:5432 │
│ (web nginx) (grafana) (timescaledb) │
└─────┬─────────────────────┬─────────────────────┬──────────────┘
│ │ │
│ ┌──────┴──────┐ │
│ │ network │ │
└──────────────┤ (compose) ├──────────────┘
└──┬──────┬───┘
│ │
┌─────────┴─┐ ┌─┴────────────┐
│ api │ │ analysis- │
│ :8000 │ │ worker │
└─────────┬─┘ └──────┬───────┘
│ │
┌─────┴───────┐ │
│ position- │ │
│ reconciler │ │
└─────────────┘ │

┌────────────┴───┐
│ redis │
│ :6379 │
└────────────────┘
컨테이너책임스케일
timescaledbOHLCV 하이퍼테이블 + 멀티테넌트 메타데이터1
redis분석 큐, WebSocket pubsub, 캐시1
grafana5종 대시보드 + Unified Alerting1
apiFastAPI + WebSocket. 모든 외부 트래픽의 진입점1 (rolling restart)
webReact 대시보드 nginx1
analysis-workerLLM 분석 큐 컨슈머1~3 (수평 확장 가능)
position-reconcilerbroker vs DB 포지션 일치 검증1 (싱글톤 권장)

자세한 컨테이너별 환경변수는 환경변수 카탈로그를 참고하세요.

설치 흐름

flowchart LR
A[clone repo] --> B[.env 작성]
B --> C[docker compose up]
C --> D[alembic upgrade head]
D --> E[/health 확인]
E --> F[Grafana 첫 로그인]
F --> G[운영 시작]

상세 절차는 사용 환경에 따라 두 갈래입니다.

마이그레이션 적용/롤백은 두 경로 모두 동일하므로 Alembic 마이그레이션에서 단일 출처로 관리합니다.

검증

설치가 끝났다면 다음 모두 OK여야 합니다.

# 1. 컨테이너 모두 running
docker compose ps

# 2. 마이그레이션이 head
docker compose exec api alembic current

# 3. API 헬스체크 200
curl -fsS http://localhost:8000/health

# 4. Grafana 접근 (admin/admin → 즉시 비밀번호 변경)
curl -I http://localhost:3000/api/health

자동화된 헬스체크는 헬스체크 cron에서 다룹니다.

트러블슈팅

증상페이지
docker compose up 직후 api가 unhealthyDB 마이그레이션 실패
Grafana 대시보드가 비어 있음Grafana 대시보드 §6
거래소 키 등록 시 401브로커 401
KIS 토큰이 24h 후 만료KIS 토큰 만료

관련 페이지