Zum Hauptinhalt springen
Version: 1.89.x (Q2 26)

Eine Landscape konfigurieren

Eine Landscape definiert, wie deine Services deployt und verbunden werden. Du kannst Compute Runtimes (Reactives, Managed Containers, Cloud Native Deployments) und Managed Services hinzufügen und deren Ressourcen, Netzwerk und Umgebung konfigurieren. Für einen tieferen technischen Überblick siehe Landscapes & Workspaces.

Jede Konfiguration beginnt im Landscape Config Editor:

  1. Öffne in deinem Workspace den Landscape Config Editor über die Seitenleiste.
  2. Stelle sicher, dass das richtige CI Profile ausgewählt ist (z. B. default oder dev). Falls du eines erstellen musst, siehe CI Profiles verwenden.
  3. Klicke rechts im Bereich Landscape Deployment auf + Add New Service und wähle den gewünschten Service-Typ aus.

Von hier aus kannst du deine Landscape über den visuellen Editor konfigurieren oder die ci.yml-Datei direkt bearbeiten.

Speichern von Service-Konfigurationen

Die Landscape-Config-UI verhält sich wie ein großes Formular, das deine ci.yml-Datei konfiguriert. Du kannst die Konfiguration nur auf der obersten Ebene des Formulars speichern.

Codesphere Reactives

Codesphere Reactives sind die Vorzeige-Runtime von Codesphere und lassen sich am besten als stateful serverless beschreiben. Sie kombinieren persistenten Dateisystemzugriff mit automatischer Ressourcenfreigabe während Inaktivität und einem quasi-instantanen Start (Millisekunden). Für einen detaillierten Überblick siehe Runtimes.

Um eine Reactive hinzuzufügen, wähle Reactive Service aus der Service-Typ-Auswahl aus und konfiguriere sie anschließend anhand der folgenden Abschnitte.

Runtime Config

Landscape Config Editor mit Runtime-Konfigurationsfeldern für einen Reactive Service, einschließlich Execution Steps, Base-Image-Auswahl und Mounting-Pfaden.

Execution Steps

Execution Steps definieren die Befehle, die beim Start deines Services ausgeführt werden. Diese Befehle laufen sequenziell und sollten deinen Anwendungsprozess starten.

So fügst du Execution Steps hinzu:

  1. Klicke auf + Add Execution Step
  2. Gib einen Namen für den Schritt ein (z. B. „Start Server“)
  3. Gib den auszuführenden Befehl ein (z. B. npm start oder node server.js)
  4. Wiederhole diesen Vorgang, falls weitere Schritte benötigt werden

Service Execution

Der letzte Schritt sollte in der Regel ein langlaufender Prozess sein (wie ein Webserver). Wenn alle Befehle beendet werden, wird der Service als unhealthy markiert: Der Service läuft, aber seine Pipeline wird nicht mehr ausgeführt.

Base-Image-Konfiguration

Reactives verwenden standardmäßig ein gemeinsames, von Codesphere gepflegtes Ubuntu-Base-Image (Codesphere Defaults). Dieses Image ist vorgewärmt und gepoolt für einen quasi-instantanen Start (Millisekunden). Du kannst die Runtime-Umgebung anpassen, indem du Abhängigkeiten über Nix installierst. Für fortgeschrittene Anwendungsfälle steht außerdem die Option Custom Base Image zur Verfügung, die als Grundlage für Managed Containers dient.

Mounting-Pfade

Standardmäßig mounten alle Reactive Services das gesamte Verzeichnis /home/user/app aus dem gemeinsamen Netzwerk-Dateisystem. Über die Einstellung Mounting Paths kannst du einen Service so einschränken, dass er nur ein bestimmtes Unterverzeichnis mountet.

Anwendungsfälle für Mount-Unterpfade:

  • Isolierung des Dateizugriffs zwischen Services, um versehentliches Überschreiben zu verhindern
  • Verbesserte Sicherheit durch Einschränkung des Dateisystembereichs jedes Services
  • Organisation von Multi-Service-Architekturen mit dedizierten Verzeichnissen

warnung

