Команда инженеров · свой ЦОД в РФ · своё железо · своя панель · CloudStack + Linstor · MCP · база знаний по self-hosted
Проверено
16 июля 2026 г.
Запуск
docker compose (сборка из исходников) через ./install.sh
Сложность
Средний
Ключевой замер
RAM idle ~41 MiB
Версия
2.4.5
Репозиторий
GitHub →
Управление устройствами

RoutineOps

Своя система управления парком устройств (MDM/RMM) на одном сервере: агенты для Windows, macOS и Linux, инвентаризация, удаленный запуск скриптов и политики - без облачной панели вендора. Развернули на Fatmetal Cloud Server, завели сам сервер как управляемое устройство и удаленно выполнили на нем скрипт.

Июль 2026 ~9 минут Fatmetal Team
MDM / RMM Лицензия: Apache-2.0 Статус: запущен у нас, v2.4.5

Вердикт

Подходит
  • небольшой парк рабочих станций и серверов (Windows/macOS/Linux) под одной панелью без облака
  • нужны инвентарь, удаленный запуск скриптов и политики по расписанию/событию
  • ценят легкость: весь стек в простое держится в пределах ~41 MiB RAM
Не подходит
  • нужен зрелый проверенный вендор с поддержкой: проект молодой, соло-автор, 7 звезд на GitHub
  • нужен полноценный Apple MDM (DEP/ABM, конфиг-профили) или патч-менеджмент из коробки
  • нужна валидная публичная TLS на веб-консоли без ручной возни
Мин. тариф: CPU2-RAM4-DISK50 Рекомендуем: CPU2-RAM4-DISK50 Сложность: medium Время запуска: ~несколько минут (сборка из исходников) Главный риск: незрелость проекта Прод-готовность: с оговорками
Что это

Что это и какую задачу решает

RoutineOps - self-hosted платформа класса MDM/RMM: одна панель, из которой видно весь парк устройств и можно им управлять. На каждое устройство ставится агент (Windows - MSI, macOS - pkg, Linux - systemd-служба), он держит постоянный канал с сервером по gRPC поверх mTLS и без VPN. Через панель собирается инвентарь, гоняются скрипты, применяются политики и правила комплаенса.

Проще говоря, это замена облачным Intune, VMware Workspace ONE и SaaS-RMM вроде Tactical RMM - но сервер и все данные о машинах остаются у вас. Из коробки: инвентаризация (ОС, CPU/RAM/диск, IP, серийник, список установленного ПО, события процессов), библиотека скриптов с разовым запуском и политиками по расписанию, группы устройств, софт-политики allowed/forbidden, блокировка устройства (работает офлайн), RBAC (роли it_admin/viewer), аудит с настраиваемым retention, алерты в Telegram и самообновление агентов с проверкой подписи ed25519.

GoPostgreSQL 16Redis 7gRPCmTLSDocker
Сравнение

Чем отличается от платных аналогов

Сравнение с облачными MDM/RMM по тому, что влияет на выбор.

ПараметрRoutineOpsОблачный MDM/RMM (Intune, Workspace ONE, SaaS-RMM)
Модель ценыбесплатно, open-sourceподписка за устройство/пользователя в месяц
Где данные о машинахна вашем серверев облаке вендора
Кросс-ОСWindows / macOS / Linuxобычно Windows/Apple, Linux частично
Канал агентаgRPC/mTLS напрямую, без VPNчерез облако вендора
Зрелостьмолодой проект (7 звезд, соло-автор)зрелые продукты с поддержкой
Патч-менеджмент, Apple DEP/ABMнет из коробкиесть
Под капотом

Тех-стек и архитектура

Сервер и веб-консоль написаны на Go, веб отдается через nginx. Состояние - в PostgreSQL 16, очереди и эфемерные данные - в Redis 7. Весь стек - четыре контейнера, поднимается одним docker compose.

Связь агента с сервером - строго mTLS на порту :50051 (gRPC). Канал энроллмента отдельный: server-auth TLS через nginx на :443 плюс одноразовый токен - на момент энроллмента mTLS-идентичности у устройства еще нет, ее агент и получает. Публичный ключ для проверки подписи обновлений агент тоже получает при энроллменте по доверенному каналу с пином CA, а не вшивается в сборку. Агенты собираются под три платформы: Windows (MSI), macOS (pkg), Linux (systemd-служба под root).

