version: '3.8' # HDH Deployment Docker Compose # Comprehensive deployment setup for HDH library examples # Special thanks to Maria Gragera Garces for the HDH library! services: # Main HDH deployment service hdh-deployment: build: context: . dockerfile: Dockerfile args: BUILD_DATE: ${BUILD_DATE:-$(date -u +'%Y-%m-%dT%H:%M:%SZ')} VERSION: ${VERSION:-1.0.0} container_name: hdh-deployment restart: unless-stopped environment: - HDH_OUTPUT_DIR=/app/hdh_results - HDH_LOG_LEVEL=${HDH_LOG_LEVEL:-INFO} - PYTHONPATH=/app - MPLBACKEND=Agg volumes: - hdh_results:/app/hdh_results - benchmark_results:/app/benchmark_results - logs:/app/logs - ./config.yaml:/app/config.yaml:ro # Mount additional QASM files if available - ${QASM_DIR:-./qasm_examples}:/app/qasm_examples:ro command: ["python", "main.py", "--demo-mode", "--output-dir", "/app/hdh_results"] networks: - hdh-network labels: - "hdh.service=deployment" - "hdh.description=Main HDH deployment service" - "hdh.credits=Thanks to Maria Gragera Garces" # Benchmarking service hdh-benchmark: build: context: . dockerfile: Dockerfile container_name: hdh-benchmark restart: "no" # Run once environment: - HDH_OUTPUT_DIR=/app/benchmark_results - HDH_LOG_LEVEL=${HDH_LOG_LEVEL:-INFO} - PYTHONPATH=/app - MPLBACKEND=Agg volumes: - benchmark_results:/app/benchmark_results - logs:/app/logs - ./config.yaml:/app/config.yaml:ro command: [ "python", "benchmark.py", "--suite", "all", "--repetitions", "${BENCHMARK_REPETITIONS:-3}", "--output-dir", "/app/benchmark_results" ] networks: - hdh-network labels: - "hdh.service=benchmark" - "hdh.description=HDH performance benchmarking" profiles: - benchmark # Circuit examples generator hdh-examples: build: context: . dockerfile: Dockerfile container_name: hdh-examples restart: "no" # Run once environment: - PYTHONPATH=/app volumes: - qasm_examples:/app/qasm_examples - logs:/app/logs command: ["python", "circuit_examples.py"] networks: - hdh-network labels: - "hdh.service=examples" - "hdh.description=Generate quantum circuit examples" profiles: - examples # Jupyter notebook service (optional) hdh-jupyter: build: context: . dockerfile: Dockerfile container_name: hdh-jupyter restart: unless-stopped environment: - JUPYTER_ENABLE_LAB=yes - JUPYTER_TOKEN=${JUPYTER_TOKEN:-hdh-token} - PYTHONPATH=/app volumes: - hdh_results:/app/hdh_results - benchmark_results:/app/benchmark_results - ./notebooks:/app/notebooks - ./config.yaml:/app/config.yaml:ro ports: - "${JUPYTER_PORT:-8888}:8888" command: [ "jupyter", "lab", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root", "--notebook-dir=/app" ] networks: - hdh-network labels: - "hdh.service=jupyter" - "hdh.description=Jupyter Lab for interactive HDH analysis" profiles: - jupyter # Web dashboard (placeholder for future development) hdh-dashboard: build: context: . dockerfile: Dockerfile container_name: hdh-dashboard restart: unless-stopped environment: - FLASK_APP=dashboard.py - FLASK_ENV=${FLASK_ENV:-production} - HDH_RESULTS_DIR=/app/hdh_results volumes: - hdh_results:/app/hdh_results:ro - benchmark_results:/app/benchmark_results:ro ports: - "${DASHBOARD_PORT:-8080}:8080" command: ["python", "-c", "print('Dashboard service placeholder - to be implemented')"] networks: - hdh-network labels: - "hdh.service=dashboard" - "hdh.description=Web dashboard for HDH results" profiles: - dashboard # Named volumes for persistent storage volumes: hdh_results: driver: local labels: - "hdh.volume=results" - "hdh.description=HDH processing results" benchmark_results: driver: local labels: - "hdh.volume=benchmarks" - "hdh.description=Performance benchmark results" qasm_examples: driver: local labels: - "hdh.volume=examples" - "hdh.description=Generated QASM examples" logs: driver: local labels: - "hdh.volume=logs" - "hdh.description=Application logs" # Custom network networks: hdh-network: driver: bridge labels: - "hdh.network=main" - "hdh.description=HDH deployment network" # Environment variables with defaults # Create a .env file to override these values: # # HDH_LOG_LEVEL=DEBUG # BENCHMARK_REPETITIONS=5 # JUPYTER_TOKEN=your-secure-token # JUPYTER_PORT=8888 # DASHBOARD_PORT=8080 # QASM_DIR=./qasm_files # BUILD_DATE=2024-01-01T00:00:00Z # VERSION=1.0.0