Nur Dateien, die unter /home/user/app geschrieben werden, werden im Netzwerk-Dateisystem persistiert und zwischen allen Services geteilt. Dateien, die an anderer Stelle geschrieben werden, existieren nur auf der lokalen Festplatte des jeweiligen Pods und stehen anderen Services oder Replicas nicht zur Verfügung. Diese lokalen Dateien gehen außerdem bei Workspace-Neustarts verloren, die z. B. durch Skalierung oder Codesphere-Updates ausgelöst werden können.

Resources

Bereich „Resources“ im Landscape Config Editor mit Plan-Auswahl, Verfügbarkeitsmodus, Replica-Steuerung und geschätzten monatlichen Kosten.

Jeder Service hat einen Resource Plan, der die zugewiesenen vCPUs, den Arbeitsspeicher und den Speicherplatz bestimmt. Die verfügbaren Pläne und deren Preise werden von deinem Cluster-Administrator konfiguriert und können sich zwischen Installationen unterscheiden.

So konfigurierst du Ressourcen:

  1. Wähle einen Plan aus der Liste aus (jeder Plan zeigt seine vCPU-, Arbeitsspeicher- und Speicherzuweisung)
  2. Lege den Availability-Modus fest:
    • Always on: Der Service läuft durchgehend, ideal für Produktions-Workloads
    • Off when unused: Der Service stoppt automatisch nach einer Phase der Inaktivität und startet neu, wenn auf die Domain oder den Workspace zugegriffen wird — hervorragend geeignet für Preview-Deployments oder Entwicklungsumgebungen
  3. Lege die Default Replicas-Anzahl für horizontale Skalierung über die Steuerelemente / + fest

info

Der Screenshot zeigt unten eine Kostenübersicht mit geschätzten Kosten pro Ressource und Gesamtkosten pro Monat. Beachte, dass dies nicht auf allen Installationen sichtbar sein muss.

Details zur Definition und Anpassung von Plänen findest du im Artikel Plans Configuration.

Skalierungsstrategien:

TypBeschreibungAm besten geeignet für
Vertikale SkalierungErhöhung von vCPUs/Arbeitsspeicher durch Auswahl eines höheren PlansRechen- oder speicherintensive Workloads
Horizontale SkalierungHinzufügen mehrerer Replicas desselben ServicesBewältigung eines erhöhten Anfragevolumens

Ports & Routes

Bereich „Ports & Routes“ im Landscape Config Editor mit Health-Check-Einstellungen, freigegebenen Service-Ports und Pfad-Zuordnungen des Workspace Routers.

Health Check

Standardmäßig pingt der Landscape Router deine Reactive Services auf Port 3000 an, um ihre Gesundheit zu prüfen. Du kannst einen benutzerdefinierten Health-Endpoint konfigurieren, z. B. http://localhost:8080/health, falls deine Anwendung einen anderen Port oder Pfad für Health Checks verwendet. Die Anfrage wird außerdem innerhalb des Service-Containers ausgeführt, daher muss die Anwendung unter localhost erreichbar sein. Wenn sie an ein anderes Interface gebunden ist, gib stattdessen die entsprechende IP-Adresse oder den Hostnamen an.

info

Jeder Service benötigt mindestens eine definierte Route. Ohne Route wird der Service vom Workspace Router nicht erfasst — er gilt dann nicht als healthy und ist von außerhalb der Landscape nicht erreichbar.

Ports konfigurieren

Dieser Abschnitt definiert die Ports, die dein Service freigibt. Für die interne Kommunikation zwischen Services sollten interne Port-URLs verwendet werden, während Ports über den unten stehenden Workspace Router zugänglich gemacht werden können. Das Routing lässt sich zudem über benutzerdefinierte Domains weiter anpassen.

Reactives innerhalb einer Landscape kommunizieren über interne URLs: http://ws-server-[WorkspaceId]-[serviceName].workspaces:[port]. Die interne URL eines Services kannst du über die Schaltfläche Copy auf der rechten Seite kopieren.

