RallyTrack 서비스의 배포 구성 저장소입니다. 애플리케이션 코드는 각 서비스 저장소에 있고, 여기에는 컨테이너 오케스트레이션 · 리버스 프록시 · 서비스 유닛 · 배포 스크립트만 둡니다.
| 서비스 | 역할 | 포트 |
|---|---|---|
frontend |
React SPA (nginx, /api는 backend로 프록시) |
8082 |
backend |
Spring Boot API | 8080 |
db |
MariaDB 11.4 | 3307 (로컬 전용) |
minio |
영상 오브젝트 스토리지 (S3 호환) | 9000 / 콘솔 9001 |
cloudflared |
Cloudflare Tunnel 커넥터 (외부 포트 개방 없이 공개) | — |
| AI 분석 서버 | FastAPI, 별도 호스트에서 systemd로 구동 | 8000 |
영상은 presigned URL로 직접 업로드/재생하며, DB에는 URL이 아닌 object key만 저장합니다. 따라서 MinIO ↔ S3 전환 시 DB 변경이 없습니다.
| 경로 | 설명 |
|---|---|
docker-compose.yml |
로컬 개발용 (MySQL, AI 서버 포함 전체 스택) |
docker-compose.pi.yml |
실서버(Raspberry Pi) 배포용 — 헬스체크 · 메모리 제한 · MinIO · 터널 포함 |
.env.example |
환경 변수 템플릿 (실제 값은 .env, 커밋 금지) |
pi/deploy.sh |
서버 배포 스크립트 — 각 저장소 pull 후 재빌드 · 재기동 |
pi/nginx-rallytrack.conf |
호스트 nginx vhost 템플릿 (도메인 직접 연결 시 사용) |
ml-server/deploy-ai.sh |
AI 서버 배포 스크립트 |
ml-server/rallytrack-ai.service |
AI 분석 서버 systemd 유닛 템플릿 |
backend / frontend / aiAnalysis-server 를 이 저장소와 같은 상위 폴더에 두고 clone해야
compose의 build: 상대 경로와 배포 스크립트가 맞습니다.
RallyTrack/
├── devops/ ← 이 저장소
├── backend/
├── frontend/
└── aiAnalysis-server/
cp .env.example .env # 값 채우기 (시크릿 생성: openssl rand -hex 32)
# 로컬 개발
docker compose up -d --build
# 서버 최초 기동
docker compose -f docker-compose.pi.yml --env-file .env up -d --build
# 이후 배포는 스크립트로
pi/deploy.sh상태 확인은 docker compose -f <compose 파일> ps, 로그는 ... logs -f backend.
모든 시크릿과 호스트 주소는 .env로 주입하며 저장소에 커밋하지 않습니다.
필요한 키와 설명은 .env.example을 참고하세요.
스키마 최초 생성 시에만 DDL_AUTO=update, 이후에는 validate로 되돌립니다.
- RallyTrack/backend — Spring Boot API
- RallyTrack/frontend — React 클라이언트
- RallyTrack/aiAnalysis-server — FastAPI 분석 서버
실제 운영 정보(호스트 주소, 백업 · 복구 절차, 장애 대응)는 공개 저장소에 두지 않고 별도 런북으로 관리합니다.