|
|
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: docker/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 |
|
|
|