Termix бесплатный менеджер серверов. Обзор

Сегодня будем устанавливать в свой периметр крутую штуку. И называется она — Termix. Выбрал я её по причине — решил все 100500 серверов свести в одно место, возможно станет поудобнее. Да и поддержка VNC из коробки, а мне как раз надо кластер из mac mini m4 для ИИ админить. Ну и корпоративные винды всякие по RDP. В общем пока звучит очень вкусно.

 читать первым в телеграм    читать первым в макс

Termix — это платформа для управления серверами с открытым исходным кодом, полностью бесплатная. Она предоставляет единое кроссплатформенное решение для управления серверами и инфраструктурой через один удобный интерфейс. Termix является альтернативой Termius и доступен на всех популярных платформах.

Termix предлагает:

  • доступ к терминалу по SSH;
  • управление удалённым рабочим столом (RDP, VNC, Telnet);
  • создание SSH-туннелей;
  • удалённое управление файлами;
  • и множество других инструментов.

Короче эта штука позволяет подключаться по SSH и т.п. к серверам, прям из браузера. Довольно удобно собрать всё в кучу и забыть про ручную рутину. Хотя ручная рутина порой приятнее, чем все эти «новогодние ёлки» и клики мышкой.

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

Управление Docker контейнерами без Portainer и Dockge

У меня на малинке висит целый зоопарк Jellyfin, qBittorrent, Grafana, Prometheus, Uptime Kuma и куча другого. Portainer для таких целей избыточен как космический корабль для поездки в магазин. Да и интерфейс там сделан через жопу — хрен чё найдешь. Поэтому я переполз на Dockge, а теперь заценил DockHand. Если хочешь управлять Docker без боли, читай дальше.

Переходим в раздел Stacks и вставляем готовый композник, композник взят из официальной документации.

Исходник композника:

services:
  termix:
    image: ghcr.io/lukegus/termix:latest
    container_name: termix
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - termix-data:/app/data
    environment:
      PORT: "8080"
    depends_on:
      - guacd
    networks:
      - termix-net

  guacd:
    image: guacamole/guacd:1.6.0
    container_name: guacd
    restart: unless-stopped
    ports:
      - "4822:4822"
    networks:
      - termix-net

volumes:
  termix-data:
    driver: local

networks:
  termix-net:
    driver: bridge

Ну а дальше жму Create & Start. Смотрим что получилось. И получилась у нас тыква:

Изначально я подозревал, что порт 8080 у меня занят, но решил рискнуть. Не фартануло. Поэтому меняю порты 8088:8080 в компознике и перезапускаю:

Отлично, что-то запустилось:

Так, пойдем-ка на хост и посмотрим куда он сохранил стек, мне важно чтобы всё лежало в /opt/stacks:

Хуй там плавал. Давай выяснять. По умолчанию оно кинулось в:

/app/data/stacks/HOME/termix/compose.yaml

А сам dockhand запущен так:

services:
  dockhand:
    image: dockhand-dev
    container_name: dockhand
    restart: unless-stopped
    dns:
      - 1.1.1.1
      - 8.8.8.8
    ports:
      - 3002:3000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockhand_data:/app/data
      - /opt/stacks:/opt/stacks

volumes:
  dockhand_data:

То есть мой композник Termix улетел в volume dockhand_data. Изменяем локацию:

Жмем кнопку вверху справа и выбираем /opt/stacks

Да, это меня устраивает. Жмем и снова проверяем:

Супер. Теперь всё на своих местах. Это не критично, но гораздо проще хранить все композники в одном месте, а там и в git это можно всё легко перетащить.

Кстати сегодня мне приснился жуткий кошмар — mindnight commander ввёл ежемесячную подписку на использование.

Следующий вопрос. Нахуя второй контейнер image: guacamole/guacd:1.6.0 ??? На самом деле он нужен для поднятия Apache Guacamole, чтобы заработали протоколы RDP, VNC, Telnet и некоторые другие удалённые подключения.

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

Для прода в компознике я бы еще добавил:

security_opt:
  - no-new-privileges:true

Эта настройка запрещает процессам внутри контейнера получать дополнительные привилегии после запуска. Короче заглушка антихакер, очередная палочка в колесо для злоумышленников.

И закрепил бы конкретную версию Termix вместо latest, чтобы обновления не сломали неожиданно конфиг.

Ладно. Давай наконец посмотрим что у нас открывается на 8088 порту:

С дизайном прям хорошо, глаз радуется, шрифты подобраны с душой. Создаём новый аккаунт админа и проваливаемся в недры.

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

Готово!

Повторюсь. Дизайн — моё почтение! Выглядит дорого и богато, причем совершенно бесплатно. Ну а даже если было бы не бесплатно, такие штуки мы уже научились патчить.

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