So gibst du einen neuen Port frei:

  1. Klicke rechts auf + Add New Port
  2. Gib die Port-Nummer ein, auf der deine Anwendung lauscht
  3. Optional kannst du über das Aktionsmenü (Drei-Punkte-Symbol) in der Port-Zeile eine Public Port URL freigeben. Dies gibt direkt eine öffentliche URL für den Port frei, die über das Kontextmenü kopiert werden kann. Dies ist weniger sicher als Path-Routing und wird in der Regel nur bei älteren Legacy-Frameworks benötigt.

Workspace Router

Routen ordnen eingehende HTTP-Anfragen deinen Services anhand von URL-Pfadpräfixen zu. Der Router unterstützt außerdem eine Strip Path-Option, mit der das übereinstimmende Präfix entfernt wird, bevor die Anfrage an deinen Service weitergeleitet wird.

So fügst du eine Route hinzu:

  1. Klicke auf + Add New Route
  2. Gib das Path-Präfix ein (z. B. /, /api, /admin)
  3. Wähle den Port aus, an den der Traffic geleitet werden soll
  4. Aktiviere optional Strip Path, um das Präfix vor der Weiterleitung zu entfernen

Der Abschnitt Routing for Other Services unten zeigt die von anderen Services in derselben Landscape definierten Routen, was hilfreich ist, um Konflikte zu erkennen oder einen Überblick über die gesamte Routing-Tabelle zu erhalten.

Umgebungsvariablen

Bereich „Environment Variables“ im Landscape Config Editor mit Schlüssel-Wert-Einträgen und auswählbaren Quellen wie Secrets, Workspace-Werten und Team-Kennungen.

Umgebungsvariablen ermöglichen es, Konfigurationswerte an deine Services zu übergeben, ohne sie fest im Code zu verankern. Sie werden zur Laufzeit injiziert.

So fügst du Umgebungsvariablen hinzu:

  1. Öffne den Abschnitt Environment Variables in der Service-Konfiguration
  2. Klicke auf + Add New Variable
  3. Gib den Key (Variablennamen) ein
  4. Gib den Value ein, entweder als reinen Text oder durch Auswahl aus den Dropdown-Kategorien: User Inputs, Global Values, Secrets, Global Constants, Team ID oder Workspace ID

Weitere Details findest du unter Umgebungsvariablen.

Managed Containers

Managed Containers basieren im Kern auf Reactives, erlauben dir aber, ein eigenes Docker-Image mitzubringen, statt das von Codesphere gepflegte Base-Image zu verwenden. Das bedeutet, du erhältst dieselbe Plattform-Orchestrierung, Netzwerkfunktionalität und Überwachung, während ein individueller Container ausgeführt wird. Für einen detaillierten Überblick siehe Runtimes.

Um einen Managed Container hinzuzufügen, wähle Managed Container aus der Service-Typ-Auswahl aus.

Ansicht der Runtime-Konfiguration eines Managed Containers mit Image-Referenz, Startup-Argumenten, Mounting-Pfaden sowie Run-As-User- und Run-As-Group-Einstellungen.

Entsprechende barrierefreie Textbeschreibung

Base-Image-Konfiguration:

  • Gib die vollständige Image-Referenz ein (z. B. nginx:1.25-alpine, node:20-slim)
  • Bei privaten Registries stelle sicher, dass die entsprechenden Zugangsdaten konfiguriert sind
  • Setze Startup Args, um den Standardbefehl des Containers bei Bedarf zu überschreiben. Der Entrypoint bleibt der Standard des Images. Wenn du den Entrypoint überschreiben möchtest, müsstest du stattdessen Codesphere Reactives verwenden und dein Image als Custom Base Image einsetzen.
  • Setze Mounting Paths (volumeMounts), um zu steuern, welche Verzeichnisse oder Dateien aus dem Workspace in den Container gemountet werden und an welche Stelle.

Run As User/Group:

  • Setze User ID (runAsUser), um festzulegen, unter welchem Benutzerkonto der Service innerhalb des Containers ausgeführt wird.
  • Setze Group ID (runAsGroup), um festzulegen, zu welcher Benutzergruppe der Service innerhalb des Containers gehört.
  • Diese Einstellungen steuern den Dateizugriff und Berechtigungen auf Prozessebene und sollten den Eigentumserwartungen deiner Anwendung und der gemounteten Dateien entsprechen.