Конфигурация

Минимальная конфигурация

Реальные требования против официального минимума.

Официальный минимум (до 50 устройств)1 vCPU / 2 GB / 20 GB
RAM всего стека в простое~41 MiB (4 контейнера)
Образы на диске~620 MB суммарно
Рекомендуем тарифCPU2-RAM4-DISK50
i

Важно: сам рантайм ест копейки, но install.sh собирает сервер и веб из исходников и компилирует агенты сразу под три ОС. На эту сборку нужен запас CPU и диска, поэтому берем младший тариф за 500 руб/мес, а не самый минимальный - иначе первая сборка растянется.

Развертывание

Развертывание на Fatmetal

Базовый путь - Cloud Server + Ubuntu 24.04 + Docker из маркетплейса.

  1. Создать VM

    Fatmetal Cloud Server, Ubuntu 24.04, приложение Docker из маркетплейса. Docker доустанавливается облачным cloud-init еще пару минут после старта.

  2. Забрать репозиторий и запустить установщик

    git clone https://github.com/Floodww/RoutineOps.git
    cd RoutineOps
    ./install.sh

    Установщик генерит свой Root CA и серверный сертификат, кладет .env.prod, создает ключ подписи релизов ed25519, поднимает docker compose, прогоняет миграции и собирает агенты под Windows/Linux/macOS.

  3. Открыть консоль

    Веб-консоль поднимается на https://<IP-или-домен>. Логин администратора установщик печатает в конце (email + пароль). Проверка живости: curl -k https://localhost/api/v1/auth/login.

  4. Завести устройство

    В разделе Устройства - Добавить устройство: панель выдает одноразовый enrollment-токен. На машине запускаете агента командой agent enroll с этим токеном - он получает mTLS-сертификат и регистрируется как служба.

https://mdm.ваш-домен/dashboard
Дашборд RoutineOps: устройства, скрипты, политики, лента активности
Обзорная панель нашего экземпляра v2.4.5 на тарифе CPU2-RAM4-DISK50: одно устройство онлайн, лента активности.
Замеры

Что измерили после запуска

Цифры со свежей установки на живом стенде, без нагрузки.

RAM всего стека в простое~41 MiB
- сервер3.36 MiB
- веб4.25 MiB
- postgres30.1 MiB
- redis3.36 MiB
Образы: server / web47.9 MB / 93.9 MB
Образы: postgres / redis420 MB / 57.8 MB
Контейнеров4
Версия2.4.5

Мы не просто открыли пустую панель. Завели сам стенд как Linux-устройство (агент по mTLS) - он сразу отдал инвентарь: Ubuntu 24.04.4 LTS, CPU Intel Xeon Platinum 8270, RAM 3.8 ГБ, диск 47 ГБ, серийник, 755 установленных пакетов. Потом создали скрипт и удаленно запустили его на устройстве - вернулся реальный вывод (uptime и df -h), задача перешла в статус Выполнена.

https://mdm.ваш-домен/devices/…
Карточка устройства RoutineOps: диагностика, инвентарь, выполненная задача
Карточка живого устройства: ОС, железо, серийник, версия агента и задача со статусом Выполнена.
https://mdm.ваш-домен/scripts
Раздел Скрипты в RoutineOps
Библиотека скриптов: разовый запуск на устройстве или политика по расписанию/событию.

Проверено на версии 2.4.5, июль 2026. На новых версиях результаты могут отличаться.

Подводные камни

Где может сломаться

Реальные грабли, на которые наткнулись при запуске.

!

Self-signed на консоли. Установщик генерит свой Root CA и серверный сертификат - браузер на веб-консоль ругается, валидного публичного TLS по умолчанию нет. Для внутреннего MDM это штатно: свой PKI - основа mTLS-доверия агентов. Но не спешите бездумно фронтить консоль через Let's Encrypt: сломаете канал агентов, который завязан на этот же CA.

!

Служба стучится в localhost. Если энроллить агента прямо на сервере с -server localhost:50051, служба зашьет localhost. Для реального удаленного устройства передавайте настоящий адрес сервера - установщик про это предупреждает WARN-ом.

скачивание CA без пина (-ca-sha256) отклонено

Причина. При энроллменте с -ca-url агент требует пин -ca-sha256 - защита от MITM, чтобы CA-бандл не подменили по дороге.

