Перейти к содержимому

Удалённая разработка

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

Во всех этих случаях подход один: код и компилятор живут на удалённой машине, а редактор работает так, будто всё локально. Это тот же принцип, что и с WSL, только Linux не внутри вашего компьютера, а где-то ещё.

СитуацияРешение
Есть сервер или виртуальная машина с LinuxRemote - SSH
Хочется чистое воспроизводимое окружение, Docker уже стоитDev Containers
Ничего нет, попробовать хочется прямо сейчасGitHub Codespaces
Windows на своей машинеWSL — это тоже удалённая разработка, только локальная
  1. Поставьте расширение Remote - SSH (ms-vscode-remote.remote-ssh).

  2. Настройте подключение по ключу.

    Если ключа ещё нет, создайте его на своей машине:

    Окно терминала
    ssh-keygen -t ed25519 -C "you@example.com"

    И скопируйте публичную часть на сервер:

    Окно терминала
    ssh-copy-id вашеимя@адрес-сервера

    Проверьте, что вход работает без пароля:

    Окно терминала
    ssh вашеимя@адрес-сервера
  3. Опишите хост в конфиге SSH — так его не придётся набирать руками:

    ~/.ssh/config
    Host mojo-server
    HostName 203.0.113.10
    User вашеимя
    IdentityFile ~/.ssh/id_ed25519
    ForwardAgent yes

    Строка ForwardAgent yes пробрасывает на сервер ваш SSH-агент. Благодаря ей git push с сервера будет использовать ключ с вашего ноутбука, и отдельный ключ на сервере заводить не придётся.

  4. Подключитесь: Ctrl + Shift + PRemote-SSH: Connect to Hostmojo-server.

    VS Code доустановит на сервер свою серверную часть. В левом нижнем углу появится индикатор с именем хоста.

  5. Установите Mojo на сервере — так же, как на обычном Linux: через uv.

  6. Поставьте расширения в удалённую сессию.

    У кнопки установки будет написано Install in SSH: mojo-server. Нужны расширения Mojo и Python — как и в случае с WSL, они должны жить там же, где компилятор.

Контейнер описывает окружение файлом в репозитории — и у всех участников проекта оно получается одинаковым, вплоть до версии компилятора.

Нужны Docker и расширение Dev Containers (ms-vscode-remote.remote-containers).

Положите в проект такой файл:

.devcontainer/devcontainer.json
{
"name": "Mojo 1.0",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu-24.04",
"postCreateCommand": "curl -LsSf https://astral.sh/uv/install.sh | sh && ~/.local/bin/uv sync",
"customizations": {
"vscode": {
"extensions": ["modular-mojotools.vscode-mojo", "ms-python.python"]
}
}
}

Затем: Ctrl + Shift + PDev Containers: Reopen in Container.

Что здесь происходит: берётся чистая Ubuntu 24.04, в неё ставится uv, затем uv sync разворачивает окружение по вашему pyproject.toml и uv.lock — то есть ровно ту версию Mojo, которая зафиксирована в проекте. Расширения ставятся в контейнер автоматически.

Самый быстрый способ попробовать Mojo, если ставить локально нечего или некуда: Codespaces — это тот же dev container, только запущенный на серверах GitHub и открытый в браузере.

  1. Форкните репозиторий с devcontainer.json (подойдёт шаблон из курса).

  2. На странице репозитория: кнопка Code → вкладка CodespacesCreate codespace on main.

  3. Дождитесь сборки окружения — первый запуск занимает пару минут, дальше оно кэшируется.

  4. Откройте терминал и проверьте:

    Окно терминала
    uv run mojo --version

Работать можно прямо в браузере или подключиться к этому же codespace из десктопного VS Code — через расширение GitHub Codespaces.

Кода на сервере касается тот же принцип, что и в WSL: Git там свой, и настроить его нужно отдельно.

Окно терминала
git config --global user.name "Ваше Имя"
git config --global user.email "you@example.com"

Если вы включили ForwardAgent yes, отдельный ключ на сервере не нужен — git push будет использовать ключ с вашего ноутбука. Проверить:

Окно терминала
ssh -T git@github.com
Ожидаемый вывод
Hi username! You've successfully authenticated, but GitHub does not provide shell access.

Если проброс агента не используется, создайте ключ прямо на сервере и добавьте его в настройках GitHub — процедура описана в главе Установка на Windows через WSL, она одинаковая для любого Linux.

Пара вещей, которые стоит знать заранее, чтобы не удивляться:

  • Первое подключение к новому хосту всегда долгое: VS Code разворачивает на нём свою серверную часть.
  • Автодополнение отвечает через сеть. На канале с задержкой в 100 мс это ощущается, но терпимо; на мобильном интернете — раздражает.
  • Проброс портов VS Code делает сам, если программа слушает порт: ссылка появится во вкладке «Порты».
  • Файлы не синхронизируются автоматически. Всё, что вы редактируете, — это файлы на удалённой машине. Не забывайте про git push, иначе единственная копия работы останется на чужом сервере.

🎯 Проверь себя

Чем Remote-SSH принципиально отличается от редактирования файлов по SFTP?

При работе по SFTP редактор остаётся локальным и просто копирует файлы туда-сюда: языковой сервер, компилятор и терминал — ваши, локальные. Remote-SSH запускает серверную часть VS Code на удалённой машине, поэтому расширения, автодополнение, сборка и отладка выполняются там же, где живёт код и компилятор.

Зачем в devcontainer.json команда uv sync, а не uv add mojo?

uv sync разворачивает окружение по уже существующим pyproject.toml и uv.lock, то есть ставит зафиксированную версию Mojo. uv add добавил бы зависимость заново и мог подтянуть более свежую версию — воспроизводимость окружения на этом бы и закончилась.

У меня MacBook на Intel. Какой путь самый быстрый?

GitHub Codespaces: форкнуть репозиторий с devcontainer и нажать Create codespace — рабочее окружение с Mojo появится в браузере за пару минут. Для постоянной работы — арендовать недорогую виртуальную машину с Linux и подключаться к ней через Remote-SSH.

Если что-то не заводится — загляните в диагностику проблем. Если всё работает — пора к первой программе.

Примеры проверены на Mojo 1.0.0

Тексты курса — CC BY-NC-SA 4.0, код примеров — Apache 2.0