| services: | |
| hopcroft-api: | |
| build: | |
| context: . | |
| dockerfile: Dockerfile | |
| container_name: hopcroft-api | |
| ports: | |
| - "8080:8080" | |
| env_file: | |
| - .env | |
| environment: | |
| - PROJECT_NAME=Hopcroft | |
| volumes: | |
| # Bind mount: enables live code reloading for development | |
| - ./hopcroft_skill_classification_tool_competition:/app/hopcroft_skill_classification_tool_competition | |
| # Named volume: persistent storage for application logs | |
| - hopcroft-logs:/app/logs | |
| networks: | |
| - hopcroft-net | |
| # Override CMD for development with auto-reload | |
| command: > | |
| uvicorn hopcroft_skill_classification_tool_competition.main:app --host 0.0.0.0 --port 8080 --reload | |
| restart: unless-stopped | |
| healthcheck: | |
| test: [ "CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8080/health', timeout=5)" ] | |
| interval: 30s | |
| timeout: 10s | |
| retries: 3 | |
| start_period: 60s | |
| hopcroft-gui: | |
| build: | |
| context: . | |
| dockerfile: Dockerfile.streamlit | |
| container_name: hopcroft-gui | |
| ports: | |
| - "8501:8501" | |
| environment: | |
| - API_BASE_URL=http://hopcroft-api:8080 | |
| volumes: | |
| # Bind mount for development hot-reload | |
| - ./hopcroft_skill_classification_tool_competition/streamlit_app.py:/app/streamlit_app.py | |
| networks: | |
| - hopcroft-net | |
| depends_on: | |
| hopcroft-api: | |
| condition: service_healthy | |
| restart: unless-stopped | |
| networks: | |
| hopcroft-net: | |
| driver: bridge | |
| volumes: | |
| hopcroft-logs: | |
| driver: local | |