Repository navigation
Service Mlflow
MLflow is an optional, disabled-by-default experiment tracking and artifact registry surface for the ML Engineering track. Atlas runs MLflow as a tracking server backed by Supabase Postgres for run metadata and MinIO for run artifacts, model files, and small notebook outputs.
Notebooks log experiments and artifacts through MLFLOW_TRACKING_URI; model promotion automations are out of scope.
| Surface | URL | Notes |
|---|---|---|
| Kong | http://mlflow.localhost:${KONG_HTTP_PORT} |
Routed only when MLFLOW_SOURCE=container, behind Kong dashboard basic auth (DASHBOARD_USERNAME / DASHBOARD_PASSWORD). MLflow has no login of its own. A browser API call or write is accepted only from an origin in MLFLOW_SERVER_CORS_ALLOWED_ORIGINS (this route and the direct port); others get 403. SDK and curl calls send no Origin and are not affected. |
| Direct | http://localhost:${MLFLOW_PORT} |
Bound through HOST_BIND_IP (default 127.0.0.1:, loopback only). An empty value or a LAN address publishes the port on the network. MLflow still answers 403 "invalid host header" to a Host not in MLFLOW_SERVER_ALLOWED_HOSTS (set in compose.yml). Add the LAN address there to use it. |
| In-network | http://mlflow:5000 |
Used by JupyterHub. |
MLFLOW_SOURCE=disabled # container | disabled
MLFLOW_PORT= # auto-assigned by topology
MLFLOW_ENDPOINT= # set by ./start.sh: http://mlflow:5000, or empty when disabled
MLFLOW_TRACKING_URI= # set by ./start.sh: same value; injected into JupyterHub
MLFLOW_DB_NAME=mlflow
MLFLOW_DB_USER=mlflow
MLFLOW_DB_PASSWORD= # auto-generated
MINIO_BUCKET_MLFLOW=mlflowMLFLOW_SOURCE=container requires MINIO_SOURCE=container; the bootstrapper fails early otherwise so runs cannot silently lose artifacts.
When MLflow is enabled, supabase-db-init creates its Postgres database and role (services/supabase/db/scripts/05-scoped-roles.sh). minio-init provisions the MLflow bucket and scoped service account. mlflow-init then only checks that it can log in to the database. Atlas builds the exact reviewed MLflow base with pinned PostgreSQL and S3 drivers, then starts the guarded server with:
- a Postgres backend store at
supabase-db:5432/${MLFLOW_DB_NAME}; - proxied artifacts under
s3://${MINIO_BUCKET_MLFLOW}; - S3-compatible access through MinIO at
http://minio:9000.
JupyterHub receives MLFLOW_TRACKING_URI=http://mlflow:5000 when MLflow is enabled, and its image includes the MLflow Python client (mlflow==3.16.0). 11_financial_research_kit.ipynb logs to MLflow when this variable is set.
Minimal notebook smoke:
import mlflow
mlflow.set_tracking_uri("http://mlflow:5000")
with mlflow.start_run():
mlflow.log_param("source", "atlas-smoke")
mlflow.log_metric("score", 1.0)
with open("/tmp/atlas-mlflow-smoke.txt", "w", encoding="utf-8") as handle:
handle.write("atlas mlflow artifact")
mlflow.log_artifact("/tmp/atlas-mlflow-smoke.txt")Support tier: experimental — Capability contract declared; no cited cold-start, workflow, or upgrade qualification run yet (evidence at v0.1.0).
| Capability | Status | Verification | Notes |
|---|---|---|---|
| Experiment and run tracking | supported | tested | Atlas runs an MLflow tracking server with a dedicated Postgres database and injects its tracking URI plus client into JupyterHub. |
| Scoped MinIO artifact storage | supported | tested | MLflow proxies artifacts to a dedicated MinIO bucket with generated service credentials and refuses Atlas enablement when MinIO is unavailable. |
| MLflow ingress authentication | partial | tested | mlflow.localhost is protected by Kong dashboard Basic Auth and ACL, but the host-published direct tracking UI/API has no MLflow application authentication. |
| MLflow AI Gateway SSRF containment | supported | tested | Atlas accepts exactly reviewed MLflow 3.16.1, which closes CVE-2026-64849 and CVE-2026-71211. Every prefixed and unprefixed AI Gateway route family stays disabled at its ASGI boundary, because Atlas configures no gateway endpoints. The built image runs a required multi-architecture smoke. |
| Model registry deployment automation | not-supported | documented | The first Atlas slice stores tracking and registry metadata only; it ships no model serving, promotion, deployment plugin, or Backend/n8n automation. |
| Tracking service high availability | not-supported | documented | Postgres and MinIO persist state, but Atlas runs one MLflow server without replicas, failover routing, or a tested backup-and-restore workflow for the combined stores. |
-
Database connections: each of the 4 server workers opens separate tracking and registry SQLAlchemy engines.
MLFLOW_SQLALCHEMYSTORE_POOL_SIZE=2andMLFLOW_SQLALCHEMYSTORE_MAX_OVERFLOW=3cap them at 40 connections to the sharedsupabase-db(SQLAlchemy's 5+10 default allowed 120). MLflow ignoresMAX_OVERFLOW=0, so use at least 1. -
Job-backed MLflow features:
atlas_server.pystarts uvicorn directly instead ofmlflow server, so MLflow's background job runner does not run. MLflow 3.16 features that submit server-side jobs fail with HTTP 500 and leave a PENDING job row. Nothing Atlas ships uses them. -
No tracking URI in notebooks: confirm
MLFLOW_SOURCE=containerand restart after the bootstrapper regenerates.env. -
Artifacts fail to upload: keep
MINIO_SOURCE=container; MLflow supports only MinIO-backed artifact storage. -
Database errors on first boot:
mlflow-initonly runs a login check.supabase-db-initcreates themlflowdatabase and role (services/supabase/db/scripts/05-scoped-roles.sh), so check its logs for the cause. -
atlas-mlflow: upgrading the MLflow database schemain the server log: expected once after an MLflow image change.atlas_server.pyrunsmlflow db upgradebefore the server starts. Back up the database first if you need a rollback point; migrations do not run backwards. -
AI Gateway endpoints return 404: this is intentional. MLflow 3.16.1 fixes CVE-2026-71211, but Atlas configures no gateway endpoints and keeps that secrets-holding surface closed. Atlas supports MLflow tracking, registry metadata, and artifact APIs. It disables the native, REST, and AJAX AI Gateway route families at the outer ASGI boundary, also when
_MLFLOW_STATIC_PREFIXis set. -
A custom
MLFLOW_IMAGEexits at startup: Atlas currently accepts exactly MLflow 3.16.1. Before the allowlist changes, review a new version with the route guard, private server environment, dependency image and the required multi-architecture smoke.
| Service | Category |
|---|---|
| minio | data |
| supabase | data |
| Service | Category |
|---|---|
| kong | infra |
| jupyterhub | apps |

Open the full-size diagram for a full-screen view.
Backend and n8n could read the model registry over the MLflow REST API. Not implemented.
Label Studio can export reviewed datasets or metrics into MLflow in a later data/ML workflow.
MLflow model serving, deployment plugins and promotion workflows are out of scope.
Atlas documentation.
- 1. Overview
- 2. Quick Start
- 3. Core Concepts
- 4. Tracks
-
5. Services
- 5.1. Service Catalog
-
5.2. Service Guides
- 5.2.1. airflow
- 5.2.2. asset-baker
- 5.2.3. asset-worker
- 5.2.4. backend
- 5.2.5. backup
- 5.2.6. blender-mcp
- 5.2.7. celery
- 5.2.8. chatterbox
- 5.2.9. cloud-providers
- 5.2.10. cloudflared
- 5.2.11. comfyui
- 5.2.12. crawl4ai
- 5.2.13. doc-processor
- 5.2.14. docling
- 5.2.15. docling-lightrag-adapter
- 5.2.16. fal
- 5.2.17. globals
- 5.2.18. grafana
- 5.2.19. hermes
- 5.2.20. iceberg-rest
- 5.2.21. jenkins
- 5.2.22. jupyterhub
- 5.2.23. kong
- 5.2.24. label-studio
- 5.2.25. langfuse
- 5.2.26. lightrag
- 5.2.27. litellm
- 5.2.28. llm-graph-builder
- 5.2.29. local-deep-researcher
- 5.2.30. loki
- 5.2.31. mcp-servers
- 5.2.32. minio
- 5.2.33. mlflow
- 5.2.34. multi2vec-clip
- 5.2.35. n8n
- 5.2.36. neo4j
- 5.2.37. ollama
- 5.2.38. open-webui
- 5.2.39. openclaw
- 5.2.40. otel-collector
- 5.2.41. parakeet
- 5.2.42. prometheus
- 5.2.43. ray
- 5.2.44. redis
- 5.2.45. redpanda
- 5.2.46. searxng
- 5.2.47. spark
- 5.2.48. speaches
- 5.2.49. stt-provider
- 5.2.50. supabase
- 5.2.51. supavisor
- 5.2.52. tei-reranker
- 5.2.53. tempo
- 5.2.54. tika
- 5.2.55. trino
- 5.2.56. trueforge
- 5.2.57. tts-provider
- 5.2.58. verba
- 5.2.59. vllm-metal
- 5.2.60. weaviate
- 5.2.61. zeppelin
- 5.3. Provider And Extension Guides
- 6. Configuration
- 7. Operations
- 8. Architecture
- 9. Development
- 10. Reference