Я буду использовать Русскую версию, потому что если есть возможность послать нахуй Загнивающий Запад — я это делаю при любой возможности. Ну ты и сам это знаешь.

Окей. Давай по быстренькому добавим ключик и попробуем подключиться по SSH к серверу.

Добавляем приватный ключ.

Пишем опциональное название ключа и переходим на вкладку Проверка подлинности

Я добавлю ключ через «Загрузить файл», но очевидно можно добавить ключ руками, либо сгенерировать новый прям из интерфейса Termix.

Хорошо, ключ добавили, добавляем хост:

Переходим на вкладку SSH и выбираем Credential:

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

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

Пропуем подключиться:

Стандартная заглушка на проверку и защиту от MITM, нажимаем Принять и продолжить.

И мы провалились внутрь сервера. Прекрасно. Теперь создаем нужные папки под проекты и заводим хосты.

Сверху имеем удобную и привычную панель с вкладками для переключения между сессиями:

Еще прикольная фича с разделением экрана как в tmux:

Я таким обычно не пользуюсь, фокус быстро теряется, предпочитаю обычно вкладки. Один сервер, одна вкладка. Так меньше глаза бегают по экрану и голова не отвлекается. Разделение удобно когда надо, что-то подебажить или помониторить. Например на одном хосте запускаешь прослушивание сокета, а на втором отправляешь данные. И сразу все перед глазами, данные ушли, данные пришли.

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

Давай теперь попробуем VNC и подключимся к кластеру на mac mini m4.

Аналогично заводим хост, но с сущностью VNC.

Хм, ебала жаба гадюку! Ну давай разбираться. Идем в настройки:

И видим, что контейнер с Guacamole подключается как localhost, а должен подключаться по имени контейнера.

Фиксим и смотрим логи контейнера guacd

В логах что-то есть, но морда мака не появляется, печально. Продолжаем дебаг.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Много всего было отсмотрено — НИХУЯ! Запрос до Guacamole доходит и теряется. Причем в Termix нет никаких настроек связанных с безопасностью. Видимо оно здесь и не нужно

Что я только не пробовал, отдельный инстанс с Guacamole нормально работает и подключается по VNC, а вот через прокладку нет.

Значит проблема в связке Termix + Guacamole. Это уже печальнее. Покопавшись прям глубоко, я снизил круг подозреваемых. И подозреваемый тут именно Termix.

Это значит что:

  • Termix неправильно передаёт параметры VNC в guacd
  • В текущей версии Termix есть баг VNC-подключения

Так же выяснилось что Termix не использует официальный сервер guacamole, а использует прослойку guacamole-lite.

Нашлось подозрительное:

"postinstall": "node scripts/patch-guacamole-lite.cjs"

То есть автор Termix патчит guacamole-lite вручную, если бы всё работало из коробки, такого скрипта не было бы.

Короче тут проблема проекта налицо. Ковырять дальше не буду, потому что всё сойдется в → найду проблему в коде Termix и пофишку её локально. То есть из коробки это не работает и ответственность несет уже автор проекта. Поэтому хуй нам в ухо а не VNC. Ну и чёрт с ним, все-равно я по нему подключаюсь раз в месяц.

Кстати пока тыкал, оно как-то само заработало, я даже поуправлял маком, вот уж не знаю что случилось. Короче какой-то плавающий баг. У тебя возможно с этим проблем не будет, потому что у меня тут много факторов, которые могут на это влиять.

Что не понравилось

  • Нерабочий VNC из коробки. Либо звезды так сошлись и релиз софтины под малинку отличается от релиза под полноценный x86. Всякие RDP и т.п. проверять не буду, потому что скорее всего там такая же залупа вылезет.

  • Всратая левая панелька, вечно сворачивается, у меня экран большой и я предпочитаю не наблюдать эти блевотные анимации сворачивания. Мне нужно чтобы элементы космического корабля всегда были под рукой. Но благо это предусмотрели и сделали тумблер Pin App Rail:

А вот тут пришлось переключиться на англоязычный интерфейс, потому что на Русском сходу найди эту настройку не получилось, но она там есть и называется — Панель приложений Pin

  • Если запускаешь без https то оно через мышку копировать и вставлять ничего не будет. Будут работать стандартные команды CTRL+SHIFT+C / CTRL+SHIFT+V. Это не страшно и возможно даже хорошо. В любом случае если даже заведешь это на самоподписанном сертификате, функционал разблокируется.

  • Еще есть несколько UI вопрос, но они тоже решаются через переключатели в настройках.

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

Да, еще есть полноценный десктопный клиент, который подключается к твоего развернутому серверу и можно ходить по сервер не через браузер. В этом случает «КОПИПАСТА» работает даже без https.

В общем потыкай, глядишь залетит.

Комментарии