| services: |
| hopcroft-api: |
| build: |
| context: . |
| dockerfile: Dockerfile |
| container_name: hopcroft-api |
| ports: |
| - "8080:8080" |
| env_file: |
| - .env |
| environment: |
| - PROJECT_NAME=Hopcroft |
| volumes: |
| |
| - ./hopcroft_skill_classification_tool_competition:/app/hopcroft_skill_classification_tool_competition |
| |
| - hopcroft-logs:/app/logs |
| networks: |
| - hopcroft-net |
| |
| 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: |
| |
| - ./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 |
|
|
| prometheus: |
| image: prom/prometheus:latest |
| container_name: prometheus |
| volumes: |
| - ./monitoring/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml |
| - ./monitoring/prometheus/alert_rules.yml:/etc/prometheus/alert_rules.yml |
| ports: |
| - "9090:9090" |
| networks: |
| - hopcroft-net |
| depends_on: |
| - alertmanager |
| restart: unless-stopped |
|
|
| alertmanager: |
| image: prom/alertmanager:latest |
| container_name: alertmanager |
| volumes: |
| - ./monitoring/alertmanager/config.yml:/etc/alertmanager/config.yml |
| ports: |
| - "9093:9093" |
| networks: |
| - hopcroft-net |
| restart: unless-stopped |
|
|
| grafana: |
| image: grafana/grafana:latest |
| container_name: grafana |
| ports: |
| - "3000:3000" |
| environment: |
| - GF_SECURITY_ADMIN_USER=admin |
| - GF_SECURITY_ADMIN_PASSWORD=admin |
| - GF_USERS_ALLOW_SIGN_UP=false |
| - GF_SERVER_ROOT_URL=http://localhost:3000 |
| volumes: |
| |
| - ./monitoring/grafana/provisioning/datasources:/etc/grafana/provisioning/datasources |
| - ./monitoring/grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards |
| - ./monitoring/grafana/dashboards:/var/lib/grafana/dashboards |
| |
| - grafana-data:/var/lib/grafana |
| networks: |
| - hopcroft-net |
| depends_on: |
| - prometheus |
| restart: unless-stopped |
| healthcheck: |
| test: ["CMD-SHELL", "curl -f http://localhost:3000/api/health || exit 1"] |
| interval: 30s |
| timeout: 10s |
| retries: 3 |
|
|
| pushgateway: |
| image: prom/pushgateway:latest |
| container_name: pushgateway |
| ports: |
| - "9091:9091" |
| networks: |
| - hopcroft-net |
| restart: unless-stopped |
| command: |
| - '--web.listen-address=:9091' |
| - '--persistence.file=/data/pushgateway.data' |
| - '--persistence.interval=5m' |
| volumes: |
| - pushgateway-data:/data |
|
|
|
|
| networks: |
| hopcroft-net: |
| driver: bridge |
|
|
| volumes: |
| hopcroft-logs: |
| driver: local |
| grafana-data: |
| driver: local |
| pushgateway-data: |
| driver: local |
|
|