MAATRIX / Блог / Coder против SSH с вашим редактором: за что вы платите сложностью

Coder против SSH с вашим редактором: за что вы платите сложностью

MAATRIX

Разработчик открывает VS Code, жмёт Remote-SSH, вводит адрес сервера — и через пять секунд редактирует код прямо на VPS. Это работает, это бесплатно и почти не требует настройки. Тогда зачем вокруг того же самого выросла целая платформа вроде Coder — с базой данных, шаблонами инфраструктуры и отдельным сервером-контроллером? Ответ не в том, что SSH «устарел», а в том, что Coder решает задачи, которые у одного разработчика с одним сервером просто не возникают: десятки изолированных сред, самообслуживание для новых людей в команде и контроль над тем, кто и на чём работает. Разберём честно, где эта сложность окупается, а где вы просто усложните себе жизнь.

Coder — это не code-server и не просто веб-IDE

Первое, что нужно прояснить: Coder (проект coder.com, открытый код на GitHub) — это не альтернатива VS Code и не то же самое, что одиночный code-server в контейнере. Code-server — это один экземпляр VS Code, доступный через браузер: вы ставите его на сервер, открываете вкладку — и работаете. Никакой оркестрации, никакого понятия «пользователь» или «рабочая среда» — просто процесс, слушающий порт.

Coder — это платформа управления множеством таких сред для команды. У неё есть:

  • Control plane (coderd) — сервер, который хранит состояние, авторизует пользователей, раздаёт шаблоны и координирует сеть между вашим ноутбуком и рабочими средами.
  • Workspaces — изолированные рабочие среды (обычно Docker-контейнер или виртуальная машина), каждая привязана к конкретному пользователю и конкретному шаблону.
  • Templates — описания «из чего состоит рабочая среда» на Terraform: какой образ, сколько CPU/RAM, какие тома монтируются, какие переменные окружения прокидываются.
  • Provisioners — воркеры, которые по запросу разворачивают и уничтожают рабочие среды через выбранный backend (Docker, Kubernetes, облачный провайдер, обычные VM).
  • Agent внутри каждой workspace — устанавливает туннель обратно к coderd (на технологии, похожей на WireGuard/Tailscale) и даёт доступ по SSH, через браузерный терминал или встроенный code-server/JetBrains-бэкенд.

Ключевая идея: разработчик заходит в веб-интерфейс, нажимает «Create workspace», выбирает шаблон (например, «Node.js 20 + Postgres») — и через минуту-две у него личная изолированная среда, доступная и по SSH, и в браузере, и через coder config-ssh, который прописывает workspace прямо в ~/.ssh/config для локального VS Code Remote-SSH или JetBrains Gateway. То есть Coder не заставляет отказываться от привычного редактора — он добавляет слой самообслуживания и изоляции поверх того же SSH-подключения.

Что даёт голый SSH и локальный редактор без всей этой инфраструктуры

Прежде чем оценивать, за что вы платите сложностью Coder, стоит честно признать, сколько задач решает связка «VPS плюс SSH-ключ плюс VS Code Remote-SSH (или просто ssh и vim/tmux)» без единой дополнительной строчки инфраструктурного кода:

  • Разработчик редактирует код на удалённой машине так, будто она локальная — с автодополнением, отладчиком, расширениями.
  • Процессы переживают обрыв связи, если работать через tmux или screen.
  • Доступ разграничивается SSH-ключами вместо паролей — просто и проверенно десятилетиями.
  • Одна команда ssh user@host — и вы в системе. Никакого промежуточного сервера, который сам может упасть и заблокировать доступ ко всему остальному.

Для одного разработчика или небольшой команды из двух-трёх человек, у которых один общий сервер разработки (или у каждого свой), это абсолютно рабочая модель. Она требует минимум обслуживания: поднять VPS, настроить SSH-ключи, при желании — общий tmux-сеанс для парного программирования. Больше почти ничего.

Проблемы начинаются не из-за самого SSH, а из-за того, что растёт вокруг него, когда людей и проектов становится больше:

  • Новый разработчик просит доступ — кто-то вручную заводит пользователя, настраивает окружение, ставит нужные версии рантайма, объясняет, где что лежит.
  • Два человека одновременно работают на одном сервере — один случайно кладёт процесс другого, съедает всю память при сборке, конфликтует по портам.
  • Контрактору или стажёру на две недели нужен доступ — и его либо дают ко всему серверу целиком, либо тратят полдня на изоляцию через отдельные Linux-пользователи и chroot/cgroups вручную.
  • Через полгода никто не помнит, какие переменные окружения и версии зависимостей нужны для конкретного проекта — «работает у Пети» превращается в проблему онбординга.

SSH прекрасно решает задачу «дать одному человеку доступ к одной машине». Он не решает задачу «дать пятнадцати людям изолированные, воспроизводимые, самообслуживаемые рабочие среды под разные проекты» — и вот тут в игру входит Coder.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать VPS под Coder

За что вы реально платите сложностью Coder

