Verbinden, entwickeln und verwalten

Nach der Bereitstellung

Rufen Sie zuerst die Verbindungsdaten in der Konsole ab und testen Sie SSH oder Bildschirmfreigabe. Dieser Leitfaden folgt dem praktischen Ablauf: Dateien übertragen, Builds ausführen und Daten vor Ablauf sichern.

Sie haben bereits gemietet? Hostname, Port, Benutzername und Ablaufdatum Ihrer Instanz finden Sie in der angemeldeten Konsole. Die Beispieldaten in diesem Artikel sind keine echten Zugangsdaten.

Verbindungsdaten prüfen

Drei Zugangswege – wählen Sie den passenden

Für Aufgaben in der Kommandozeile verwenden Sie SSH. Für die macOS-Oberfläche eignet sich die Bildschirmfreigabe; Projekte und Build-Artefakte übertragen Sie über SSH. Probieren Sie Ports nicht auf Verdacht aus.

Per SSH anmelden

Öffnen Sie die passende Instanz in der Konsole und prüfen Sie Hostname, SSH-Port und Benutzernamen. Führen Sie den folgenden Befehl in einem lokalen Terminal aus und ersetzen Sie die großgeschriebenen Platzhalter durch die tatsächlichen Instanzdaten.

ssh -p SSH_PORT USER@HOST

Der Standardport für SSH ist 22. Die Instanz kann jedoch einen anderen externen Port verwenden. Prüfen Sie vor der ersten Verbindung den Host-Fingerabdruck. Ändert er sich, klären Sie zuerst die Ursache, statt die Warnung zu ignorieren.

Prüfen Sie bei einer Zeitüberschreitung zuerst Hostname, Netzwerk und Port. Bei verweigerter Anmeldung kontrollieren Sie Benutzername und Authentifizierungsmethode. Veröffentlichen Sie weder Passwörter noch private Schlüssel in Logs.

Ideal für Builds, Skripte und die Log-Analyse

macOS-Bildschirmfreigabe (VNC)

Rufen Sie Adresse, Port und Zugangsdaten für die Bildschirmfreigabe in der Konsole ab. Geben Sie sie in die lokale Bildschirmfreigabe-App oder einen kompatiblen VNC-Client ein. Verwenden Sie nicht den SSH-Port.

Der Standardport für VNC ist 5900. Maßgeblich ist aber weiterhin der in der Instanz angegebene externe Port. Bildschirmfreigabe-Zugangsdaten gehören weder in Screenshots noch in öffentlich zugängliche Teamdokumente.

Verwenden Sie nach Möglichkeit eine geschützte Verbindung. Für einen SSH-Tunnel leiten Sie den lokalen Port 5901 an den VNC-Dienst der Instanz weiter und verbinden sich anschließend mit der lokalen Adresse.

ssh -N -L 5901:127.0.0.1:VNC_PORT -p SSH_PORT USER@HOST

Die Weiterleitung funktioniert nur, wenn der VNC-Dienst auf dieser Instanz lauscht und SSH-Portweiterleitung erlaubt ist. Ein schwarzer Bildschirm und ein Authentifizierungsfehler sind unterschiedliche Probleme – nennen Sie beim Support beide getrennt.

Ideal für die grafische Oberfläche und Umgebungsprüfungen

Dateien übertragen (scp / rsync)

Testen Sie zuerst, ob die SSH-Anmeldung funktioniert. Auch die Dateiübertragung nutzt den SSH-Port; ein zusätzlicher Dateiübertragungsdienst ist nicht erforderlich. Für einzelne Dateien eignet sich scp, für wiederholte Synchronisierungen eines Projektordners rsync.

scp -P SSH_PORT ./build.zip USER@HOST:~/
rsync -av -e "ssh -p SSH_PORT" ./project/ USER@HOST:~/project/

