skore-hub: On-premise deployment guide¶
This guide describes how to deploy and operate the skore-hub platform (backend API + frontend) on your own Kubernetes cluster.
It is written for an infrastructure/platform team that already operates Kubernetes. It focuses on what skore-hub needs and how to wire it to your existing services; it does not teach Kubernetes itself.
The guide is split into five documents:
- This overview: what you deploy, architecture, prerequisites, and the deployment order.
- Installation: images, external services, OIDC, secrets, backend, frontend, ingress.
- Operations: verification, observability/logging, troubleshooting.
- Agent setup: enabling and onboarding the Skore agent (LLM orchestration).
- Configuration reference: every
SKH__*setting.
[!NOTE] Skore agent: air-gapped notice. The Skore agent (hub-side LLM orchestration) only supports Anthropic (SaaS) and AWS Bedrock as LLM backends. A deployment with no outbound access to either is not supported in this version. See Agent setup.
Contents¶
- What you deploy
- What you provide (bring your own)
- Architecture
- Prerequisites
- Deployment steps
- Conventions
What you deploy¶
| Component | Delivery |
|---|---|
| Backend API | Container image (Scaleway registry) + Helm chart skore-hub-backend |
| Frontend | Container image (nginx serving static assets) + Helm chart skore-hub-frontend |
What you provide (bring your own)¶
skore-hub connects to services that you operate:
- PostgreSQL database
- Redis
- S3-compatible object storage (bucket)
- SMTP server (transactional email)
- OIDC identity provider (your IdP) for authentication
Deploying and hardening those services is out of scope. This guide explains how to configure skore-hub to connect to them. See External services and OIDC.
Architecture¶
flowchart LR
browser(["User browser"])
lib(["skore library<br/>(Python client)"])
browser -->|HTTPS| ing[Ingress / TLS]
lib -->|"HTTPS (API)"| ing
ing --> fe["skore-hub frontend<br/>nginx + static SPA"]
ing --> be["skore-hub backend<br/>FastAPI API :8000"]
fe -->|"/api calls"| be
fe -->|"presigned URL"| s3[("S3 bucket")]
lib -->|"presigned URL"| s3
be --> pg[("PostgreSQL")]
be --> redis[("Redis")]
be -->|"generate presigned URLs"| s3
be --> smtp[["SMTP"]]
be <-->|OIDC| idp[["Your OIDC IdP"]]
browser <-->|"login redirect"| idp
- Two clients talk to skore-hub:
- the web UI, a user's browser loading the frontend SPA, which calls the backend API;
- the skore Python library, used from users' environments, which calls the backend API directly.
- The backend is a stateless FastAPI app on port
8000. State lives in PostgreSQL (relational data), Redis (token/cache), and S3 (artifacts/objects). - Object transfers use presigned URLs: the backend generates short-lived presigned URLs, and clients (the browser/frontend and the skore library) then read/write objects directly on S3. The S3 endpoint must therefore be reachable from the clients, not only from the backend (see External services).
- Authentication uses standard OpenID Connect: the browser is redirected to your IdP, and the backend validates tokens and reads the user profile from the IdP's
userinfoendpoint. See OIDC. - Logs are written to stdout (see Observability and logging).
- Database schema is created/updated by an Alembic migration Job run automatically on every Helm install/upgrade.
Prerequisites¶
Kubernetes cluster¶
- A Kubernetes cluster, v1.24+ (tested up to 1.36). The chart adapts the
IngressAPI version to the cluster version automatically. - Permissions to create, in a dedicated namespace:
Deployment,Service,Ingress,Job,Secret,ServiceAccountandHorizontalPodAutoscaler. - An Ingress controller (e.g. ingress-nginx) if you expose the app over HTTP(S).
- A mechanism to obtain TLS certificates (cert-manager, corporate PKI, or manually managed
kubernetes.io/tlssecrets).
Client tooling¶
On the workstation performing the deployment:
kubectlmatching your cluster version.helmv3.8+ (v4 also works).- Network access to the Scaleway container registry (
rg.fr-par.scw.cloud) to pull images, or a mirror into your internal registry (see Images and registry).
Backing services (bring your own)¶
The following must be reachable from the cluster network before deploying:
| Service | Version / notes |
|---|---|
| PostgreSQL | 14+ recommended (we run 18). One database + credentials for skore-hub. TLS optional. |
| Redis | 6+ recommended (we run 7.2). Standalone or cluster. TLS/auth optional. |
| S3-compatible storage | A bucket + access/secret keys. Path-style or virtual-host. Google Cloud Storage is supported via its S3 interoperability API (HMAC keys) — see GCS via S3 interoperability. |
| SMTP | Host/port + optional credentials and STARTTLS/TLS. |
| OIDC IdP | Must expose /.well-known/openid-configuration, an authorization code flow, a token endpoint and a userinfo endpoint. See OIDC. |
Sizing and connection details are covered in External services.
Network requirements¶
Outbound connectivity from the backend pods to:
- PostgreSQL, Redis, S3 endpoint, SMTP server, and the OIDC IdP (token and userinfo endpoints).
Inbound connectivity:
- From user browsers to the Ingress (frontend + backend).
- Redirects between the browser and the OIDC IdP authorization endpoint.
Provided by Probabl¶
Probabl provides you with:
- Scaleway registry credentials (username/password) to pull the images.
- The image references (repository and tag) for the backend and the frontend.
Information to collect before you start¶
Have these ready. You will need them for configuration and the OIDC client registration:
- Public URLs (FQDNs) for the frontend and the backend API.
- PostgreSQL host/port/database/user/password (+ CA cert if TLS).
- Redis host/port (+ password/TLS if used).
- S3 endpoint, bucket name, region (if applicable), access key, secret key.
- SMTP host/port, credentials, sender address, TLS mode.
- OIDC issuer URL, and the ability to register a new confidential client.
Deployment steps (overview)¶
- Prerequisites: cluster, tooling, network.
- Images and registry: pull from Scaleway.
- External services: Postgres, Redis, S3, SMTP.
- OIDC: register the client in your IdP.
- Secrets: create the application Secret.
- Install the backend: Helm, migrations.
- Frontend: deploy and wire to the backend.
- Ingress, TLS, DNS.
- Observability and logging.
- Verification and smoke tests.
- Troubleshooting.
- Agent setup (optional): enable the Skore agent and onboard harnesses.
Reference:
- Configuration reference: every
SKH__*setting.
Conventions¶
- The backend is configured through environment variables prefixed with
SKH__, using__as the nesting delimiter (e.g.SKH__DB__HOSTmaps to thedb.hostsetting). - Examples use the namespace
skore-huband the release nameskore-hub. Adapt freely.