Der Zugriffslevel auf das Workspace-Dateisystem hängt davon ab, welche User ID oder Group ID hier eingestellt ist:

  • Bei Verwendung der User ID 1501 erhält der Container-Prozess denselben Lese-/Schreibzugriff auf die Workspace-Dateien.
  • Bei einer anderen User ID erhält der Container-Prozess Lesezugriff auf alle Dateien und Schreibzugriff auf das Root-Verzeichnis des gemounteten Volumes, jedoch nicht auf Unterverzeichnisse.
  • Unabhängig von der konfigurierten Group ID fügt Codesphere direkt die GID 1010 für das Workspace-FS hinzu. Die definierte GID wirkt sich auf die Besitzergruppe der von deinen Services erstellten Dateien aus.
  • Du kannst Schreibzugriff auf ein bestimmtes Unterverzeichnis für die Group ID einrichten, indem du im Prepare-Stage den Befehl chmod g+w some-dir ausführst.

Startup-Performance

Managed Containers haben Startzeiten im Sekundenbereich (im Vergleich zu Millisekunden bei Reactives), aufgrund des Image-Pulls und der Initialisierung. Die tatsächliche Geschwindigkeit hängt von der Image-Größe und der Netzwerkperformance zur Registry ab.

Alle anderen Konfigurationsoptionen (Resources, Ports, Routes, Environment Variables) funktionieren genauso wie bei Codesphere Reactives — siehe die obigen Abschnitte.

Cloud Native Deployments

Cloud Native Deployments stellen einen virtuellen Managed Kubernetes Cluster mit vollem kubectl-Zugriff bereit und sind für fortgeschrittene Orchestrierungsszenarien konzipiert. Für einen detaillierten Überblick siehe Virtual Clusters.

Expert Runtime

Diese Runtime richtet sich an Nutzer mit Vorerfahrung in Kubernetes. Wenn du neu im Bereich Container-Orchestrierung bist, empfiehlt sich der Einstieg über Codesphere Reactives oder Managed Containers.

Ein Cloud Native Deployment einrichten

  1. Cluster bereitstellen: Füge im Bereich Managed Services der UI oder API einen virtuellen Kubernetes Cluster hinzu. Beachte, dass jedes Team gleichzeitig nur einen virtuellen Cluster haben kann.
  2. Auf den Cluster zugreifen: Sobald der Cluster bereitgestellt ist, rufe die kubeconfig über die API ab, um dich mit kubectl zu verbinden.
  3. Workloads deployen: Verwende kubectl-Befehle in den Prepare- oder Run-Steps oder interagiere direkt über das Terminal.

Plattform-Integration

Die tiefgreifende Lifecycle-Integration in die Codesphere ci.yml befindet sich derzeit in Entwicklung. Verfügbare Funktionen:

FunktionStatus
Bereitstellung virtueller Cluster✅ Verfügbar
kubectl-Zugriff✅ Verfügbar
Helm-Deployments✅ Verfügbar
Monitoring-IntegrationManuelle Konfiguration erforderlich
Netzwerk-IntegrationManuelle Konfiguration erforderlich

Für vollständige Plattformfunktionen (automatisches Monitoring, integriertes Networking, Off-when-unused) verwende Reactives oder Managed Containers.

Managed Services in Landscapes

Zwar kannst du eigenständige Managed Services erstellen, die dauerhaft bestehen bleiben, aber für viele Anwendungsfälle ist es Best Practice, Managed Services als Teil deiner Landscape-Konfiguration zu definieren. Dadurch wird sichergestellt, dass deine Anwendungsumgebungen in sich geschlossen und reproduzierbar sind.

Wenn du beispielsweise eine Development- oder Staging-Landscape hochfährst, kann Codesphere automatisch eine dedizierte PostgreSQL-Datenbank für diese spezifische Umgebung bereitstellen und diese wieder abbauen, wenn die Landscape nicht mehr benötigt wird.

