Sonar: управление сервисами и портами на локальном хосте
Sonar — это CLI инструмент для просмотра и управления сервисами, которые слушают порты на локальном хосте. Он упрощает разработку, позволяя организовать и контролировать все активные процессы и контейнеры, работающие на твоем компьютере.
Sonar группирует порты по проектам и именам сервисов, что упрощает взаимодействие с ними. Например, с помощью команды sonar start ты можешь запустить серверы разработки и наблюдать за их состоянием в виде дерева, а также выполнять команды для их ожидания, ведения логов и остановки одним нажатием. Это делает его полезным как для разработчиков, запускающих приложения и контейнеры, так и для тех, кто хочет получить упорядоченный обзор всех работающих сервисов.
Проект написан на Go и устанавливается через Homebrew или скрипт установки. Учти, что для использования Homebrew нужно доверять стороннему репозиторию. Ограничений вроде необходимости API-ключа или лицензионных ограничений у Sonar нет, однако он может быть менее полезен в сложных облачных окружениях, где службы могут быть распределены по разным хостам.
Sonar — это инструмент, который показывает все процессы, слушающие на localhost, и группирует их по репозиториям или сервисам. Он позволяет запускать, следить за логами и останавливать все твои серверы и контейнеры Docker с помощью одной команды. Кроме того, Sonar автоматически подбирает порты для запуска, так что ты можешь запускать несколько экземпляров одного и того же приложения без конфликтов портов.
Установка
Sonar можно установить несколькими способами:
- Homebrew (macOS / Linux):
Для использования стороннего репозитория нужно сначала доверить его:brew install raskrebs/sonar/sonarbrew trust raskrebs/sonar - Скрипт установки:
Этот скрипт скачивает последний бинарный файл в `~/.local/bin` и добавляет его в PATH. Можно использовать его и на Windows:curl -sfL https://raw.githubusercontent.com/raskrebs/sonar/main/scripts/install.sh | bashirm https://raw.githubusercontent.com/raskrebs/sonar/main/scripts/install.ps1 | iex - Используя Go:
go install github.com/raskrebs/sonar@latest
Запуск и использование
Для работы с Sonar в корне репозитория нужно создать файл конфигурации `sonar.yaml`, который описывает, как запускаются твои сервисы. Вот пример структуры файла:
name: my-app
services:
- name: db
cmd: docker compose up db
port: 5432
- name: api
cmd: uv run uvicorn app:app --port ${port}
port: auto
depends_on: [db]
- name: frontend
cmd: npm run dev -- --port ${port} --strictPort
port: auto
depends_on: [api]
env:
VITE_API_URL: ${api.url}
После этого можно запустить проект с помощью команды:
sonar start
Sonar автоматически выберет свободные порты для сервисов с параметром `port: auto`. Это позволяет запустить несколько экземпляров рабочего дерева рядом, не сталкиваясь с конфликтами портов.
Если файл `sonar.yaml` отсутствует, можно запустить команду напрямую:
sonar start -- npm run dev
Команды
Некоторые полезные команды для работы с Sonar:
- Список запущенных процессов:
sonar list --tree - Запуск сервисов:
sonar start - Остановка сервисов:
sonar down - Получение информации о сервисе:
sonar info 3000
Ограничения
Sonar работает только на платформах macOS, Linux и Windows, но некоторые функции, такие как desktop-приложение, пока недоступны для Windows. Важно также помнить, что Sonar может не видеть процессы, запущенные от других пользователей. Для их отображения рекомендуется использовать `sudo`.
Кроме того, если порт управляется другой системой (например, через systemd или Docker с параметром `restart: always`), Sonar не сможет его остановить и отключить. И, конечно, необходимо убедиться, что все зависимости, указанные в `sonar.yaml`, корректны, иначе могут возникнуть ошибки при запуске.
Открыть на GitHub: raskrebs/sonar →
RepoRadar