Подключитесь и приступайте к сборке

От заказа до первой
xcodebuild

Это руководство по работе с вашим облачным Mac. За первые десять минут вы получите данные для подключения, войдёте по SSH и проверите среду. Сколько займут загрузка зависимостей и полная сборка, зависит от проекта.

Получите данные о своей машине

После активации проверьте эти четыре пункта

Войдите в панель управления и откройте страницу нужного экземпляра. Используйте адрес, имя пользователя и порт подключения, указанные для этого экземпляра. Не используйте номер заказа вместо имени пользователя.

Пример данных рабочей станции · не реальные учётные данные

Desk M4

Mac mini M4 · 16 ГБ памяти · SSD 256 ГБ

Публичный IP-адрес
Посмотрите и скопируйте на странице экземпляра
Имя пользователя
Используйте имя, назначенное в панели управления
Начальный пароль
Просматривайте только в безопасном месте, не добавляйте в журналы
Открытый ключ SSH
Загрузите ключ в соответствующем разделе панели управления

В вашем распоряжении отдельный физический компьютер

Desk M4 — облачный Mac без виртуализации. Вы можете пользоваться графическим интерфейсом macOS и командной строкой. Сначала проверьте, какой узел указан в заказе, а затем — данные для подключения. Так вы не добавите в скрипт адрес другой рабочей станции.

Для начала рекомендуем подключиться по SSH. Так можно быстро проверить адрес, порт и аутентификацию. Графический интерфейс понадобится для настроек системы и Xcode, требующих ручных действий, но для постоянной сборки он не нужен.

  • Закрытый ключ храните на своём компьютере. Загружать нужно открытый ключ, начинающийся с ssh-ed25519 или другого обозначения типа ключа.
  • Не передавайте начальные пароли, закрытые ключи и пароли сертификатов для подписи через обычные журналы.
  • Если экземпляр ещё не предоставил данные для подключения, проверьте статус заказа в панели управления. Не пытайтесь угадать адрес или имя пользователя.
Первое подключение

Войдите по SSH и запустите сборку

Замените пример IP-адреса и имя пользователя на значения из панели управления.203.0.113.24 Это адрес из документации, он не подходит для подключения к вашей рабочей станции.

  1. 01

    Создайте ключ

    Создайте отдельный ключ для рабочей станции и задайте парольную фразу. Если у вас уже есть подходящий ключ, загрузите соответствующий открытый ключ. Не перезаписывайте существующие файлы.

    ssh-keygen -t ed25519 -f ~/.ssh/minivps_workstation
    cat ~/.ssh/minivps_workstation.pub
  2. 02

    Проверьте отпечаток

    При первом подключении отобразится отпечаток ключа хоста. Сверьте его с отпечатком из надёжного источника. Если панель управления его не предоставляет, запросите подтверждение через заявку в поддержку. Не принимайте ключ автоматически только потому, что появилось предупреждение.

    ssh -i ~/.ssh/minivps_workstation dev@203.0.113.24
  3. 03

    Проверьте среду

    Выполните на удалённой машине команды ниже, чтобы проверить архитектуру, путь к инструментам разработчика и их версии. Если проект требует другую версию Xcode, сначала приведите версии в соответствие, а затем устанавливайте зависимости.

    uname -m
    xcode-select -p
    xcodebuild -version
    sw_vers

Как читать полный сеанс

Ниже приведён фрагмент для примера, а не результат выполнения в реальном времени. Отпечаток ключа, время выполнения и журнал сборки зависят от экземпляра и проекта. Для успешной загрузки также нужны ваши материалы для подписи и действительные учётные данные публикации.

dev@desk-m4-tokyo
$ ssh -i ~/.ssh/minivps_workstation dev@203.0.113.24
The authenticity of host '203.0.113.24' can't be established.
ED25519 key fingerprint is SHA256:…
Are you sure you want to continue connecting (yes/no/[fingerprint])?
yes
Warning: Permanently added '203.0.113.24' to the list of known hosts.

