Skip to main content

tuna-cli 0.39 — интерфейс в терминале у всех команд

· 8 min

В tuna-cli 0.36 у туннелей появился полноэкранный интерфейс в терминале. В 0.39 он есть почти у всех команд: у tuna start и tuna run — сводный экран всех туннелей, у tuna trigger — лента срабатываний, у tuna domain, tuna monitor и других команд управления — таблица, в которой можно создавать, смотреть и удалять ресурсы. Инспектор теперь включается и выключается клавишей, без перезапуска туннеля.

Общие правила​

  • Интерфейс включается сам, когда команда запущена в терминале. Без терминала, с --log=stdout, в CI и у ИИ-агентов вывод прежний, текстовый, поэтому скрипты не ломаются. Выключить интерфейс вручную — переменной TUNA_TUI=0.
  • Выход — только Ctrl+C. q и Esc возвращают назад из деталей и карточек.
  • Подсказки внизу экрана показывают только клавиши, которые работают на текущем экране и для текущей строки.
  • Команды управления — tuna domain, endpoint, tunnel, api-key, monitor и ssh-session — без подкоманды открывают таблицу в терминале, а без терминала печатают справку. Подкоманды вроде tuna domain list работают как раньше и теперь выводят в stdout таблицу, которую удобно передавать по пайпу.

Туннели​

HTTP: инспектор по клавише​

Лента запросов и метрики — rpm, p50 и p90, число ответов 4xx и 5xx — остались на месте. Enter открывает детали запроса, r повторяет его, / фильтрует ленту. Новое — клавиша I: она включает и выключает инспектор, как флаг --inspect, но без перезапуска туннеля. Когда инспектор выключен, веб-инспектор останавливается, история запросов очищается, а главным экраном становится лог.

TCP: соединения и трафик​

У tuna tcp инспектора нет, поэтому главный экран — лог туннеля. Над ним строка со счётчиками: активные и все соединения, входящий и исходящий трафик.

Postgres и Redis​

Слева сессии, справа — запросы и ответы выбранной сессии, включая ошибки. Tab переключает панели, Esc возвращает к списку сессий, y копирует запрос. l переключает между сессиями и логом. Инспектор у Postgres и Redis включён всегда: ради разбора запросов эти туннели и нужны, а без него есть tuna tcp. tuna redis устроен так же.

SSH: запись сессий по клавише​

tuna ssh показывает инструкцию для подключения и ленту сессий. Enter на активной сессии открывает её просмотр в реальном времени, Ctrl+C возвращает к ленте. R включает и выключает запись новых сессий, как флаг --record-session. k копирует строку для known_hosts, c — команду ssh.

Protected App​

tuna app подключает локальный сервис к защищённому приложению. На экране — аккаунт, адрес и сервис, куда идут запросы, ниже — лог. c копирует адрес, o открывает его в браузере, Q показывает QR-код.

Триггеры​

tuna trigger запускает команду на входящий вебхук или письмо. Теперь каждое срабатывание видно в ленте: время, источник, код выхода и длительность. Enter открывает детали со stdout и stderr команды — сразу видно, почему деплой упал.

У tuna trigger smtp источник в ленте — от кого → кому · тема письма.

Несколько туннелей: start и run​

tuna start​

tuna start запускает туннели из конфига и показывает их на сводном экране: тип, статус, адрес и инспектор. Внизу — лента запросов выбранного туннеля, у Postgres и Redis — его лог. I включает и выключает инспектор HTTP-туннеля прямо со сводного экрана. Enter открывает полноценный интерфейс туннеля со всеми его клавишами, Ctrl+C возвращает к списку. Если tuna есть что сказать, например при ошибке, L открывает его собственный лог. Упавший туннель перезапускается сам, как раньше.

tuna run​

tuna run запускает приложение и сам открывает туннель на каждый порт, который оно начинает слушать. Приложение — первая строка таблицы, ниже — его вывод. Enter открывает живой терминал приложения со вводом: горячие клавиши Vite и других dev-серверов работают. R перезапускает приложение, не трогая туннели. У туннеля внизу — его лента запросов. L показывает лог самого tuna: в нём видно, какие порты нашлись и какие туннели открылись.

Флаги --http и --tcp у tuna run удалены: тип туннеля определяется сам. Порт, который не отвечает по HTTP за 10 секунд, получает TCP-туннель.

Управление ресурсами​

Домены​

