Hub · für Data-Science-Teams

Im Browser entwickeln, mit einem Befehl veröffentlichen

Hub gibt deinem Team RStudio, VS Code und JupyterLab im Browser, mit Claude Code schon eingerichtet. Ist ein Projekt so weit, macht ein Befehl daraus eine App, einen Bericht, eine API oder eine Pipeline, die deine Kollegen mit ihrem Firmen-Login öffnen.

Gebaut auf Open Source

  • ShinyProxy
  • Kubernetes
  • BuildKit

Für Teams, die in R und Python arbeiten

Hub ist für Teams gedacht, deren Code, Daten und Apps im Unternehmen bleiben müssen: die Data-Science-Gruppe im Mittelstand, eine Forschungseinheit oder eine Beratung, die für mehrere Kunden arbeitet. Analysten und Data Scientists arbeiten damit, betrieben wird es von deiner IT oder von mir.

  • Ein Login: alle melden sich über deinen Identity Provider an, und dessen Gruppen entscheiden, wer Admin ist und wer welche App sieht
  • Ein Home-Verzeichnis: persistent und von allen drei IDEs geteilt
  • Ein Befehl zum Veröffentlichen: ohne Ticket an die IT und ohne handgeschriebenes Dockerfile
  • Kein Preis pro Nutzer: weder gehostet noch in deiner eigenen Infrastruktur

Komplett aus Open Source

ShinyProxy und der ShinyProxy Operator betreiben Sessions und Apps auf Kubernetes. k3s, Caddy, BuildKit, eine Container-Registry, Redis, Velero, Grafana, Loki und Prometheus erledigen den Rest. Zwischen deinem Team und seinem Code sitzt keine proprietäre Laufzeitumgebung.

Was dein Team nicht können muss

Docker, Kubernetes oder YAML. Ein Deploy erzeugt ein normales Container-Image, und Projekte bleiben ganz normale R- oder Python-Projekte.

Was drin ist

Die Details stehen in der Dokumentation. Das hier ist die kurze Fassung.

Drei IDEs, ein Home-Verzeichnis

RStudio Server, VS Code und JupyterLab starten von derselben Seite und teilen sich das Home-Verzeichnis des Nutzers. Die Größe wählt man pro Session, und von einer IDE können mehrere Sessions nebeneinander laufen.

Coding-Agents, die die Plattform kennen

Claude Code läuft in jeder IDE, RStudio hat zusätzlich einen eigenen Assistenten. Beide bekommen zentral dieselben Instructions, Rules und Skills. Sie kennen also das Projektlayout, wissen, wie ein Deploy funktioniert, und können einen fehlgeschlagenen Build reparieren. KI lässt sich auch ganz abschalten.

Deployment aus der IDE

hub deploy baut das Projekt im aktuellen Verzeichnis, pusht das Image und registriert es. Das geht für Shiny in R und Python, Quarto und R Markdown, Plumber- und FastAPI-APIs, MCP-Server und zeitgesteuerte targets-Pipelines. hub rollback holt jede der letzten zehn Versionen zurück.

Dein Identity Provider

OpenID Connect mit Keycloak, Microsoft Entra ID, Okta, Auth0 oder Cognito, dazu LDAP, Active Directory und SAML. Mit OIDC akzeptieren auch die APIs dessen Tokens. Skripte und andere Services rufen sie dann mit einer echten Identität auf.

Deine Pakete, dein Netzwerk

Die R- und Python-Paketstände stehen je in einer Textdatei und sind auf ein Snapshot-Datum gepinnt. Private Mirrors, die CA-Zertifikate deiner Firma und zusätzliche Systempakete gehören zur Konfiguration. Der Image-Layer, der sie enthält, wird in deinem Netz gebaut.

Versionierte Releases

Jedes Release ist ein einzelnes, versioniertes Artefakt. install.sh upgrade hebt den Hub auf die neue Version, install.sh rollback geht zurück auf die vorige. Tägliche Backups in einen S3-Bucket und Monitoring mit Alert-Mails sind je eine Installer-Option.

So läuft ein Deploy

Vom leeren Projekt bis zur App, die deine Kollegen öffnen.

Projekt anlegen

In RStudio oder VS Code auf dem Hub, mit hub::new_app(), über den Projekt-Assistenten in RStudio oder indem man den Agent darum bittet.

Ganz normal arbeiten

renv oder uv hält die Abhängigkeiten fest. Der Agent kennt das Projektlayout und die Befehle des Hubs.

Veröffentlichen

hub deploy baut ein Image mit deinen Paketen und deren Systembibliotheken, pusht es in die Registry des Hubs und registriert die App.

Erster Build ein paar Minuten, Redeploy mit unveränderten Paketen in Sekunden

Kollegen öffnen die App

Mit ihrem Firmen-Login. Welche Gruppen Zugriff haben, steht in der hub.yaml im Projekt.

$ hub deploy
hub: packing /home/rstudio/sales as 'sales'
hub: building sales as registry.hub.acme.example/apps/sales:latest (shiny; mode: renv, Dockerfile: generated, renv.lock: yes)
hub: system packages: libcurl4-openssl-dev libssl-dev
...
hub: pushed registry.hub.acme.example/apps/sales:latest (sha256:3f9c1a7e2b04)
hub: app registered; the apps server restarts (about a minute)
hub: https://apps.hub.acme.example/app/sales
Ausgabe eines Deploys, das Build-Log ist ausgelassen.

Gehostet oder bei dir

Beides ist dieselbe Software mit demselben Installer.

Gehostet von mir

  • Ein eigener Server pro Kunde, mit niemandem geteilt
  • Installation, Upgrades und Monitoring übernehme ich
  • Dein Team meldet sich über deinen Identity Provider an
  • Die Konfiguration gehört dir und zieht mit um, wenn du den Hub später selbst betreibst

In deiner Infrastruktur

  • Ein frischer Ubuntu-Server ist mit einem Befehl eingerichtet
  • Für einen bestehenden Kubernetes-Cluster läuft derselbe Installer von einem Jump Host aus
  • Die Plattform-Images kommen mit deinem Account aus meiner Registry
  • Der Layer mit deinen Paketen und Zertifikaten wird auf deiner Seite gebaut

Häufige Fragen zu Hub

Hub ausprobieren

Die Dokumentation unter docs.hub.linnerprogramming.com beschreibt Installation, Konfiguration und Deployment im Detail. Sie ist auf Englisch. Für einen Testzugang, einen gehosteten Hub oder ein Angebot für deine eigene Infrastruktur schreib mir kurz, was du vorhast.