$ cd ~/work/App
$ xcodebuild -scheme App -destination 'generic/platform=iOS' archive
…
** ARCHIVE SUCCEEDED **

$ bundle exec fastlane beta
…
Successfully uploaded the new binary to App Store Connect
Successfully finished processing the build

Вводите yesтолько после проверки отпечатка. Если система сообщает, что ключ хоста изменился, сначала выясните, переустанавливали ли систему или меняли ли экземпляр. Не удаляйте все записи known_hosts в обход проверки.

Сначала определите этап сбоя, затем меняйте настройки
СообщениеЧто проверитьСледующий шаг
Connection timed outIP-адрес, порт SSH, локальную сеть и брандмауэрПроверьте подключение через другую локальную сеть. Если проблема не устранена, отправьте заявку в поддержку, указав время подключения и узел.
Permission deniedИмя пользователя, загружен ли открытый ключ и выбран ли правильный закрытый ключВыполните ssh -v чтобы посмотреть процесс аутентификации. Перед отправкой журнала удалите конфиденциальные данные.
Scheme not foundТекущую папку проекта, workspace и общую схему SchemeСначала выполните xcodebuild -list. Для проектов с CocoaPods обычно нужно указать workspace.
Signing failedСертификат и его закрытый ключ, профиль подготовки и права доступа к связке ключейСначала проверьте подпись в интерактивном сеансе, а затем переносите процесс в CI без участия пользователя.
Когда нужен графический интерфейс

Подключите удалённый рабочий стол через SSH-туннель

SSH подходит для команд и автоматизации, VNC — для настроек и работы с графическим интерфейсом. Сначала настройте SSH, затем перенаправьте порт общего доступа к экрану. Не выставляйте VNC напрямую в интернет.

Проверьте настройки общего доступа на удалённой машине

В настройках системы проверьте, включён ли общий доступ к экрану и каким пользователям разрешено подключение. Предоставьте доступ только тем, кому он действительно нужен. Расположение настройки зависит от версии macOS.

Если служба не включена или учётной записи не предоставлен доступ, успешное создание туннеля не откроет рабочий стол.

Настройте перенаправление порта

Не завершайте сеанс SSH, пока используете подключение. В примере локальный порт 15900 перенаправляется на удалённый порт 5900, а прослушивание ограничено локальным адресом обратной связи.

Если экземпляр использует другой порт SSH, добавьте в команду параметр -p и укажите порт из панели управления.

Подключитесь через локальный адрес

На Mac используйте приложение «Общий экран», на других системах — совместимый VNC-клиент. В качестве адреса укажите локальный адрес и порт перенаправления, а не публичный IP удалённой машины.

Для аутентификации в клиенте также понадобится учётная запись, которой разрешён доступ к удалённой машине.

ssh -N -L 127.0.0.1:15900:127.0.0.1:5900 \
  -o ExitOnForwardFailure=yes \
  -i ~/.ssh/minivps_workstation dev@203.0.113.24

Адрес для подключения в клиенте:vnc://127.0.0.1:15900. После завершения сеанса SSH-туннель перестанет работать. Не используйте его как постоянно доступный сервис в интернете.

Сначала снизьте нагрузку на изображение, затем проверяйте сеть

Для начала выберите разрешение 1440 × 900 и один экран. Это рекомендация для настройки клиента, а не ограничение тарифного плана. Отключите динамические обои и ненужные предпросмотры, а файлы передавайте по SSH. Высокая пропускная способность не гарантирует низкую задержку ввода: важны также время отклика, потеря пакетов и качество локальной Wi-Fi-сети.

Если команды выполняются нормально, а изображение тормозит, сначала снизьте качество или разрешение в клиенте. Если одновременно отключаются SSH и экран, запишите время сбоя, тип локальной сети и сообщение клиента, затем отправьте заявку по проблеме с подключением.

Поручите рабочей станции повторяющиеся задачи

Сначала запустите одну задачу, затем добавьте её в основной конвейер

Зарегистрируйте рабочую станцию в собственном CI-проекте. Параметры регистрации для каждой платформы получайте в интерфейсе проекта или панели администратора. Не используйте чужие токены и не добавляйте токен регистрации в репозиторий.

GitHub Actions

В настройках Runner репозитория или организации выберите macOS и ARM64, затем скачайте и настройте self-hosted Runner с помощью актуальных команд установки на странице.

При настройке добавьте метку назначения desk-m4 . Сначала запустите диагностическую задачу в интерактивном режиме, затем зарегистрируйте Runner как фоновую службу текущего пользователя, следуя инструкциям установочного пакета.

Используйте метки self-hosted,macOS,ARM64 и собственную метку назначения, чтобы Runner можно было найти.

GitLab Runner

Установите Runner, затем создайте его в проекте или группе и получите токен аутентификации. При регистрации выберите подходящий для этой машины способ выполнения задач. Для нативной сборки macOS можно начать с shell executor.

Принимайте задания только из доверенных проектов и задайте метку macos-arm64 . Отдельно настройте, должен ли Runner принимать задания без меток.

Сначала выполните gitlab-runner verify для проверки регистрации, затем посмотрите журнал первой задачи.

Jenkins Agent

Создайте постоянный узел в своей панели управления Jenkins, задайте удалённую рабочую папку, число исполнителей и метки. Подключите узел по SSH или с помощью команды запуска Agent, указанной на его странице.

Убедитесь, что пользователь, версия Java и среда командной строки совпадают. Для первой задачи достаточно вывести версии инструментов — не используйте публикацию как проверку подключения.

Начните с одного исполнителя. Увеличивайте параллелизм, только проверив максимальную нагрузку на память и диск.

Метки должны описывать возможности, а не временное состояние

Рекомендуем добавить метку архитектуры macos-arm64и метку назначения ios-build, а desk-m4 использовать для обозначения таких рабочих станций. Добавляйте метки узла или версии только тогда, когда нужно направлять задачи в конкретную среду. Иначе список меток станет слишком подробным, и подходящих машин не останется.

name: workstation-check
on: workflow_dispatch
jobs:
  check:
    runs-on: [self-hosted, macOS, ARM64, desk-m4]
    steps:
      - name: Check toolchain
        run: |
          uname -m
          xcodebuild -version
          df -h

Self-hosted Runner выполняет код из репозитория. Не разрешайте недоверенным внешним изменениям запускать задачи на рабочей станции с материалами для подписи. Разделите права на сборку и публикацию, передавайте секреты через защищённые переменные CI и ограничьте доступ к веткам.

Перенесите привычную среду на новую машину

Переносите в три этапа: данные, инструменты и планировщик задач

Не копируйте целиком домашнюю папку пользователя. Сначала перенесите один проект и зафиксируйте воспроизводимые зависимости, затем переключите метки CI. Каждый этап можно проверить и при необходимости отменить отдельно.

01 · Данные

Сначала синхронизируйте проект, затем импортируйте материалы для подписи

Синхронизируйте рабочую папку с локального компьютера с помощью rsync, исключив артефакты сборки. Экспортируйте сертификат вместе с закрытым ключом в файл, защищённый паролем; профиль подготовки перенесите отдельно. После импорта и проверки удалите временную копию.

rsync -av \
  --exclude DerivedData \
  --exclude build \
  -e "ssh -i ~/.ssh/minivps_workstation" \
  ./App/ dev@203.0.113.24:~/work/App/

Проверка: все файлы проекта на месте, сертификат и закрытый ключ для подписи доступны в паре.

02 · Инструменты

Сверьте зависимости по списку

Экспортируйте Brewfile и проверьте его на удалённой машине перед установкой. Подготовьте версию Xcode, требуемую проектом, и выберите уже установленную версию с помощью xcodes. Затем проверьте Ruby, Bundler и lock-файл проекта.