Einen Managed Service zu einer Landscape hinzufügen

Du kannst Managed Services in deiner ci.yml (oder einem spezifischen CI Profile wie ci.dev.yml) definieren, entweder über den Landscape Config Editor oder durch direktes Bearbeiten der YAML-Datei.

Ansicht des Landscape-Editors zur Konfiguration eines Managed-Service-Eintrags im ci.yml-Formular.

  1. Typ auswählen: Wähle Databases & More aus dem Dropdown/Modal aus.
  2. Provider auswählen: Wähle den gewünschten Service aus (z. B. PostgreSQL, Redis, S3).
  3. Konfigurieren: Lege Version, Plan und Konfigurationsparameter fest.
    • Name: Vergib einen Namen (z. B. primary-db). Dieser Name wird verwendet, um den Service innerhalb deiner Landscape zu referenzieren.
  4. Secrets: Definiere die vom Service benötigten Secrets (z. B. Passwörter). Du kannst auf projektweite Secrets verweisen oder neue erzeugen.
  5. Speichern: Der Service ist nun deinem Landscape-Profil hinzugefügt. Er wird beim nächsten Deployment dieser Landscape bereitgestellt.

Verbindung mit dem Service herstellen

Sobald ein Managed Service bereitgestellt ist, kann sich deine Anwendung mit ihm verbinden. Detaillierte Verbindungsmethoden findest du unter Connecting to Services.

Service Discovery & Umgebungsvariablen

Codesphere ermöglicht es dir, Verbindungsdetails über Umgebungsvariablen in deine Anwendung zu injizieren.

  1. Secrets: Du kannst die im Managed Service definierten Secrets direkt an die Umgebungsvariablen deiner Anwendung übergeben.

  2. Hostnamen: Der Hostname deines Managed Service ist deterministisch und folgt dieser Struktur:

    ms-{providerName}-{providerVersion}-{teamId}-landscape-{workspaceId}-{serviceName}.ms-postgres

    Der Hostname wird in Kleinbuchstaben umgewandelt und alle ungültigen Zeichen (alles außer Buchstaben, Zahlen oder Bindestrichen) werden durch Bindestriche ersetzt.

    Beispiele:

    ProviderVersionTeam-IDWorkspace-IDService-NameHostname
    postgresv142100primary-dbms-postgres-v1-42-landscape-100-primary-db.ms-postgres
    redisv2108200cache_layerms-redis-v2-108-landscape-200-cache-layer.ms-postgres
    s3v115300My Uploadsms-s3-v1-15-landscape-300-my-uploads.ms-postgres

Lifecycle-Management

  • Erstellung: Der Managed Service wird erstellt, wenn das spezifische Landscape Profile (z. B. dev) deployt wird.
  • Updates: Änderungen an der ci.yml-Konfiguration (z. B. Änderung des Plans oder der Konfiguration) aktualisieren den Service beim nächsten Deployment.
  • Pause: Wenn die Landscape „Off when unused“ unterstützt, können auch die Managed Services pausiert werden, um Kosten zu sparen (abhängig von den Fähigkeiten des jeweiligen Services).
  • Löschung: Wenn die Landscape gelöscht wird, werden die zugehörigen Managed Services automatisch zerstört, um verwaiste Ressourcen und zusätzliche Kosten zu vermeiden.

Service-Umbenennung

Das Umbenennen eines Managed Service in der ci.yml-Datei erfordert, dass das System ihn neu erstellt, was zu Datenverlust führen kann.

Unterschiede zu eigenständigen Services

MerkmalLandscape Managed ServiceEigenständiger Managed Service
DefinitionIn ci.yml definiertManuell über UI / API erstellt
LifecycleAn die Landscape gebunden (wird mit ihr erstellt/gelöscht)Unabhängig (bleibt bis zur manuellen Löschung bestehen)
AnwendungsfallDev-, Test-, Review-UmgebungenProduktion, langlebige gemeinsam genutzte Datenbanken
KonfigurationInfrastructure as Code (Git-verfolgt)Manuelle Konfiguration