# Cloudlysis (monorepo) Production-oriented, multi-service Rust workspace with an operator-facing Control Plane (API + Admin UI), S3-backed document storage, and an optional observability stack for local parity. ## Quickstart (local dev) Core stack (includes MinIO + MailHog + Control Plane): ```bash docker compose up -d --build ``` Full local stack with observability (Grafana/Loki/Tempo/VictoriaMetrics): ```bash docker compose --profile observability up -d --build ``` Full local stack + Loki/Tempo using MinIO (S3 mode): ```bash docker compose -f docker-compose.yml -f observability/docker-compose.s3.yml --profile observability up -d --build ``` ## Local endpoints - **Control UI**: `http://localhost:8082` - **Control API**: `http://localhost:38080` - **Grafana** (observability profile): `http://localhost:3000` - **MailHog UI**: `http://localhost:8025` (SMTP on `localhost:1025`) - **MinIO console**: `http://localhost:9001` (S3 API on `localhost:9000`) ## Repository layout (high level) - **Rust services (Cargo workspace)**: `aggregate/`, `gateway/`, `projection/`, `runner/`, `control/api/`, `shared/` - **Admin UI**: `control/ui/` - **Docker / Swarm / Compose**: `docker/`, `docker-compose.yml`, `swarm/`, `observability/` ## Production (overview) - **Control plane Swarm stack**: `swarm/stacks/control-plane-prod.yml` - **S3 docs buckets**: `CONTROL_S3_BUCKET_DOCS` supports a comma-separated shard set (e.g. `cloudlysis-docs-0,cloudlysis-docs-1,cloudlysis-docs-2`). Bucket selection is deterministic per-tenant; keep the full shard set stable to avoid remapping tenants. - **S3 provisioning helpers** (idempotent scripts; CI/CD friendly): - `docker/scripts/s3_create_docs_bucket.sh` - `docker/scripts/s3_apply_lifecycle_docs.sh` - `docker/scripts/s3_verify_docs.sh` - Gitea Actions workflow: `.gitea/workflows/s3-provision.yml` ## Docs - **Docker / local dev / Swarm**: `DOCKER.md` - **Developer docs**: `docs/developer/setup.md`, `docs/developer/testing.md` - **Architecture**: `docs/architecture/overview.md`, `docs/architecture/transport.md` - **Usage**: `docs/usage/quickstart.md`, `docs/usage/api.md`, `docs/usage/nats.md` ## Workspace verification ```bash cargo fmt --check cargo clippy --workspace --all-targets -- -D warnings cargo test --workspace cd control/ui && npm ci && npm run lint && npm run typecheck && npm run test && npm run build ```