tsunami / docker-compose.yml
Gitdeeper4's picture
رفع جميع ملفات TSU-WAVE مع YAML
12834b7
# TSU-WAVE Docker Compose Configuration
version: '3.8'
services:
# ===== PostgreSQL with TimescaleDB =====
postgres:
image: timescale/timescaledb:latest-pg14
container_name: tsuwave-postgres
restart: unless-stopped
environment:
POSTGRES_DB: tsuwave
POSTGRES_USER: tsuwave_user
POSTGRES_PASSWORD: ${DB_PASSWORD:-tsuwave_secure_password}
volumes:
- postgres_data:/var/lib/postgresql/data
- ./database/init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "5432:5432"
networks:
- tsuwave-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U tsuwave_user -d tsuwave"]
interval: 10s
timeout: 5s
retries: 5
# ===== Redis Cache =====
redis:
image: redis:7-alpine
container_name: tsuwave-redis
restart: unless-stopped
command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD:-redis_secure_password}
volumes:
- redis_data:/data
ports:
- "6379:6379"
networks:
- tsuwave-network
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
# ===== TSU-WAVE Core (NSWE Solver + Parameter Computation) =====
core:
build:
context: .
dockerfile: Dockerfile
container_name: tsuwave-core
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
environment:
TSUWAVE_ENV: production
TSUWAVE_DB_HOST: postgres
TSUWAVE_DB_PORT: 5432
TSUWAVE_DB_NAME: tsuwave
TSUWAVE_DB_USER: tsuwave_user
TSUWAVE_DB_PASSWORD: ${DB_PASSWORD:-tsuwave_secure_password}
TSUWAVE_REDIS_HOST: redis
TSUWAVE_REDIS_PORT: 6379
TSUWAVE_REDIS_PASSWORD: ${REDIS_PASSWORD:-redis_secure_password}
TSUWAVE_LOG_LEVEL: INFO
volumes:
- ./config:/app/config:ro
- ./data:/app/data
- ./logs:/app/logs
networks:
- tsuwave-network
command: python src/main.py
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
# ===== TSU-WAVE API Server =====
api:
build:
context: .
dockerfile: Dockerfile
container_name: tsuwave-api
restart: unless-stopped
depends_on:
core:
condition: service_healthy
environment:
TSUWAVE_ENV: production
TSUWAVE_DB_HOST: postgres
TSUWAVE_DB_PORT: 5432
TSUWAVE_DB_NAME: tsuwave
TSUWAVE_DB_USER: tsuwave_user
TSUWAVE_DB_PASSWORD: ${DB_PASSWORD:-tsuwave_secure_password}
TSUWAVE_REDIS_HOST: redis
TSUWAVE_REDIS_PORT: 6379
TSUWAVE_REDIS_PASSWORD: ${REDIS_PASSWORD:-redis_secure_password}
TSUWAVE_API_HOST: 0.0.0.0
TSUWAVE_API_PORT: 8000
TSUWAVE_JWT_SECRET: ${JWT_SECRET:-your_jwt_secret_key_change_me}
volumes:
- ./config:/app/config:ro
ports:
- "8000:8000"
networks:
- tsuwave-network
command: uvicorn tsuwave.api.main:app --host 0.0.0.0 --port 8000 --workers 4
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
# ===== TSU-WAVE Dashboard (Streamlit) =====
dashboard:
build:
context: .
dockerfile: Dockerfile
container_name: tsuwave-dashboard
restart: unless-stopped
depends_on:
api:
condition: service_healthy
environment:
TSUWAVE_ENV: production
TSUWAVE_API_URL: http://api:8000
TSUWAVE_DASHBOARD_PORT: 8080
ports:
- "8080:8080"
networks:
- tsuwave-network
command: streamlit run src/tsuwave/dashboard/app.py --server.port=8080 --server.address=0.0.0.0 --server.enableCORS=false
# ===== Nginx Reverse Proxy =====
nginx:
image: nginx:alpine
container_name: tsuwave-nginx
restart: unless-stopped
depends_on:
- api
- dashboard
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/sites:/etc/nginx/sites-enabled:ro
ports:
- "80:80"
- "443:443"
networks:
- tsuwave-network
# ===== Data Initialization (Run once) =====
init:
build:
context: .
dockerfile: Dockerfile
container_name: tsuwave-init
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
environment:
TSUWAVE_ENV: production
TSUWAVE_DB_HOST: postgres
TSUWAVE_DB_PORT: 5432
TSUWAVE_DB_NAME: tsuwave
TSUWAVE_DB_USER: tsuwave_user
TSUWAVE_DB_PASSWORD: ${DB_PASSWORD:-tsuwave_secure_password}
TSUWAVE_REDIS_HOST: redis
TSUWAVE_REDIS_PORT: 6379
TSUWAVE_REDIS_PASSWORD: ${REDIS_PASSWORD:-redis_secure_password}
volumes:
- ./config:/app/config:ro
- ./data:/app/data
networks:
- tsuwave-network
command: >
sh -c "
python scripts/setup_database.py &&
python scripts/load_becf_maps.py &&
python scripts/load_validation_data.py
"
profiles:
- init
# ===== Volumes =====
volumes:
postgres_data:
name: tsuwave-postgres-data
redis_data:
name: tsuwave-redis-data
# ===== Networks =====
networks:
tsuwave-network:
name: tsuwave-network
driver: bridge