Beachten Sie: Bei scp wird der Port mit einem großen -Pangegeben, bei SSH dagegen mit einem kleinen -p. Der abschließende Schrägstrich im rsync-Quellpfad bedeutet, dass der Inhalt des Verzeichnisses synchronisiert wird.

Verwenden Sie bei der ersten Synchronisierung keine Option zum automatischen Löschen. Prüfen Sie zuerst Zielpfad und Dateianzahl, bevor Sie große Mengen an Dateien übertragen. Kontrollieren Sie nach dem Download die Integrität des Archivs – der Fortschrittsbalken allein reicht nicht.

Ideal für Code, Assets und Build-Artefakte
Ausgaben richtig einordnen

Verbindung, Build und Upload getrennt prüfen

Dieses Protokoll dient als Beispiel, um drei verschiedene Schritte zu erkennen. Der Beispielhostname ist kein erreichbarer Dienst, und die Ausgabe zeigt keinen Live-Status.

Knoten Japan (Tokio) · Beispiel
$ ssh admin@jp-0417.node.vpskeep.com
Welcome to your dedicated Mac mini.

$ xcodebuild -scheme App archive
** ARCHIVE SUCCEEDED **

$ fastlane beta
Successfully uploaded package to App Store Connect.
  1. 01

    SSH-Begrüßung

    Sie zeigt, dass die Verbindung zur entfernten Sitzung steht – nicht, dass die Projektumgebung bereits eingerichtet ist. Führen Sie anschließend sw_vers und xcodebuild -versionaus und notieren Sie die System- und Toolversionen.

  2. 02

    Archivierung abgeschlossen

    ARCHIVE SUCCEEDED bedeutet, dass die Archivierung erfolgreich war. „App“ ist im Beispiel der Name des Schemas. Im tatsächlichen Projekt müssen Sie außerdem Workspace oder Projekt, Zielplattform und Ausgabepfad angeben. Ein erfolgreiches Archiv bedeutet nicht, dass Export oder Verteilung bereits abgeschlossen sind.

  3. 03

    Fastlane-Upload abgeschlossen

    beta ist eine projektspezifische Lane. Signierung und Verteilungszugriff müssen vorher eingerichtet sein. Prüfen Sie nach dem Upload auch das Verarbeitungsergebnis auf der Plattform. Ein erfolgreicher lokaler Befehl bedeutet nicht automatisch, dass der Build bereits getestet werden kann.

Halten Sie bei der Fehlersuche den fehlgeschlagenen Befehl, den Exit-Code und die Logs vor und nach dem Fehler fest. Nur die letzte Zeile mit „Fehler“ reicht meist nicht aus, um Probleme mit Umgebung, Signierung oder Netzwerk zu finden.

Umgebung festlegen

Zuerst Xcode auswählen, dann Simulatoren und Signierung einrichten

