Initial commit - BraceIQMed platform with frontend, API, and brace generator
This commit is contained in:
138
docker-compose.yml
Normal file
138
docker-compose.yml
Normal file
@@ -0,0 +1,138 @@
|
||||
# ============================================
|
||||
# BraceIQMed - Docker Compose Configuration
|
||||
# ============================================
|
||||
# Usage:
|
||||
# docker compose build # Build all images
|
||||
# docker compose up -d # Start all services
|
||||
# docker compose logs -f # View logs
|
||||
# docker compose down # Stop all services
|
||||
# ============================================
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# ============================================
|
||||
# Frontend - React + nginx
|
||||
# ============================================
|
||||
frontend:
|
||||
build:
|
||||
context: ./frontend
|
||||
dockerfile: Dockerfile
|
||||
image: braceiqmed-frontend:latest
|
||||
container_name: braceiqmed-frontend
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
depends_on:
|
||||
api:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- braceiqmed-net
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:80/health"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "50m"
|
||||
max-file: "5"
|
||||
|
||||
# ============================================
|
||||
# API - Node.js Express Server
|
||||
# ============================================
|
||||
api:
|
||||
build:
|
||||
context: ./api
|
||||
dockerfile: Dockerfile
|
||||
image: braceiqmed-api:latest
|
||||
container_name: braceiqmed-api
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- PORT=3002
|
||||
- BRACE_GENERATOR_URL=http://brace-generator:8002
|
||||
- DATA_DIR=/app/data
|
||||
- DB_PATH=/app/data/braceflow.db
|
||||
volumes:
|
||||
- braceiqmed-data:/app/data
|
||||
depends_on:
|
||||
brace-generator:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- braceiqmed-net
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3002/api/health"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "50m"
|
||||
max-file: "5"
|
||||
|
||||
# ============================================
|
||||
# Brace Generator - FastAPI + PyTorch (CPU)
|
||||
# ============================================
|
||||
brace-generator:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: brace-generator/Dockerfile
|
||||
image: braceiqmed-brace-generator:latest
|
||||
container_name: braceiqmed-brace-generator
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- HOST=0.0.0.0
|
||||
- PORT=8002
|
||||
- DEVICE=cpu
|
||||
- MODEL=scoliovis
|
||||
- TEMP_DIR=/tmp/brace_generator
|
||||
- CORS_ORIGINS=*
|
||||
volumes:
|
||||
- braceiqmed-data:/app/data
|
||||
- braceiqmed-models:/app/models
|
||||
networks:
|
||||
- braceiqmed-net
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 8G
|
||||
reservations:
|
||||
memory: 4G
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8002/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "50m"
|
||||
max-file: "5"
|
||||
|
||||
# ============================================
|
||||
# Networks
|
||||
# ============================================
|
||||
networks:
|
||||
braceiqmed-net:
|
||||
driver: bridge
|
||||
name: braceiqmed-net
|
||||
|
||||
# ============================================
|
||||
# Volumes
|
||||
# ============================================
|
||||
volumes:
|
||||
# Persistent data storage (SQLite, uploads, outputs)
|
||||
braceiqmed-data:
|
||||
driver: local
|
||||
name: braceiqmed-data
|
||||
|
||||
# Model storage (ScolioVis weights)
|
||||
braceiqmed-models:
|
||||
driver: local
|
||||
name: braceiqmed-models
|
||||
Reference in New Issue
Block a user