tuna domain открывает таблицу доменов. n резервирует поддомен или добавляет свой домен: для поддомена сразу подставлено случайное имя, после резерва открывается карточка с подсказкой, что делать дальше — DNS-запись для своего домена и команда туннеля. Enter открывает карточку домена со статусом и историей проверки, t запускает туннель на выбранном домене прямо из таблицы.

Для скриптов появились подкоманды tuna domain get, revalidate и redirect, а tuna domain reserve example.com добавляет свой домен.

TCP-порты​

tuna endpoint работает так же: n резервирует порт, карточка показывает команду туннеля, c копирует host:port, t запускает туннель на порту. Локальный порт в команде подставляется по имени порта: для postgres — 5432, для redis — 6379, для mysql — 3306.

Активные туннели​

tuna tunnel показывает все запущенные туннели команды, список обновляется раз в 5 секунд. Enter открывает карточку туннеля, d останавливает его.

API-ключи​

tuna api-key показывает ключи команды. e меняет описание ключа, d удаляет ключ. Если удаляется ключ, под которым работает сам CLI, клиент предупредит об этом. Новые ключи по-прежнему выпускаются в личном кабинете.

Мониторы​

tuna monitor показывает мониторы со статусами, они обновляются раз в 10 секунд. Enter открывает карточку с последними событиями, p ставит монитор на паузу и возобновляет его. Для скриптов появились подкоманды get, events, pause, resume и delete.

Записанные SSH-сессии​

tuna ssh-session показывает записанные сессии. Enter проигрывает запись, x экспортирует её в GIF.

Фоновые сервисы​

tuna service показывает туннели, установленные как фоновые сервисы. n создаёт сервис, e меняет его команду, s, x и R запускают, останавливают и перезапускают, d удаляет сервис и отзывает его ключ, Enter открывает логи.

Сам tuna service тоже переделан. На Linux без sudo он ставит пользовательский сервис systemd --user и включает linger, чтобы туннель пережил выход из SSH и перезагрузку. Кроме systemd, поддерживается OpenRC (Alpine, Gentoo). Для скриптов появились tuna service list, tuna service logs -f и tuna service edit: последняя меняет аргументы туннеля без переустановки. Каждый сервис получает свой ключ, привязанный к адресу туннеля, если адрес задан, а uninstall отзывает этот ключ.

Что проверить при обновлении​

  • Флаг --location устарел. Новые поддомены и порты живут в общей зоне, и сервер находит их без location. Если флаг задан, CLI предупредит. Для имён, зарезервированных в зонах ru и nl, флаг пока нужен.
  • Списки выводятся в stdout. tuna domain list, endpoint list, tunnel list, api-key list и monitor status печатают таблицу в stdout, а не строки лога в stderr. Если скрипт разбирал старый формат, переведите его на флаг --json: с ним list у domain, endpoint, tunnel, api-key, session, ssh-session и bastion ls печатают массив JSON, а пустой список — [].
  • tuna service install сразу запускает сервис и выключает инспектор. Отдельный tuna service start после установки не нужен. Инспектор в сервисе выключен (--inspect=false), если его не включили явно. tuna start сервисом не ставится — создайте по сервису на каждый туннель.
  • На Linux без sudo сервис ставится пользовательским. Раньше install требовал root и создавал системный юнит. Если нужен системный сервис, запускайте install через sudo.
  • Токен заменили сессия и API-ключи. tuna login теперь входит через браузер, а на серверах и в CI используется API-ключ: TUNA_API_KEY и --api-key вместо TUNA_TOKEN и --token. Старый токен пока работает, но CLI предупреждает о замене. Что поменялось и что сделать — в отдельном посте.
  • tuna run без --http и --tcp. Уберите эти флаги из скриптов.
  • У tuna postgres и tuna redis нет флага --inspect. Инспектор у них включён всегда, переменная TUNA_INSPECT на них не влияет. Если скрипт запускал их с --inspect=false, переведите его на tuna tcp.

Вместе с CLI вышел Tuna Desktop 0.3 с входом через сессию и полем «Домен» в форме туннеля, про него — отдельный пост.

Подробнее про клавиши каждого экрана — в разделе Интерфейс в терминале, полный список изменений — в журнале изменений.

Leave feedback​

If you enjoy using Tuna, or on the contrary you are not happy with something, please leave feedback.

News​

We announce new features and posts on our Telegram channel. Subscribe so you don't miss anything.

Help​

We value our users and carefully review every request. If you have any problems with tuna, please contact us in one of the following ways: