Landscapes & Workspaces
Landscapes und Workspaces sind zwei zentrale Bausteine von Codesphere. Ein Landscape ist eine Deployment-Konfiguration der Anwendung und ihrer Architektur, die auf deklarative Weise durch eine einzelne Konfigurationsdatei (ci.yml) definiert wird. Jede bereitgestellte Instanz eines Landscapes ist mit einem Workspace verknüpft, der die Werkzeuge zum Konfigurieren, Anpassen, Deployen und Verwalten des Landscapes bereitstellt.
Was ist ein Landscape
Ein Landscape ist eine Deployment-Konfiguration der Anwendung und ihrer Architektur, vollständig definiert durch eine einzelne ci.yml-Datei im Repository. Dieser Infrastructure-as-Code (IaC) Bauplan legt die Deployments, Managed-Services-Abhängigkeiten und deren Verbindung über ein sicheres privates Netzwerk fest. Da alles versionskontrolliert ist, kann dasselbe Rezept auf jede beliebige Codesphere-Instanz ausgerollt werden.
Was ist ein Workspace
Der Workspace ist ein eigenes Cockpit für die Interaktion mit einer bestimmten Landscape-Instanz. Er läuft auf eigenen Compute-Ressourcen, ist aber an denselben Dateisystem-Mount wie das Landscape angebunden.
Wenn ein Workspace nicht aktiv genutzt wird, fährt er automatisch herunter, um Ressourcen zu schonen. Bei Rückkehr wird er wieder aktiviert und die Sitzung wiederhergestellt. Durch dieses On-Demand-Modell verbrauchen Workspaces nur dann Compute-Ressourcen, wenn sie aktiv genutzt werden.
Jeder Workspace verfügt über ein integriertes Set an Werkzeugen (das Workspace Toolkit), mit denen das Landscape gebaut, deployed und überwacht werden kann. Alle Werkzeuge sind über die Seitenleiste in einer einheitlichen Ansicht zugänglich:
- Code & Collaborate: Eine vollausgestattete Cloud-IDE mit Anbindung an lokale IDEs, Git-Integration und Echtzeit-Teamzusammenarbeit
- CI & Deploy: Konfiguration von CI-Pipelines und CI-Profilen, Verwaltung von Umgebungsvariablen und Steuerung von Deployments
- Monitor: Überwachung von Application Health und Logs, Tracing von Requests sowie Monitoring der Performance von Workspace und Anwendung
Um zu starten, siehe die Anleitung Quickstart: Deploy your first Application.
Hast du einen Feature-Wunsch?
Hilf uns, die Zukunft von Codesphere mitzugestalten. Neue Features können unter feedback.codesphere.com vorgeschlagen oder in der Community-Roadmap bewertet werden.
Der Landscape-Lebenszyklus
Der Lebenszyklus eines Landscapes wird über das Workspace Toolkit verwaltet und lässt sich in vier Phasen unterteilen:
-
Landscape definieren
Über die Workspace-Werkzeuge oder durch Bearbeiten der IaC-Dateici.ymlwird das Landscape aus den Bausteinen von Codesphere zusammengesetzt: Compute-Runtimes, Managed Services, Routing-Regeln und Speicheroptionen. Dieser deklarative Ansatz sorgt dafür, dass das Deployment versionskontrolliert und reproduzierbar bleibt. -
Codesphere instanziiert das Landscape
Wenn ein Landscape synchronisiert wird, stellt Codesphere alle Ressourcen bereit und startet die Services. Die Plattform verfolgt dabei alle Änderungen an derci.yml. Um ein laufendes Landscape zu aktualisieren, klicke auf den Sync-Button im Execution Manager. Details dazu findest du unter Landscape Lifecycle. -
Verwaltung über den Workspace
Das Workspace Toolkit gibt volle Kontrolle über das Landscape. Code oder Konfigurationen können in der Cloud-IDE geschrieben und getestet werden, Builds lassen sich im CI & Deploy-Panel auslösen und Secrets verwalten, und die Monitor-Werkzeuge ermöglichen es, Logs einzusehen, Requests zu tracen und Probleme in Echtzeit zu debuggen. -
Nutzer greifen auf die Anwendung zu
Nach dem Deployment werden die Services über den Landscape-Router bereitgestellt. Nutzer erreichen die Anwendung über eine eigene Domain oder die Dev-Domain, während interne Services sicher innerhalb des privaten Netzwerks isoliert bleiben.
Architekturübersicht
Der Workspace und die zugehörige Landscape-Instanz sind an dasselbe Netzwerk-Dateisystem angebunden, laufen jedoch auf getrennten Compute-Ressourcen. Diese Isolation stellt sicher, dass Workspace-Aktivitäten (wie Builds, Installation von Abhängigkeiten oder IDE-Operationen) niemals die Performance oder Verfügbarkeit der Live-Anwendung beeinträchtigen.

Entsprechende barrierefreie Textbeschreibung
Was läuft wo:
- Workspace: Übernimmt Builds, Installation von Abhängigkeiten, Interaktionen mit dem Dateibaum, Language Server und Terminal-Sitzungen.
- Jeder Service im Landscape: Läuft auf eigenen dedizierten Ressourcen und bedient die Live-Anwendung unabhängig.
Das bedeutet, dass selbst wenn das Workspace-Deployment auf Fehler stößt (z. B. weil es für die Art der Workload zu klein dimensioniert ist), die deployten Landscape-Services davon unberührt bleiben. Es bedeutet auch, dass der Workspace neu gestartet werden kann (z. B. um die neueste Codesphere-Version zu erhalten), ohne die Landscape-Workloads zu beeinträchtigen.
Landscape-Bausteine
Dieser Abschnitt behandelt die zentralen Komponenten, aus denen ein Landscape besteht. Eine schrittweise Anleitung zur Konfiguration dieser Elemente findest du im Artikel Landscape Configuration.
Die ci.yml-Datei
Die ci.yml bietet ein standardisiertes Format zur Definition des Landscapes. Sie kann über die Benutzeroberfläche konfiguriert oder manuell im Repository bearbeitet werden. Eine schrittweise Anleitung findest du unter Landscape Configuration. Die Datei besteht aus zwei Hauptabschnitten:
prepare: Definiert die Runtime-Umgebung sowie alle Abhängigkeiten und baut die Anwendungrun: Definiert die Deployment-Artefakte und deren Konfiguration
Nachfolgend ein Beispiel einer ci.yml-Datei, die eine Nextcloud-Anwendung definiert.
- Prepare: Lädt den Anwendungsquellcode herunter und installiert die nötigen Runtime-Abhängigkeiten mithilfe von Nix, um die Reproduzierbarkeit der Umgebung zu gewährleisten.
- Run: Konfiguriert die Deployment-Ressourcen, Umgebungsvariablen und das Networking und führt anschließend den Befehl zum Starten des Services aus.
schemaVersion: v0.2
# 1. PREPARE: Define the runtime environment
prepare:
steps:
- name: Download Nextcloud
command: wget -O nextcloud.zip https://download.nextcloud.com/server/releases/nextcloud-31.0.8.zip
- name: Install Dependencies
# We define the environment using Nix for reproducibility
command: nix-env -iA nixpkgs.php83 nixpkgs.php83Extensions.pgsql nixpkgs.nginx
# 2. RUN: Orchestrate the Landscape
run:
nextcloud:
plan: 21
env:
# Internal networking is handled automatically
PG_HOST: ms-postgres-internal-dns-string
PG_PASSWORD: VAULT_PG_PASSWORD
network:
ports:
- port: 3000
isPublic: false # Secure internal port
paths:
- port: 3000
path: /
steps:
- name: Start Stack
command: |
php-fpm -y ./nextcloud/php/nextcloud.conf
nginx -c $(pwd)/nextcloud/nginx/nextcloud.conf
pgnext:
provider:
name: postgres
version: v1
plan:
id: 0
tipp
Diese Beispieldatei verwendet unterschiedliche Runtime-Typen (Codesphere Reactive, Managed Service), um das Landscape zu definieren. Eine detaillierte Aufschlüsselung der einzelnen Runtime-Typen findest du im Artikel Runtimes oder weiter unten in Kurzform.
Runtimes
Codesphere unterstützt mehrere Runtime-Typen innerhalb eines Landscapes:
- Codesphere Reactives: Eine containerisierte Umgebung auf Basis eines gemeinsamen Codesphere-Basisimages mit zustandsbehafteten Serverless-Funktionen und Startzeiten im Millisekundenbereich.
- Managed Containers: Bringe eigene Docker-Images mit, während Codesphere die Orchestrierung übernimmt (Skalierung, IDE-Zugriff, Networking und Monitoring).
- Cloud Native Deployments: Ein virtueller Managed-Kubernetes-Cluster, der zum Deployment cloud-nativer Anwendungen mit vollem
kubectl-Zugriff genutzt werden kann. - Virtual Machines (bald verfügbar): Eine auf Kubevirt basierende virtuelle Maschine, die mit jedem beliebigen benutzerdefinierten Image konfiguriert werden kann.
- Managed Services: Vorkonfigurierte Services aus dem Marketplace (Datenbanken, Message Queues, Caches), die deployed und mit dem Landscape verbunden werden können.
Eine detaillierte Aufschlüsselung der einzelnen Runtime-Typen findest du im Artikel Runtimes.
Privates Networking
Standardmäßig werden Landscapes innerhalb eines sicheren privaten Netzwerks bereitgestellt. Services bleiben isoliert und sind nur dann aus dem öffentlichen Internet erreichbar, wenn dies explizit in der ci.yml-Datei oder über die Benutzeroberfläche konfiguriert wurde. So kann beispielsweise nur ein API-Gateway öffentlich zugänglich gemacht werden, während Backend-Microservices vor externem Traffic geschützt bleiben.
info
Container-Services (Reactives / Docker-Deployments) innerhalb eines Landscapes kommunizieren über interne URLs: http://ws-server-[WorkspaceId]-[serviceName]:[port]. Die interne URL eines Services kann über die Schaltfläche Copy im Port-Konfigurationspanel kopiert werden.
Diese internen URLs sind nur innerhalb des privaten Netzwerks des Landscapes auflösbar und können nicht aus dem öffentlichen Internet oder dem Browser eines Nutzers erreicht werden. Öffentliche Services können weiterhin intern über ihre interne URL erreicht werden, private Services sind hingegen ausschließlich über dieses interne Netzwerk zugänglich.
Der Landscape-Router
Der Landscape-Router definiert die HTTP-Einstiegspunkte zu öffentlich verfügbaren reaktiven Services (siehe Architekturübersicht). Wenn Traffic eingeht, prüft der Router den Anfragepfad und leitet die Anfrage basierend auf den konfigurierten Pfadpräfixen an den entsprechenden Service weiter.
Die Services können über zwei Arten von URLs erreicht werden:
- Eigene Domain:
customdomain.com/*- die eigene Domain, konfiguriert in den Domain-Einstellungen - Dev-Domain:
https://[workspace-id]-3000.[datacenter-id].[your instance url]/*- wird dem Workspace standardmäßig zugewiesen
Definiert ein Landscape beispielsweise drei Services (foo, bar und tea), leitet der Router eingehende Anfragen wie folgt weiter:
/foo/*→ wird an den Servicefooweitergeleitet/bar/*→ wird an den Servicebarweitergeleitet/tea/*→ wird an den Serviceteaweitergeleitet
Dieses pfadbasierte Routing wird im Abschnitt network.paths der ci.yml für jeden Service konfiguriert.
Der Router übernimmt automatisch das Load Balancing über die Service-Replicas hinweg und stellt sicher, dass Anfragen gleichmäßig auf alle laufenden Instanzen eines Services verteilt werden. Er arbeitet auf Landscape-Ebene, das heißt, jedes Landscape verfügt über eine eigene, isolierte Routing-Konfiguration, wodurch mehrere Landscapes mit identischen Pfadstrukturen konfliktfrei nebeneinander bestehen können.
info
Standardmäßig pingt der Landscape-Router die reaktiven Services über Port 3000, um deren Health zu prüfen. Ein benutzerdefinierter Health-Endpunkt kann in der Service-Konfiguration eingerichtet werden.
Netzwerk-Dateisystem
Jede Codesphere Reactive (einschließlich des Workspace-Deployments selbst) ist mit einem Netzwerk-Dateisystem verbunden. Der gesamte verfügbare Speicherplatz wird auf Workspace-Ebene festgelegt und von allen Reactive-Services im Landscape gemeinsam genutzt. Er kann in den Workspace-Einstellungen über die Workspace-Tabelle geändert werden.
Beim Einrichten der Anwendung sollte darauf geachtet werden, dass Services während der Laufzeit nicht gleichzeitig in dieselben Dateien schreiben, um Datenkorruption zu vermeiden. Best Practice ist es, jeden Service in einem eigenen Verzeichnis auszuführen und dieses Verzeichnis als Mount-Punkt zu konfigurieren.
warnung
Nur Dateien, die in /home/user/app geschrieben werden, werden im Netzwerk-Dateisystem persistiert und für alle Services gemeinsam verfügbar gemacht. Dateien, die an anderer Stelle geschrieben werden, existieren nur auf der lokalen Festplatte des jeweiligen Pods und sind für andere Services oder Replicas nicht verfügbar. Diese lokalen Dateien gehen zudem bei Workspace-Neustarts verloren, die z. B. durch Skalierung oder Codesphere-Updates ausgelöst werden können.
Fehlerbehebung & häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| Services bleiben im Zustand „unhealthy“ | Die Anwendung wird vom Landscape-Router nicht erkannt | Stelle sicher, dass die Anwendung auf Port 3000 läuft, oder konfiguriere einen benutzerdefinierten Health-Endpunkt in der Service-Konfiguration |
| Dateien gehen nach einem Workspace-Neustart verloren | Schreiben außerhalb von /home/user/app | Speichere alle persistenten Daten innerhalb des App-Verzeichnisses |
| OOM während Builds | Zu klein dimensionierter Workspace-Plan | Erhöhe die Workspace-Ressourcen über die Workspace-Einstellungen in der Workspace-Tabelle; deployte Services bleiben davon unberührt |
| Service ist im Browser nicht erreichbar | Service ist nicht öffentlich freigegeben oder verwendet eine falsche Port-/Pfad-Konfiguration | Prüfe, ob der Service über die Landscape-Router-Konfiguration in der ci.yml korrekt freigegeben ist, und überprüfe die Port-Einstellungen |