Spaces:
Paused
Paused
FROM python:3.11-slim | |
# Install system dependencies | |
RUN apt-get update && apt-get install -y --no-install-recommends \ | |
wget \ | |
gnupg \ | |
curl \ | |
ca-certificates \ | |
sudo \ | |
&& rm -rf /var/lib/apt/lists/* | |
# Create a non-root user | |
RUN useradd -ms /bin/bash mlflowuser && \ | |
echo "mlflowuser ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/mlflowuser | |
# Install MinIO server and client | |
RUN wget https://dl.min.io/server/minio/release/linux-amd64/minio \ | |
&& chmod +x minio \ | |
&& mv minio /usr/local/bin/minio | |
RUN wget https://dl.min.io/client/mc/release/linux-amd64/mc \ | |
&& chmod +x mc \ | |
&& mv mc /usr/local/bin/mc | |
# Install MLflow and MinIO client library | |
RUN pip install --no-cache-dir \ | |
mlflow>=3.1 \ | |
boto3==1.37.25 \ | |
psycopg2-binary==2.9.10 \ | |
PyMySQL==1.1.0 | |
# Set environment variables for MinIO | |
ENV MINIO_ROOT_USER=minioadmin | |
ENV MINIO_ROOT_PASSWORD=minioadmin | |
ENV MINIO_DOMAIN=hf.space | |
ENV AWS_ACCESS_KEY_ID=minioadmin | |
ENV AWS_SECRET_ACCESS_KEY=minioadmin | |
ENV MLFLOW_S3_ENDPOINT_URL=http://localhost:9000 | |
ENV BUCKET_NAME=mlflow | |
# Create directories and set permissions | |
RUN mkdir -p /tmp/minio /tmp/mlflow && \ | |
chown -R mlflowuser:mlflowuser /tmp && \ | |
chmod -R 777 /tmp | |
# Create a home directory for mc config | |
RUN mkdir -p /home/mlflowuser/.mc && \ | |
chown -R mlflowuser:mlflowuser /home/mlflowuser | |
# Switch to non-root user | |
USER mlflowuser | |
WORKDIR /home/mlflowuser | |
# Create a setup script | |
RUN echo '#!/bin/bash \n\ | |
minio server /tmp/minio --console-address ":9001" & \n\ | |
sleep 5 \n\ | |
# Configure MinIO client and create bucket \n\ | |
mc alias set myminio http://localhost:9000 ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD} \n\ | |
mc mb myminio/${BUCKET_NAME} --ignore-existing \n\ | |
# Start MLflow server with MinIO as artifact store \n\ | |
mlflow server \ | |
--backend-store-uri /tmp/mlflow \ | |
--default-artifact-root s3://${BUCKET_NAME}/ \ | |
--host 0.0.0.0 \ | |
--port 7860 \ | |
' > /home/mlflowuser/start.sh && chmod +x /home/mlflowuser/start.sh | |
# Expose ports | |
EXPOSE 7860 9000 9001 | |
# Start services | |
CMD ["/home/mlflowuser/start.sh"] |