brew bundle dump --file=Brewfile
brew bundle --file=Brewfile
xcodes installed
xcodes select
xcodebuild -version

Проверка: версии инструментов соответствуют требованиям проекта, установку зависимостей можно повторить.

03 · Подключение CI

В конце замените метки для распределения задач

Оставьте существующий конвейер без изменений и добавьте задачу, запускаемую вручную. Убедитесь, что она может получить доступ к проекту, подписать сборку и загрузить артефакт. Затем переключите runs-on или метку узла в основной задаче на новую рабочую станцию.

cd ~/work/App
bundle install
xcodebuild -list
bundle exec fastlane beta

Проверка: задача полностью завершилась успешно, артефакт можно скачать, а причину сбоя можно определить по журналу.

Это рекомендуемая последовательность переноса, а не обещание уложиться в определённый срок. Первая установка зависимостей, загрузка SDK и размер проекта обычно требуют больше времени, чем вход по SSH. Для начала проверьте сборку без публикации.

Эксперименты помимо сборки

Сначала изолируйте среду, затем загружайте веса модели

В Desk M4 доступно 16 ГБ унифицированной памяти, которую совместно используют система, графический интерфейс и модель. Возможность запуска зависит от квантования, длины контекста и числа параллельных запросов. Дополнительный SSD увеличит объём хранилища, но не объём памяти.

MLX: отдельная среда Python

Установите MLX и инструменты для инференса в виртуальную среду, чтобы не менять системный Python. Сначала проверьте, что модуль импортируется, затем выберите совместимую модель и вариант квантования.

python3 -m venv ~/venvs/mlx
source ~/venvs/mlx/bin/activate
python -m pip install -U pip
python -m pip install mlx mlx-lm
python -c "import mlx.core as mx; print(mx.default_device())"

Начните с небольшой модели, короткого контекста и одного запроса. Увеличивайте нагрузку, следя за использованием памяти.

llama.cpp: укажите путь к весам

Установите инструмент через Homebrew и запустите его с локальным файлом GGUF. Сначала создайте папку из примера и поместите в неё файл модели. Параметры сверяйте со справкой установленной версии.

brew install llama.cpp
llama-cli --help
llama-cli \
  -m /Volumes/WorkSSD/models/model.gguf \
  -p "Hello" -n 64

Файл GGUF должен соответствовать выбранной архитектуре модели и формату квантования.

Ollama: сначала ограничьте доступ локальной машиной

После установки привяжите службу к локальному адресу, затем скачайте веса согласно инструкциям источника модели. Для доступа с локального компьютера предпочтительно использовать перенаправление порта SSH, а не открывать интерфейс инференса напрямую.

brew install ollama
OLLAMA_HOST=127.0.0.1:11434 \
OLLAMA_MODELS=/Volumes/WorkSSD/models/ollama \
ollama serve

Загрузка и использование моделей должны соответствовать их лицензиям. Запуск службы не означает, что веса уже загружены.

Используйте одну папку для весов

В примерах далее путь /Volumes/WorkSSD обозначает правильно подключённый дополнительный SSD:models для хранения весов,cache для кэша, который можно создать заново. Это лишь пример пути — система не назначает такое имя автоматически. Сначала убедитесь, что диск подключён и папка доступна для записи, затем создайте каталоги. Иначе большие файлы могут случайно попасть на системный диск.

diskutil info /Volumes/WorkSSD
test -d /Volumes/WorkSSD && test -w /Volumes/WorkSSD
mkdir -p /Volumes/WorkSSD/models /Volumes/WorkSSD/cache
export HF_HOME=/Volumes/WorkSSD/cache/huggingface
Сначала проверьте диск, затем записывайте данные

Расширение увеличивает объём хранилища, а подключение нескольких машин не объединяет память

