SPARKNET / docker-compose.yml
MHamdan's picture
Initial commit: SPARKNET framework
d520909
version: '3.8'
# SPARKNET Docker Compose Configuration
# Full stack deployment with all services
services:
# ============== Main Application ==============
sparknet-api:
build:
context: .
dockerfile: Dockerfile
target: production
container_name: sparknet-api
ports:
- "8000:8000"
volumes:
- ./data:/app/data
- ./uploads:/app/uploads
- ./outputs:/app/outputs
- ./logs:/app/logs
environment:
- PYTHONPATH=/app
- OLLAMA_HOST=http://ollama:11434
- CHROMA_HOST=chromadb
- CHROMA_PORT=8000
- REDIS_URL=redis://redis:6379
- SPARKNET_SECRET_KEY=${SPARKNET_SECRET_KEY:-sparknet-docker-secret-key}
- LOG_LEVEL=INFO
depends_on:
ollama:
condition: service_healthy
chromadb:
condition: service_started
redis:
condition: service_healthy
networks:
- sparknet-network
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
sparknet-demo:
build:
context: .
dockerfile: Dockerfile
target: production
container_name: sparknet-demo
command: ["streamlit", "run", "demo/app.py", "--server.address", "0.0.0.0", "--server.port", "4000"]
ports:
- "4000:4000"
volumes:
- ./data:/app/data
- ./uploads:/app/uploads
- ./outputs:/app/outputs
environment:
- PYTHONPATH=/app
- OLLAMA_HOST=http://ollama:11434
- CHROMA_HOST=chromadb
- CHROMA_PORT=8000
- API_URL=http://sparknet-api:8000
depends_on:
- sparknet-api
networks:
- sparknet-network
restart: unless-stopped
# ============== Ollama LLM Service ==============
ollama:
image: ollama/ollama:latest
container_name: sparknet-ollama
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
environment:
- OLLAMA_KEEP_ALIVE=24h
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
networks:
- sparknet-network
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:11434/api/tags"]
interval: 30s
timeout: 10s
retries: 5
start_period: 120s
# ============== ChromaDB Vector Store ==============
chromadb:
image: chromadb/chroma:latest
container_name: sparknet-chromadb
ports:
- "8001:8000"
volumes:
- chroma_data:/chroma/chroma
environment:
- IS_PERSISTENT=TRUE
- PERSIST_DIRECTORY=/chroma/chroma
- ANONYMIZED_TELEMETRY=FALSE
networks:
- sparknet-network
restart: unless-stopped
# ============== Redis Cache ==============
redis:
image: redis:7-alpine
container_name: sparknet-redis
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
networks:
- sparknet-network
restart: unless-stopped
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
# ============== Nginx Reverse Proxy (Optional) ==============
nginx:
image: nginx:alpine
container_name: sparknet-nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/ssl:/etc/nginx/ssl:ro
depends_on:
- sparknet-api
- sparknet-demo
networks:
- sparknet-network
restart: unless-stopped
profiles:
- production
# ============== Volumes ==============
volumes:
ollama_data:
driver: local
chroma_data:
driver: local
redis_data:
driver: local
# ============== Networks ==============
networks:
sparknet-network:
driver: bridge