
🔨 Современный кроссплатформенный менеджер машин
Центральный узел управления парками 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, а не вручную в фоне.
platypus-server на одной БД, пока не появится
межпроцессная инвалидация. Поддерживаемая конфигурация: вертикальное масштабирование + HA
резервирование; горизонтальные реплики под балансировщиком нагрузки не поддерживаются.PLATYPUS_DEV=1
(что включает запасной вариант хранения на диске для разработки по адресу <data-dir>/ca.kek —
небезопасно для продакшена, так как шифротекст и ключ оказываются на одном
томе).distributor.store.endpoint), задавайте
PLATYPUS_DISTRIBUTOR_STORE_ACCESS_KEY_ID и
PLATYPUS_DISTRIBUTOR_STORE_SECRET_ACCESS_KEY вместо того, чтобы вшивать
их в config.yml. Прилагаемый config.docker.yml поставляется с
пустыми полями YAML по этой причине.192.168.88.129
0.0.0.0:9443192.168.88.130 (запускает platypus-agent)Сначала запустите ./platypus-server. config.yml генерируется из
assets/config.example.yml, если его нет. Значения по умолчанию разумны.
Чтобы зарегистрировать новый управляемый хост:
Сгенерированная сервером однострочная команда выглядит так:
curl -fsSL https://<server>:9443/api/v1/install/<one-shot-token> | sh
Одноразовый токен установки истекает вскоре после выдачи и сжигается при первом успешном обращении. Возвращаемый сервером скрипт:
curl --cacert (без -k, без TOFU);PLATYPUS_INSECURE_DOWNLOAD=1.Не вводите вручную URL типа
curl http://...для устаревшего пути/agent/<host>:<port>— этот поток удалён. Всегда генерируйте команду установки через интерфейс, чтобы она содержала якорь доверия.
Откройте десктопное приложение (platypus-desktop) или веб-интерфейс (make web-ui-serve),
введите URL сервера и секрет, и вы внутри. Вкладки: Сессии (каждый
подключившийся агент), Терминал, Файлы, Туннели, Слушатели.
Спасибо всем нашим спонсорам! 🙏 [Стать спонсором]
Поддержите этот проект, став спонсором. Ваш логотип появится здесь со ссылкой на ваш сайт. [Стать спонсором]