Доступны дополнительные варианты: SSD на +1 ТБ, SSD на +2 ТБ и подключение нескольких машин через Thunderbolt 5. Ориентируйтесь на название диска, номер устройства и данные о соединении, которые отображаются на вашем экземпляре. Не копируйте чужие номера дисков.

Найдите дополнительный SSD

Сначала просмотрите внешние физические диски, затем проверьте имя тома, ёмкость и свободное место. Команды ниже только считывают информацию и не форматируют диск.

diskutil list external physical
ls /Volumes
df -h
diskutil info /Volumes/WorkSSD

Убедившись, что диск подключён, переместите на него модели, кэш сборки или проект. Перед переносом остановите процессы сборки, работающие с нужными папками, и сохраните отдельную резервную копию.

Не запускайте вслепую eraseDisk и другие команды стирания диска. Если диск не отображается, отправьте заявку в поддержку с результатами проверки в режиме только для чтения.

Учитывайте ограничения подключения нескольких машин

Подключение через Thunderbolt 5 подходит для рабочих процессов с конкретными требованиями к обмену данными между несколькими машинами. Каждая машина остаётся отдельным хостом со своей системой, задачами и памятью.

system_profiler SPThunderboltDataType
networksetup -listallhardwareports
ifconfig

Распознавание интерфейса не означает, что приложение уже умеет распределять задачи. Вам потребуется настроить сеть, протокол передачи данных и распределение задач. Перед заказом уточните доступные способы и варианты подключения.

Подключение нескольких машин не объединяет их память в одну большую и не гарантирует ускорения сборки.

При переносе кэша отделяйте восстановимые данные от незаменимых

DerivedData и кэш загруженных зависимостей можно создать заново. Незакоммиченные изменения исходного кода, закрытые ключи для подписи и результаты экспериментов восстановить из кэша нельзя. Храните эти данные раздельно и сначала создайте резервную копию незаменимых материалов. Перед продлением аренды или окончанием срока действия самостоятельно экспортируйте нужные проекты, артефакты и настройки. Не используйте диск рабочей станции как единственное место для резервной копии.

Передайте нам информацию о проблеме

Если возникла проблема, приложите эти четыре вещи

По вопросам работы экземпляра сначала войдите в панель управления и отправьте заявку — так её будет проще связать с заказом. Если не удаётся войти, вы выбираете конфигурацию перед покупкой или хотите дополнить описание, напишите на адрес support@macminivps.com.

  • Номер заказа и узел: укажите, о какой рабочей станции идёт речь. Не отправляйте пароль или закрытый ключ.
  • Время и часовой пояс: укажите, когда проблема появилась впервые и удаётся ли её стабильно воспроизвести.
  • Фрагмент исходной ошибки: сохраните команду, код завершения и важные строки журнала. Удалите токены, содержимое сертификатов и персональные данные.
  • Что уже проверили: например, подключение через другую локальную сеть, порт SSH или отдельный запуск сборки.

Сроки ответа

Мы не указываем неподтверждённое среднее время ответа или фиксированные часы работы поддержки. Ориентируйтесь на актуальные сведения на странице контактов и в ответах на заявку. После отправки дополняйте существующую заявку — так проблему проще отслеживать, чем создавать несколько одинаковых.

Если проблема связана с подключением, уточните, одновременно ли перестали работать SSH и VNC. Если не удаётся собрать проект, сообщите, выполняется ли та же команда в интерактивном сеансе. Это поможет сначала определить, связана ли проблема с сетью, аутентификацией, средой или самим проектом.

Теперь, когда всё понятно,
выберите рабочую станцию для своего проекта

Desk M4 — отдельный физический Mac mini, а не виртуальная машина. Перед заказом определите требуемую версию Xcode, срок аренды и объём хранилища. Доступность проверяйте в панели управления в режиме реального времени.

Оплата доступна только в USDT-TRC20 или картами Visa / Mastercard / Amex через Stripe. Все цены указаны в долларах США; доступные способы оплаты зависят от ответа платёжного шлюза.