A lightweight local MLOps infrastructure foundation for building, experimenting with, and monitoring machine learning and LLM applications. It includes user-friendly web UIs such as Grafana for metrics monitoring and Floci UI for S3 storage management. Run S3-compatible workflows locally without an AWS account or cloud costs.
This repository provides a pre-configured local infrastructure foundation for your ML and LLM projects:
flowchart TD
App["π Your ML / LLM Project"]
Prometheus["π Prometheus"]
Grafana["π Grafana Dashboard"]
S3["πͺ£ Local S3 Storage (Floci)"]
App -->|Application & Model Metrics| Prometheus
Prometheus --> Grafana
App -->|Data, Models & Artifacts| S3
Instead of spending hours setting up local S3 storage, Grafana dashboards, and container monitoring, clone this repository and build your ML/LLM pipelines on top of it.
| Component | Technology | Purpose |
|---|---|---|
| Local S3 Storage | Floci (:4566) |
S3-compatible object storage for datasets, model weights, and embeddings. |
| S3 Management Web UI | Floci UI (:8080) |
Visual browser for inspecting buckets and object files. |
| Metrics Visualization | Grafana (:80) |
Pre-loaded dashboards for real-time container and host hardware monitoring. |
| Metrics Storage | Prometheus (:9090) |
Stores and queries application, container, and host metrics. |
| Telemetry Collectors | Telegraf & Node Exporter | Cross-platform container and host hardware metrics collectors (fully WSL2 compatible). |
- Docker Engine & Docker Compose v2 installed.
- AWS CLI v2 (Optional, recommended for local S3 CLI testing).
Note
For step-by-step installation guides (Docker Engine WSL2, AWS CLI v2), see the Optional Documentation section.
Launch all services in detached mode:
docker compose up -dCheck container status (use -a to view all containers, including completed init workers):
docker compose ps -aπ View Expected Output
NAME IMAGE COMMAND SERVICE STATUS
local_aws_floci floci/floci:1.6.0 "/usr/local/bin/dockβ¦" floci Up (healthy)
local_dashboard_init python:3.11-alpine "python3 -c ..." dashboard-init Exited (0)
local_docker_metrics telegraf:1.34.0-alpine "/bin/sh -c 'cat <<..." docker-metrics Up (healthy)
local_floci_ui floci/floci-ui:0.2.0 "./server" floci-ui Up
local_grafana grafana/grafana:13.1.3 "/run.sh" grafana Up (healthy)
local_nginx nginx:1.27.4-alpine "/docker-entrypoint.β¦" nginx Up (healthy)
local_node_exporter prom/node-exporter:v1.9.0 "/bin/node_exporter β¦" node-exporter Up (healthy)
local_prometheus prom/prometheus:v3.2.1 "/bin/prometheus --cβ¦" prometheus Up (healthy)
| Service | Access URL | Default Credentials / Notes |
|---|---|---|
| Grafana Dashboard | http://localhost |
admin / admin (Pre-configured metrics dashboard) |
| Floci S3 Web UI | http://localhost:8080 |
S3 Management Console |
| Local S3 Endpoint | http://localhost:4566 |
S3 API (Key: test / Secret: test / Region: us-east-1) |
| Prometheus Metrics | http://localhost:9090 |
Direct PromQL query browser |
Pre-provisioned dashboard displaying real-time host RAM/CPU gauges, container memory bars, CPU time-series, and network bandwidth.
π Expand to view additional Grafana Panels (CPU, Network & Summary Table)
Web interface for creating buckets, browsing folders, uploading, and downloading local S3 objects.
π Expand to view Prometheus Query Browser Preview
Direct PromQL query interface for inspecting metrics, evaluating target health, and testing time-series queries.
Interact with local S3 via AWS CLI or Python SDKs by pointing to http://localhost:4566:
# Create a bucket
aws --endpoint-url=http://localhost:4566 s3 mb s3://mlops-data
# List buckets
aws --endpoint-url=http://localhost:4566 s3 ls
# Upload datasets or model checkpoints
aws --endpoint-url=http://localhost:4566 s3 cp model.pt s3://mlops-data/v1/model.pt
# Download artifacts
aws --endpoint-url=http://localhost:4566 s3 cp s3://mlops-data/v1/model.pt ./model_downloaded.ptConnect your Python scripts, PyTorch models, or LangChain pipelines directly to local S3:
import boto3
s3 = boto3.client(
"s3",
endpoint_url="http://localhost:4566",
aws_access_key_id="test",
aws_secret_access_key="test",
region_name="us-east-1"
)
# Upload model weights or dataset splits
s3.upload_file("model.pt", "mlops-data", "v1/model.pt")Stops containers while preserving all S3 bucket files, Prometheus metrics, and Grafana settings:
docker compose downdocker compose down -vWarning
Running this removes persistent Docker volumes and permanently deletes all stored S3 objects, datasets, model checkpoints, and Prometheus metrics.




