|
|
version: '3.8' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
services: |
|
|
|
|
|
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: |
|
|
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: |
|
|
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: |
|
|
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: |
|
|
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: |
|
|
ollama_data: |
|
|
driver: local |
|
|
chroma_data: |
|
|
driver: local |
|
|
redis_data: |
|
|
driver: local |
|
|
|
|
|
|
|
|
networks: |
|
|
sparknet-network: |
|
|
driver: bridge |
|
|
|