Unterschiedliche Versionen auf dem lokalen Rechner und der Instanz können zu abweichender Abhängigkeitsauflösung oder Build-Ergebnissen führen. Notieren Sie zuerst die Versionen und ändern Sie die Einstellungen dann einzeln. Aktualisieren Sie nicht gleichzeitig Toolchain und Projektabhängigkeiten.

  1. 01

    Version prüfen und wechseln

    Führen Sie die beiden folgenden Prüfungen aus. Sind mehrere Xcode-Versionen installiert, können Sie das systemweite Standardverzeichnis wechseln. Soll die Änderung nur für den aktuellen Task gelten, setzen Sie DEVELOPER_DIRvorzugsweise in der Prozessumgebung.

    xcode-select -p
    xcodebuild -version
    sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
    DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer xcodebuild -version

    Der Pfad muss zur tatsächlich installierten App passen. Ob die gewünschte Version bereits installiert ist, hängt von der Instanzumgebung ab. Wenn Sie eine weitere Version benötigen, verwenden Sie ein ordnungsgemäß lizenziertes Installationspaket und prüfen Sie vorher den verfügbaren Speicherplatz.

  2. 02

    Simulator-Runtime installieren

    Installieren Sie über die Plattform- oder Komponentenverwaltung in den Xcode-Einstellungen eine zum Projekt passende Runtime. Die Bezeichnung des Menüpunkts variiert je nach Version. Listen Sie anschließend die verfügbaren Geräte auf und wählen Sie ein Testziel aus.

    xcrun simctl list runtimes
    xcrun simctl list devices available
    df -h

    Simulatoren, DerivedData und Archive belegen Speicherplatz. Testen Sie vor umfangreichen Testläufen zunächst ein einzelnes Gerät und erhöhen Sie erst danach die Parallelität. Tests im Simulator ersetzen keine Tests auf einem echten iOS-Gerät.

  3. 03

    Signierungsmaterial importieren

    Übertragen Sie autorisierte Signaturzertifikate, die zugehörigen privaten Schlüssel und Bereitstellungsprofile über einen geschützten Kanal auf die Instanz. Importieren Sie das Zertifikat in den für den Task verwendeten Schlüsselbund und installieren Sie das Profil entsprechend den Vorgaben der eingesetzten Xcode-Version. Prüfen Sie anschließend Team, Bundle ID, Gültigkeitsdauer des Zertifikats und Verteilungstyp.

    security find-identity -v -p codesigning

    Verwenden Sie für CI einen separaten Build-Schlüsselbund und speichern Sie dessen Passwort in einer geschützten Secret-Variable. Bei nicht interaktiven Tasks müssen Sie außerdem prüfen, ob der Schlüsselbund entsperrt ist und das Signierungstool darauf zugreifen kann. Dass das Zertifikat in der grafischen Oberfläche sichtbar ist, beweist nicht, dass alles korrekt eingerichtet wurde.

    Entfernen Sie nicht mehr benötigte private Signaturschlüssel, Tokens und Bereitstellungsprofile, bevor Sie die Instanz verlassen. Geben Sie in Support-Tickets nur den Zertifikatsnamen und den Fehlertext an – niemals private Schlüssel, Passwörter oder vollständige Zugangsdaten.

Tasks zuverlässig wiederholen

Erst eine Pipeline erfolgreich ausführen, dann den Runner dauerhaft starten

Die Konfiguration Keep M4 L mit M4 / 24GB / 512GB eignet sich als Ausgangspunkt für Builds mehrerer Branches. Die Zahl paralleler Tasks richtet sich nach den Ergebnissen eigener Tests. Aus der Anzahl der CPU-Kerne lässt sich nicht direkt ableiten, wie viele UI-Tests gleichzeitig laufen können.

Selbst gehosteter GitHub-Actions-Runner

Starten Sie den Registrierungsablauf auf der Actions-Runner-Seite in den Repository- oder Organisationseinstellungen. Wählen Sie macOS und die passende Architektur und laden Sie den Runner mit den dort angegebenen Befehlen herunter und registrieren Sie ihn. Verwenden Sie das Registrierungstoken nur so lange wie nötig und speichern Sie es nicht im Repository.

Geben Sie der Instanz eindeutige Labels, zum Beispiel macos,arm64 und ein Label für den Teamzweck. Wählen Sie die Maschine im Workflow anhand der Labels aus, damit Signierungs-Tasks nicht auf einer Umgebung ohne Zertifikat landen.

runs-on: [self-hosted, macOS, ARM64]

Starten Sie den Runner zunächst manuell und testen Sie einen Task. Installieren Sie den dauerhaften Dienst anschließend mit dem mitgelieferten Dienstskript. Das ausführende Konto muss auf das Projektverzeichnis, Xcode und den Build-Schlüsselbund zugreifen können.

Task-Logs + Runner-Diagnoselogs

GitLab Runner und Shell Executor

Installieren Sie einen GitLab Runner, der zur Architektur der Instanz passt. Rufen Sie die Registrierungsdaten in der Projekt- oder Teamverwaltung ab und führen Sie anschließend gitlab-runner registeraus. Wenn Sie die native Xcode-Toolchain benötigen, können Sie gemäß den Sicherheitsvorgaben Ihres Teams den Shell Executor wählen.

Der Shell Executor führt Tasks direkt auf der Maschine aus. Verwenden Sie ihn nur für vertrauenswürdige Projekte und beschränken Sie, welche Branches und Tasks auf Signierungsschlüssel zugreifen dürfen. Leiten Sie keinen Code aus nicht vertrauenswürdigen Beiträgen an eine Instanz mit Produktionszugangsdaten weiter.

gitlab-runner --version
gitlab-runner verify

Prüfen Sie zuerst, ob Registrierung und Task-Zuweisung funktionieren, und richten Sie dann den Dienst entsprechend der Installationsmethode ein. Halten Sie Build- und Cache-Verzeichnisse sowie den Speicherort der Logs in der Teamdokumentation fest.

Erst die Registrierung, dann die Tasks prüfen

Autostart und Logs bei der Übergabe dokumentieren

Dauerhaft laufende Prozesse werden unter macOS meist von launchd verwaltet. Ein benutzerbezogener LaunchAgent startet unter anderen Bedingungen als ein systemweiter LaunchDaemon. Wenn ein Dienst eine grafische Sitzung oder den Schlüsselbund eines Benutzers benötigt, lässt sich eine systemweite Konfiguration nicht einfach übernehmen.

Die Diagnosedateien des GitHub-Actions-Runners liegen üblicherweise im Installationsverzeichnis unter _diag . Die Logs der einzelnen Workflow-Schritte finden Sie auf der Pipeline-Seite. Die Dienst-Ausgaben von GitLab Runner hängen davon ab, wie der Runner installiert und gestartet wurde. Legen Sie bei einer eigenen launchd-Konfiguration ausdrücklich StandardOutPath und StandardErrorPathfest, statt von einer einheitlichen System-Logdatei auszugehen.

Dokumentieren Sie Runner-Name, Ausführungskonto, Xcode-Version, Arbeitsverzeichnis und Logpfad. Verwenden Sie für parallele Tasks getrennte DerivedData- und Artefaktverzeichnisse. Werden gleichnamige Ausgaben überschrieben, kann ein sporadischer Fehler fälschlich wie ein Maschinenproblem wirken.

Zuerst den Speicherbedarf einschätzen

Bei Keep M4 Pro mit 64 GB bleibt Platz für mehr als nur Modellgewichte

Keep M4 Pro ist mit M4 Pro / 64GB / 2TB konfiguriert. Der gemeinsame Arbeitsspeicher wird vom System, dem Modell und anderen Prozessen genutzt. Die gesamte Kapazität steht daher nicht für Modellgewichte zur Verfügung. Die folgende Schätzung betrifft nur die Gewichte und ist weder ein Geschwindigkeitstest noch eine Laufzeitzusage.

Richtwerte für das Rohvolumen der Gewichte nach Parameterzahl und Bitbreite
ModellgrößeGewichtsschätzung bei 4 BitGewichtsschätzung bei 8 BitVor dem Laden prüfen
Ca. 7B ParameterCa. 3.3 GiBCa. 6.5 GiBGut geeignet, um Installation, Modellformat und Generierung mit kurzem Kontext zu testen.
Ca. 14B ParameterCa. 6.5 GiBCa. 13.0 GiBMessen Sie zuerst den Spitzenbedarf einer einzelnen Anfrage, bevor Sie Batch-Tasks einplanen.
Ca. 32B ParameterCa. 14.9 GiBCa. 29.8 GiBLange Kontexte und parallele Anfragen können den Speicherbedarf des KV-Caches deutlich erhöhen.

Berechnung: Parameterzahl × Bitbreite ÷ 8 ÷ 2³⁰; das Ergebnis wird in GiB auf eine Dezimalstelle gerundet. Quantisierungsgruppen, Skalierungsfaktoren, nicht quantisierte Layer, KV-Cache und Laufzeitpuffer erhöhen den tatsächlichen Bedarf. Auch die Dateigröße des Modells entspricht nicht dem Spitzenbedarf an Arbeitsspeicher.

Ersten Test in einer eigenen Python-Umgebung ausführen

Prüfen Sie zuerst, ob die Python-Version mit den verwendeten MLX-Paketen kompatibel ist, und erstellen Sie dann eine virtuelle Umgebung. Paketquellen und Modelldateien müssen erreichbar sein, und Sie benötigen die Nutzungsrechte für das Modell. Prüfen Sie vor dem Download den verfügbaren Speicherplatz.

python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install mlx mlx-lm
python -m mlx_lm.generate --model ./models/model --prompt "Explain unified memory." --max-tokens 128

./models/model verweist auf ein vorbereitetes, kompatibles Modellverzeichnis. Prüfen Sie den Ablauf zunächst mit kurzer Eingabe und wenigen Ausgabetokens und erhöhen Sie anschließend schrittweise die Kontextlänge. Notieren Sie Modellversion, Quantisierung, Eingabelänge und Spitzenbedarf an Arbeitsspeicher, damit sich das Ergebnis reproduzieren lässt.

Steigt der Speicherbedarf dauerhaft oder wächst der Swap schnell an, reduzieren Sie zuerst Kontextlänge, Batchgröße und parallele Anfragen. Eine zusätzliche SSD erweitert den Speicherplatz, nicht den gemeinsamen Arbeitsspeicher, und ersetzt keine sorgfältige Planung des Modellbedarfs.

Auch die Laufzeit im Blick behalten

Vor der Verlängerung Preise prüfen, vor dem Auslaufen Backups testen

Sie können zwischen Tages-, Wochen-, Monats- und Quartalsabrechnung wählen. Das Ablaufdatum setzt den Zeitrahmen für Ihre Tasks – warten Sie mit der Datenmigration nicht bis zum letzten Build. Die Knoten sind 365 Tage im Jahr in Betrieb. Maßgeblich für Mietdauer und Bereitstellungsstatus sind jedoch die Angaben in Ihrer Bestellung.

  1. 01

    Verlängerung und Abrechnungszeitraum ändern

    Melden Sie sich in der Konsole an und prüfen Sie das Ablaufdatum der betreffenden Instanz oder des Abonnements. Starten Sie anschließend die Verlängerung. Kontrollieren Sie vor der Zahlung Modell, Knoten, Abrechnungszeitraum, Zusatzoptionen und Gesamtbetrag. Wann ein geänderter Abrechnungszeitraum wirksam wird und ob eine Nachzahlung anfällt, richtet sich nach den Angaben und Preisen der jeweiligen Bestellung. Prüfen Sie nach der Zahlung, ob das neue Ablaufdatum aktualisiert wurde.

  2. 02

    Speicher hinzufügen oder Geräte verbinden

    Wenn Sie zusätzlichen Platz für Assets benötigen, prüfen Sie die Optionen +1TB SSD oder +2TB SSD. Möchten Sie Thunderbolt 5 zum Verbinden von Geräten nutzen, klären Sie zuerst, ob Ihr Workflow und Ihre Geräte dies unterstützen. Zusatzoptionen erweitern nicht den gemeinsamen Arbeitsspeicher des ursprünglichen Modells. Prüfen Sie verfügbare Optionen, Laufzeit und Bereitstellungsbedingungen in der Konsole, bevor Sie eine Konfigurationsänderung einreichen. Sichern Sie Ihre Daten und stoppen Sie betroffene Schreibvorgänge, bevor Sie Festplatten oder Tasks anpassen.

  3. 03

    Daten vor Ablauf migrieren

    Exportieren Sie Code, Assets, Build-Artefakte und wichtige Konfigurationen, laden Sie sie auf einen von Ihnen verwalteten Speicher herunter und testen Sie die Wiederherstellung. Stoppen Sie Runner und automatisierte Tasks, widerrufen Sie zeitlich begrenzte Zugriffstokens und entfernen Sie private Signierungsschlüssel sowie nicht mehr benötigte Zugangsdaten. Ein gepacktes Verzeichnis auf dem entfernten System allein ist noch kein geprüftes Backup.

  4. 04

    Verarbeitung nach Ablauf

    Gehen Sie nicht davon aus, dass die Speicherung nach Ablauf als Backup dient. Angaben zur Aufbewahrungsdauer, zum Löschstatus und zur Wiederherstellbarkeit finden Sie in den Datenverarbeitungshinweisen Ihrer Bestellung. Sind die Angaben unklar, fragen Sie rechtzeitig über ein Support-Ticket nach. Bereits gelöschte Daten sind möglicherweise nicht wiederherstellbar – sichern Sie wichtige Inhalte vor Ablauf.