Если отбросить маркетинг, добавленная сложность Coder покупает четыре конкретные вещи.

Изоляция без ручной работы. Каждая workspace — отдельный контейнер (или VM) с собственной файловой системой, процессами и ресурсными лимитами. Разработчик A не может случайно убить процесс разработчика B — они физически в разных контейнерах, даже если те крутятся на одном хосте.

Самообслуживание вместо тикетов. Новый человек получает ссылку на Coder, логинится через SSO, выбирает шаблон — и у него готовая среда с нужной версией языка и доступом к внутренним сервисам, без обращения к DevOps-инженеру. Для команды с онбордингом раз в квартал это не критично. Для агентства или аутсорс-студии, где люди приходят и уходят каждую неделю, это экономит реальные часы.

Автоматическое выключение по неактивности. В шаблоне задаётся ttl и правила автостопа — workspace, к которой никто не подключался N часов, останавливается сама. Контрактор ушёл в отпуск — его среда не жжёт CPU и RAM впустую, а поднимется заново при следующем подключении.

Централизованный контроль доступа. Кто может создавать workspaces, к каким шаблонам, с каким лимитом ресурсов — всё управляется из одной точки, а не разбросано по authorized_keys на десятке серверов. При увольнении сотрудника достаточно отозвать один доступ, а не вспоминать, на каких серверах у него был SSH-ключ.

Ни одна из этих четырёх вещей не бесплатна с точки зрения инфраструктуры — и вот тут начинается настоящая цена.

Инфраструктура, которую придётся поднять и содержать

Coder — это не один бинарник, который вы запускаете и забываете. Минимальный рабочий self-hosted стек выглядит так:

# docker-compose.yml — минимальный каркас для теста
services:
  coderd:
    image: ghcr.io/coder/coder:latest
    environment:
      CODER_PG_CONNECTION_URL: "postgresql://coder:coder@database/coder?sslmode=disable"
      CODER_HTTP_ADDRESS: "0.0.0.0:7080"
      CODER_ACCESS_URL: "https://coder.example.com"
    ports:
      - "7080:7080"
    depends_on:
      - database

  database:
    image: postgres:16
    environment:
      POSTGRES_USER: coder
      POSTGRES_PASSWORD: coder
      POSTGRES_DB: coder
    volumes:
      - coder_pgdata:/var/lib/postgresql/data

volumes:
  coder_pgdata:

Это только точка входа. Дальше по списку — то, что придётся администрировать постоянно:

  • PostgreSQL — обязательная зависимость, а не опция. В ней хранится состояние всех workspaces, шаблонов и прав доступа, так что база требует своего бэкапа: потеряли её без копии — потеряли историю всех рабочих сред.
  • TLS и CODER_ACCESS_URL — Coder рассчитан на работу по HTTPS с реальным доменом, иначе часть функций (в первую очередь браузерный доступ к workspace apps) работает нестабильно.
  • Wildcard-поддомен — чтобы открывать веб-приложения из workspace (например, dev-сервер на порту 3000) прямо в браузере, нужен wildcard DNS вида *.coder.example.com и сертификат под него. Без него остаются только терминал и coder port-forward.
  • Provisioners — развёртывание workspace — это выполнение Terraform-плана. На небольшом инстансе провижнер встроен в coderd, при росте нагрузки его выносят в отдельные процессы, которые тоже нужно мониторить.
  • Backend для workspaces — сам Coder ничего не запускает «из воздуха»: контейнеры или VM создаются через Docker/Kubernetes/облачного провайдера, который вы разворачиваете и содержите отдельно от control plane.
  • Обновления — апгрейд control plane требует прогона миграций базы и проверки совместимости шаблонов, бездумный docker compose pull && up на проде — плохая идея, нужен регламент с окном на откат.
  • High availability — в бесплатной (community) версии control plane работает как один узел. Упал он — новые workspaces не создаются и веб-доступ недоступен, хотя уже запущенные контейнеры продолжают работать. Отказоустойчивость нескольких узлов coderd и часть корпоративных функций (SSO из нескольких провайдеров, детальный аудит, квоты по организациям) — это уже платная лицензия.

Иными словами, вы меняете одну точку отказа (единственный SSH-сервер разработки) на другую (control plane Coder плюс его база), но взамен получаете управление десятками изолированных сред вместо одной общей машины.

Terraform-шаблоны: во что превращается описание рабочей среды

Отдельная статья расходов — не деньги, а компетенция. Шаблоны Coder пишутся на Terraform: это HCL-код, который описывает провайдера (Docker, Kubernetes, AWS и так далее), ресурсы workspace и жизненный цикл агента внутри неё. Сокращённый пример шаблона под Docker:

resource "docker_container" "workspace" {
  count   = data.coder_workspace.me.start_count
  image   = "codercom/enterprise-node:ubuntu"
  name    = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}"
  command = ["sh", "-c", coder_agent.main.init_script]
  env     = ["CODER_AGENT_TOKEN=${coder_agent.main.token}"]
}

