File size: 3,452 Bytes
0b5f282 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | version: '3.8'
services:
# Backend API Service
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: stroke-detection-api
ports:
- "8000:8000"
environment:
- MONGODB_URL=mongodb://mongo:27017
- DATABASE_NAME=stroke_detection
- CLOUDINARY_CLOUD_NAME=${CLOUDINARY_CLOUD_NAME}
- CLOUDINARY_API_KEY=${CLOUDINARY_API_KEY}
- CLOUDINARY_API_SECRET=${CLOUDINARY_API_SECRET}
volumes:
- ./backend/models:/app/models
- ./backend/logs:/app/logs
depends_on:
- mongo
restart: unless-stopped
networks:
- stroke-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
# Frontend Service
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
container_name: stroke-detection-frontend
ports:
- "80:80"
- "443:443"
depends_on:
- backend
restart: unless-stopped
networks:
- stroke-network
environment:
- REACT_APP_API_URL=http://localhost:8000
# MongoDB Service
mongo:
image: mongo:5.0
container_name: stroke-detection-mongo
ports:
- "27017:27017"
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=password123
- MONGO_INITDB_DATABASE=stroke_detection
volumes:
- mongo_data:/data/db
- ./backend/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
restart: unless-stopped
networks:
- stroke-network
# Redis for Caching (Optional)
redis:
image: redis:7-alpine
container_name: stroke-detection-redis
ports:
- "6379:6379"
volumes:
- redis_data:/data
restart: unless-stopped
networks:
- stroke-network
command: redis-server --appendonly yes
# Nginx Load Balancer (Optional for production)
nginx:
image: nginx:alpine
container_name: stroke-detection-nginx
ports:
- "8080:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/ssl:/etc/nginx/ssl:ro
depends_on:
- frontend
- backend
restart: unless-stopped
networks:
- stroke-network
# Monitoring with Prometheus (Optional)
prometheus:
image: prom/prometheus:latest
container_name: stroke-detection-prometheus
ports:
- "9090:9090"
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_data:/prometheus
restart: unless-stopped
networks:
- stroke-network
profiles:
- monitoring
# Grafana for Visualization (Optional)
grafana:
image: grafana/grafana:latest
container_name: stroke-detection-grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin123
volumes:
- grafana_data:/var/lib/grafana
- ./monitoring/grafana/dashboards:/etc/grafana/provisioning/dashboards:ro
- ./monitoring/grafana/datasources:/etc/grafana/provisioning/datasources:ro
restart: unless-stopped
networks:
- stroke-network
profiles:
- monitoring
# Named Volumes
volumes:
mongo_data:
driver: local
redis_data:
driver: local
prometheus_data:
driver: local
grafana_data:
driver: local
# Custom Network
networks:
stroke-network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16 |