Damit der Support das Problem nachvollziehen kann

Diese vier Angaben gehören in dasselbe Ticket

Erstellen Sie ein Support-Ticket in der Konsole, damit die Anfrage Ihrer Bestellung zugeordnet ist. Verwenden Sie für jedes Problem ein eigenes Ticket und ergänzen Sie spätere Testergebnisse dort, damit der Zusammenhang erhalten bleibt.

  1. 01

    Instanz und Knoten

    Geben Sie die Referenz- oder Bestellnummer, das Modell und den tatsächlich verwendeten Knoten an: Singapur, Japan (Tokio), Südkorea (Seoul) oder Hongkong. Fügen Sie keine Passwörter oder privaten Schlüssel bei.

  2. 02

    Zeitpunkt des Problems

    Nennen Sie Beginn und Zeitzone, ob das Problem weiterhin auftritt und wann die Instanz zuletzt normal funktionierte. Beschreiben Sie, ob SSH eine Zeitüberschreitung meldet, die Authentifizierung fehlschlägt, der VNC-Bildschirm schwarz bleibt oder ein Build-Befehl einen Fehler ausgibt.

  3. 03

    Schritte zur Reproduktion und Logs

    Beschreiben Sie die kürzesten Schritte zur Reproduktion, System- und Toolversionen, den vollständigen Fehlertext und bereits durchgeführte Prüfungen. Schwärzen Sie Zugangsdaten in Screenshots und entfernen Sie Tokens, Zertifikatspasswörter sowie andere vertrauliche Angaben aus Logs.

  4. 04

    Bei Zahlungsfragen

    Nennen Sie Bestellnummer, Betrag und Zahlungsmethode. Akzeptiert werden ausschließlich USDT-TRC20 sowie Visa / Mastercard / Amex (über Stripe); abgerechnet wird in US-Dollar. Welche Zahlungswege tatsächlich verfügbar sind, zeigt das Ergebnis des Zahlungs-Gateways. Bei USDT benötigen wir den Transaktions-Hash, bei Kartenzahlung die Belegnummer. Senden Sie niemals die vollständige Kartennummer.

Wenn Sie sich vorübergehend nicht in der Konsole anmelden können, senden Sie eine E-Mail an support@vpskeep.comund nennen Sie im Nachrichtentext Ihre Konto-E-Mail-Adresse und Bestellnummer. Zugangsdaten müssen Sie nicht per E-Mail senden.

Umgebung vorbereiten und Tasks zuverlässig ausführen

Testen Sie zuerst Verbindung, einen einzelnen Build und den Download der Artefakte, bevor Sie die Automatisierung aktivieren. Wenn Sie noch keine Maschine ausgewählt haben, starten Sie mit den drei Konfigurationen und vier Abrechnungszeiträumen.