
🔨 Современный кроссплатформенный менеджер машин
Центральный узел управления парками Linux-машин. Установите агент Platypus на каждый из ваших хостов; агент подключается к вашему серверу Platypus через TLS + protobuf; с сервера вы получаете интерактивную оболочку, управление файлами и сетевые туннели на каждом управляемом хосте — через единую панель управления.
Плоский интерфейс в стиле Vercel с панелью проектов, браузером хостов/слушателей/сессий,
консолью для управления несколькими хостами и менеджером пользователей-администраторов.
Полную галерею смотрите в docs/screenshots/. Повторный запуск
make screenshots перегенерирует их из работающего приложения.
Platypus поставляется в виде двух серверных бинарников и отдельного десктопного клиента:
| Бинарник | Роль |
|---|---|
platypus-server | Демон. Принимает входящие соединения агентов на TLS-портах; предоставляет REST + WebSocket API для инструментов администрирования; раздаёт бинарники агентов. |
platypus-agent | Процесс, запускаемый на каждом управляемом хосте. Подключается к серверу через TLS + protobuf. |
platypus-desktop | Нативное (Wails v2) десктопное GUI. Подключается к любому доступному серверу по URL + секрету; интерфейс с вкладками для сессий, терминалов, слушателей, файлов, туннелей. См. desktop/. |
Сервер — чисто API, без встроенного веб-интерфейса. Несколько десктопных клиентов могут одновременно подключаться к одному серверу.
config.ymlСамый быстрый способ получить полноценную систему Platypus (включая сервер, веб-интерфейс и дистрибьютор агентов на базе MinIO) — использовать Docker Compose:
git clone https://github.com/WangYihang/Platypus
cd Platypus
docker-compose up -d
https://localhost:9443 в браузере (контейнер
поставляется с самоподписанным сертификатом; при первом посещении браузер
попросит принять его).bootstrap_secret записывается в
/app/data/bootstrap.secret внутри контейнера при первом запуске
(режим 0600). Прочитайте его с помощью
docker compose exec platypus-server cat /app/data/bootstrap.secret,
используйте один раз для создания первого администратора, затем удалите файл.
После завершения инициализации секрет больше не принимается.curl ... | sh, подписанную и привязанную к CA проекта,
для развертывания агентов на ваших хостах.Требуются Go 1.24+ и protoc (только если вы перегенерируете protobuf код).
git clone https://github.com/WangYihang/Platypus
cd Platypus
make build # → . /build/{platypus-server,platypus-agent}
Другие полезные цели: make test, make lint, make snapshot (кроссплатформенная сборка через goreleaser), make help.
Участникам следует установить git-хуки, чтобы gofmt / goimports / go vet /
golangci-lint выполнялись перед каждым коммитом:
pip install pre-commit # или: pipx install pre-commit
make hooks # однократно: настраивает .git/hooks/pre-commit
make pre-commit # опционально: запустить все хуки сейчас для всех файлов
Требуются Node 22+, зависимости Wails CLI (wails doctor) и библиотеки WebView платформы (webkit2gtk-4.1 на Linux, WebView2 на Windows, WKWebView на macOS).
make desktop-deps # однократно: установка Wails CLI + пакеты pnpm
make desktop-build # → desktop/build/bin/platypus-desktop
make desktop-dev # режим разработки с горячей перезагрузкой
Те же страницы, те же возможности (за исключением push-уведомлений в реальном времени), работает в любом браузере:
make web-ui # → desktop/frontend/dist-web/ (статический bundle)
make web-ui-serve # предпросмотр на http://localhost:8080
dist-web/ полностью статический; разместите его на GitHub Pages / S3 / nginx. Укажите в нём любой platypus-server через форму входа.
Полные заметки в desktop/README.md.
Загрузите подходящий архив для вашей ОС/архитектуры со страницы релизов, распакуйте и запустите.
docker build -t platypus-server .
docker run --rm -p 9443:9443 \
-e PLATYPUS_DEV=1 \
-v $(pwd)/config.yml:/config.yml \
platypus-server
PLATYPUS_DEV=1 включает запасной вариант хранения KEK на диске, чтобы свежий запуск
сразу «работал»; для продакшена удалите эту переменную окружения и задайте
PLATYPUS_CA_KEK (32 байта в hex; openssl rand -hex 32), чтобы
ключ шифрования закрытого ключа CA никогда не записывался рядом с зашифрованной
базой данных.
./build/platypus-server # на переднем плане; Ctrl-C для корректного завершения
Для продакшена запускайте сервер под systemd, а не вручную в фоне.