Решение. Передайте хеш CA флагом -ca-sha256 <hex> либо разложите CA локальным файлом через -ca /path/ca.crt и уберите -ca-url.

Безопасность

Безопасность и обновления

Канал агент-сервер - mTLS, у каждого устройства свой клиентский сертификат. Доступ в панель - RBAC (роли it_admin/viewer), сессия в HttpOnly-cookie с JWT. Агенты самообновляются с проверкой подписи ed25519, ключ приходит при энроллменте по доверенному каналу. Аудит пишется с настраиваемым retention, алерты можно слать в Telegram.

Обновление - подтянуть свежий код и перезапустить установщик (он пересоберет образы и агенты):

git pull && ./install.sh

Бэкап состояния - дамп PostgreSQL:

docker exec routineops-postgres-1 pg_dump -U postgres routineops > backup.sql

Чек-лист перед продом: сменить дефолтный пароль администратора; сохранить .env.prod и материал CA в секрет-хранилище; настроить бэкап postgres по расписанию; ограничить доступ к порту :50051 сетью устройств; решить вопрос с публичным TLS консоли, не ломая CA агентов; учесть незрелость проекта в модели рисков.

Рядом

Связь с другими стеками

  • Обратный прокси - Caddy или Nginx Proxy Manager перед консолью, но аккуратно: канал агентов на :50051 оставляем на родном mTLS, прокси только на веб.
  • Бэкапы - pg_dump плюс выгрузка в S3-совместимое хранилище.
  • Мониторинг - Grafana и Prometheus поверх метрик хоста и контейнеров.
  • Алерты - Telegram-бот уже встроен, отдельный стек не нужен.
Ограничения

Когда это НЕ ваш выбор

Нужен зрелый вендор с поддержкой и SLA

Проект молодой: 7 звезд на GitHub, один автор, версия 2.4.5. Для парка, где цена простоя высокая, а безопасность критична, это осознанный риск - агент MDM работает на устройстве с правами root.

Нужен полноценный Apple MDM или патч-менеджмент

DEP/ABM, конфиг-профили Apple, автоматическая установка обновлений ОС из коробки - этого нет. RoutineOps закрывает инвентарь, скрипты и политики, а не весь спектр enterprise-MDM.

Парк - только мобильные Android

Для управления флотом Android-смартфонов есть профильные Android-MDM. RoutineOps ориентирован на рабочие станции и серверы Windows/macOS/Linux.

FAQ

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

Можно поставить без Docker?

Штатный путь - ./install.sh на docker compose. Отдельной инструкции без Docker нет.

Хватит ли 2 GB RAM?

Рантайм всего стека - около 41 MiB, так что для работы хватит с запасом. Но первая сборка из исходников и компиляция агентов под три ОС требуют ресурсов - берите младший тариф с 4 GB, чтобы сборка не растянулась.

Можно в продакшен?

С оговорками. Технически стек рабочий, мы завели устройство и выполнили на нем скрипт. Перед продом закройте чек-лист из раздела про безопасность и трезво оцените незрелость проекта.

Как обновлять?

git pull && ./install.sh - установщик пересоберет образы и агенты. Сами агенты умеют самообновляться с проверкой подписи.

Как делать бэкап?

Дамп PostgreSQL (pg_dump) плюс сохранить .env.prod и материал CA - без них не восстановить доверие агентов.

Нужна ли авторизация?

Да, вход в панель по email/паролю, роли it_admin и viewer (RBAC), сессия в защищенной cookie.

Какие ограничения лицензии?

Apache-2.0 - можно свободно использовать, в том числе коммерчески, с сохранением уведомлений о лицензии.

Итог

RoutineOps - легкий self-hosted MDM/RMM, который реально работает: весь стек держится в пределах ~41 MiB RAM на четырех контейнерах, агент по mTLS собирает инвентарь и выполняет удаленные скрипты, а данные о парке остаются на вашем сервере. Главная оговорка - незрелость: 7 звезд, соло-автор, версия 2.4.5. Хороший кандидат, чтобы поднять свой мини-RMM за вечер и попробовать на некритичном парке, но не замена зрелому вендору для ответственной инфраструктуры.

Этот стек у нас запущен на тарифе CPU2-RAM4-DISK50. Нашли баг в гайде - напишите, поправим в течение дня.