How to run authentication on a mlFlow server?
If you just want MLFlow installed with some basic authentication you can use mlflow-easyauth to get a Docker container with HTTP basic auth (username/password) setup integrated. It uses Nginx under the hood. Authentication details are configured using environment variables.
Disclaimer: I am the maintainer of that project
the problem here is that both mlflow
and nginx
are trying to run on the same port...
first lets deal with nginx:
1.1 in /etc/nginx/sites-enable make a new file
sudo nano mlflow
and delete the exist default.1.2 in mlflow file:
server {
listen YOUR_PORT;
server_name YOUR_IP_OR_DOMAIN;
auth_basic “Administrator’s Area”;
auth_basic_user_file /etc/apache2/.htpasswd; #read the link below how to set username and pwd in nginx
location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
proxy_redirect off;
}
}
1.3. restart nginx sudo systemctl restart nginx
- on your server run mlflow
mlflow server --host localhost --port 8000
Now if you try access the YOUR_IP_OR_DOMAIN:YOUR_PORT within your browser an auth popup should appear, enter your host and pass and now you in mlflow
now there are 2 options to tell the mlflow server about it:
3.1 set username and pwd as environment variable
export MLFLOW_TRACKING_USERNAME=user export MLFLOW_TRACKING_PASSWORD=pwd
3.2 edit in your
/venv/lib/python3.6/site-packages/mlflowpackages/mlflow/tracking/_tracking_service/utils.py
the function
def _get_rest_store(store_uri, **_):
def get_default_host_creds():
return rest_utils.MlflowHostCreds(
host=store_uri,
username=replace with nginx user
password=replace with nginx pwd
token=os.environ.get(_TRACKING_TOKEN_ENV_VAR),
ignore_tls_verification=os.environ.get(_TRACKING_INSECURE_TLS_ENV_VAR) == 'true',
)
in your .py file where you work with mlflow:
import mlflow
remote_server_uri = "YOUR_IP_OR_DOMAIN:YOUR_PORT" # set to your server URI
mlflow.set_tracking_uri(remote_server_uri)
mlflow.set_experiment("/my-experiment")
with mlflow.start_run():
mlflow.log_param("a", 1)
mlflow.log_metric("b", 2)
A link to nginx authentication doc https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/