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
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
Ja. Ein Testzugang läuft auf jedem Ubuntu-24.04-Server, den du gerade übrig hast, und braucht kein DNS: Der Installer vergibt einen Namen unter sslip.io, mit echten Zertifikaten. Von mir brauchst du dafür nur einen Account. Weil der Hostname dir nicht gehört, sollten darauf keine Kundendaten liegen.
Abgerechnet wird nicht pro Nutzer. Der Preis hängt davon ab, ob ich den Hub für dich betreibe oder du ihn selbst installierst. Ein Angebot bekommst du, sobald ich weiß, was du vorhast.
Dann lösche ich deinen Account für die Registry. Dein Hub läuft mit den Images weiter, die
er schon hat, und hub deploy funktioniert weiterhin. Neue Releases bekommt er
keine mehr, und den Layer mit deinen Paketen und Zertifikaten kannst du nicht mehr neu
bauen, weil sein Build auf meinen Plattform-Images aufsetzt. Einen Lizenzserver, ein
Phone-Home oder einen Seat-Count gibt es nicht.
Claude Code läuft über die eigenen Anthropic-Accounts deiner Nutzer, der Assistent in RStudio über deren eigenen Login oder den API-Key eines Modellanbieters. Auf Wunsch richte ich einen anderen Agent ein, auch einen, der ein selbst gehostetes Modell nutzt, oder KI bleibt ganz aus. Die Details stehen in der Dokumentation.
Beim Hosting unter apps.linnerprogramming.com betreibe ich Anwendungen, die ich für dich gebaut habe. Mit Hub entwickelt und veröffentlicht dein Team selbst. Technisch laufen beide auf ShinyProxy.
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.