{"id":50797101,"url":"https://github.com/nebari-dev/nebari-mlflow-pack","last_synced_at":"2026-06-12T15:30:31.536Z","repository":{"id":343768666,"uuid":"1173892122","full_name":"nebari-dev/nebari-mlflow-pack","owner":"nebari-dev","description":"A Nebari software pack that deploys MLflow with Keycloak authentication, a PostgreSQL backend, and automatic TLS.","archived":false,"fork":false,"pushed_at":"2026-05-28T14:38:51.000Z","size":1003,"stargazers_count":0,"open_issues_count":4,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-28T16:21:35.250Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nebari-dev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-05T21:26:43.000Z","updated_at":"2026-05-28T14:40:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nebari-dev/nebari-mlflow-pack","commit_stats":null,"previous_names":["nebari-dev/nebari-mlflow-pack"],"tags_count":2,"template":false,"template_full_name":"nebari-dev/nebari-software-pack-template","purl":"pkg:github/nebari-dev/nebari-mlflow-pack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebari-dev%2Fnebari-mlflow-pack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebari-dev%2Fnebari-mlflow-pack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebari-dev%2Fnebari-mlflow-pack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebari-dev%2Fnebari-mlflow-pack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nebari-dev","download_url":"https://codeload.github.com/nebari-dev/nebari-mlflow-pack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nebari-dev%2Fnebari-mlflow-pack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34251773,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-12T15:30:30.206Z","updated_at":"2026-06-12T15:30:31.530Z","avatar_url":"https://github.com/nebari-dev.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nebari MLflow Pack\n\nDeploys [MLflow](https://mlflow.org/) on [Nebari](https://nebari.dev) with\nKeycloak authentication, PostgreSQL backend storage, and automatic TLS.\n\n## Quick Start\n\n1. **Create the PostgreSQL credentials secret:**\n\n   ```bash\n   kubectl create namespace mlflow\n\n   kubectl create secret generic mlflow-pack-postgresql \\\n     --namespace mlflow \\\n     --from-literal=password=\"$(openssl rand -base64 32)\" \\\n     --from-literal=postgres-password=\"$(openssl rand -base64 32)\"\n   ```\n\n   The secret name **must** be `\u003crelease-name\u003e-postgresql` and contain keys\n   `password` (mlflow DB user) and `postgres-password` (superuser).\n\n2. **Copy the example ArgoCD Application and edit it for your cluster:**\n\n   ```bash\n   cp examples/nebari-values.yaml /path/to/your/gitops-repo/apps/mlflow-pack.yaml\n   ```\n\n   Update `nebariapp.hostname`, `nebariapp.keycloakHostname`, and\n   `mlflow.postgresql.primary.persistence.storageClass` for your environment.\n\n3. **Add `mlflow.\u003cyour-domain\u003e` to your gateway certificate and DNS.**\n\nSee [examples/nebari-values.yaml](examples/nebari-values.yaml) for\nthe full ArgoCD Application manifest.\n\n## Connecting JupyterHub\n\nTo allow [nebari-data-science-pack](https://github.com/nebari-dev/nebari-data-science-pack)\nnotebooks to log experiments to MLflow, add the following to your\ndata-science-pack ArgoCD Application values:\n\n```yaml\njupyterhub:\n  singleuser:\n    extraEnv:\n      MLFLOW_TRACKING_URI: \"http://mlflow-pack.mlflow.svc.cluster.local:80\"\n    networkPolicy:\n      egress:\n        - ports:\n            - port: 5000\n              protocol: TCP\n          to:\n            - namespaceSelector:\n                matchLabels:\n                  kubernetes.io/metadata.name: mlflow\n```\n\nThe egress rule uses port **5000** (the pod port) because NetworkPolicy operates\nat the pod IP level, not the ClusterIP service level (which maps 80 to 5000).\n\nAfter applying, existing JupyterLab sessions must be restarted (stop/start from\nthe hub control panel) to pick up the new environment variable and NetworkPolicy.\n\n### Verify from a notebook\n\n```python\nimport mlflow\nmlflow.set_experiment(\"test\")\nwith mlflow.start_run():\n    mlflow.log_param(\"framework\", \"pytorch\")\n    mlflow.log_metric(\"accuracy\", 0.95)\nprint(\"Run ID:\", mlflow.last_active_run().info.run_id)\n```\n\n## Configuration\n\n### PostgreSQL\n\nBy default, this chart bundles a Bitnami PostgreSQL instance. For dev/testing\nyou can pass the password inline instead of creating a secret:\n\n```bash\nhelm install mlflow-pack . \\\n  --set mlflow.postgresql.auth.password=my-dev-password\n```\n\n**Do not use inline passwords in production or commit them to a gitops repository.**\n\nTo disable PostgreSQL and use in-memory SQLite (data lost on pod restart):\n\n```yaml\nmlflow:\n  postgresql:\n    enabled: false\n```\n\n### Allowed Hosts\n\nThe chart automatically whitelists the NebariApp hostname and the\ncluster-internal service name via `MLFLOW_SERVER_ALLOWED_HOSTS`. To allow\nadditional hosts:\n\n```yaml\nsecurity:\n  additionalAllowedHosts:\n    - custom-alias.internal\n```\n\n## Troubleshooting\n\n### NebariApp not ready\n\n```bash\nkubectl get nebariapp -n mlflow\nkubectl describe nebariapp -n mlflow\n```\n\nCheck conditions: `RoutingReady`, `TLSReady`, `AuthReady` should all be `True`.\n\n## License\n\nApache 2.0 - see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnebari-dev%2Fnebari-mlflow-pack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnebari-dev%2Fnebari-mlflow-pack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnebari-dev%2Fnebari-mlflow-pack/lists"}