resource "coder_agent" "main" {
  os   = "linux"
  arch = "amd64"
}

Человек, который поддерживает такие шаблоны, должен знать Terraform — не глубоко, но достаточно, чтобы добавить том, переменную окружения или новый образ, не сломав существующие workspaces. Для команды, где уже есть DevOps-инженер, это почти бесплатное расширение навыка. Для команды, где никто не трогал .tf-файлы, это отдельная кривая обучения поверх изучения самого Coder — и именно её чаще всего недооценивают на старте.

Для команды какого размера это оправдано

Прямого порога вроде «до 10 человек не берите, после 10 — берите» не существует, но есть закономерность, которая проявляется на практике.

SSH и локальный редактор достаточны, если:

  • Команда до 5-7 разработчиков с примерно одинаковым стеком проектов.
  • Онбординг новых людей происходит редко (раз в несколько месяцев), и час на ручную настройку окружения — не проблема.
  • Не нужно предъявлять изоляцию и аудит доступа внешнему клиенту или для комплаенса.
  • Никто не просит «дай мне временную одноразовую среду на два дня и потом снеси».

Coder начинает окупать сложность, если:

  • В команде от 10-15 разработчиков и больше, особенно при разном стеке (Node, Python с GPU, Go).
  • Онбординг происходит часто: агентство, аутсорс-студия, активный найм или ротация контракторов.
  • Нужны эфемерные среды под конкретные задачи — например, отдельная workspace на каждый pull request или нового стажёра, которая сама исчезает через неделю простоя.
  • Есть человек или платформенная команда, готовая взять на себя роль владельца этой инфраструктуры постоянно — «поставили и забыли» с Coder не работает.
  • Важен аудит: кто, когда и к какой среде получал доступ.

Есть и промежуточный вариант, который часто упускают: если единственная реальная боль — это «хочу открывать редактор в браузере, не таская за собой ноутбук с установленным VS Code», а многопользовательская изоляция не нужна, честнее и дешевле по сложности взять один code-server на VPS для себя или каждого разработчика — без control plane, без Postgres, без Terraform. Coder решает задачу управления множеством сред для команды, а не задачу «редактор в браузере» саму по себе — если вам нужно только второе, вся инфраструктура control plane будет чистым оверхедом.

Сравнение в цифрах — не абсолютная истина (зависит от вашей нагрузки и того, сколько workspaces реально активны одновременно), но задаёт порядок:

ПараметрSSH + локальный редакторОдиночный code-serverSelf-hosted Coder
Что нужно поднятьОдин VPS с sshdVPS + один процесс code-servercoderd + Postgres + backend для workspaces
Кто администрируетНикто отдельноВладелец сервераОтдельный ответственный (DevOps/платформа)
Изоляция между людьмиНет (общая ОС) или отдельные VPSНет, если инстанс общийДа, каждая workspace отдельно
Порог входа для новых разработчиковРучная настройкаРучная настройкаСамообслуживание через шаблон
Нужен TerraformНетНетДа, для шаблонов
Автовыключение простаивающих средВручнуюВручнуюВстроено (ttl, autostop)
Подходит для команды1-7 человек1 разработчик на инстансОт ~10-15 человек или частого онбординга

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать VPS под Coder

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Можно ли использовать Coder вместе с VS Code Remote-SSH, а не только через браузер?

Да. Команда coder config-ssh прописывает все workspaces прямо в локальный ~/.ssh/config, и дальше вы подключаетесь Remote-SSH или обычным ssh точно так же, как к любому другому серверу. Браузерный доступ — лишь один из вариантов, а не единственный.

Нужен ли Kubernetes для запуска Coder?

Нет, самый простой backend для workspaces — обычный Docker на одном VPS, как в примере выше. Kubernetes или облачный провайдер имеет смысл подключать, когда одной машины перестаёт хватать по ресурсам.

Чем Coder принципиально отличается от Kasm Workspaces?

Kasm стримит целые графические рабочие столы и приложения через VNC-протокол в браузер — это про изолированные сессии для работы с приложениями. Coder — платформа именно под разработку: workspaces заточены под код, SSH-доступ, IDE-интеграции и Terraform-шаблоны, а не под видео рабочего стола.

Что произойдёт с запущенными workspaces, если упадёт сервер с coderd?

Уже созданные контейнеры или VM продолжат работать на своём backend, но управлять ими через Coder — создавать новые, останавливать, подключаться через веб-терминал — будет нельзя, пока control plane не поднимется обратно. Прямой SSH-доступ в обход coderd, как правило, тоже нарушается, потому что туннель агента завязан на control plane.

Стоит ли ставить Coder для команды из трёх человек «на вырост»?

Обычно нет — это лишняя работа сейчас ради гипотетического роста. Разумнее поставить простой SSH-сервер разработки сегодня, а миграцию на Coder держать в голове как понятный следующий шаг, когда реально появится боль от ручного онбординга или конфликтов на одной машине.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →