适用于 Linux 机器集群的主机管理枢纽。在你拥有的每台主机上安装 Platypus 代理;代理通过 TLS + protobuf 回连到你的 Platypus 服务器;通过服务器,你可以在所有托管主机上获得交互式 Shell、文件管理和网络隧道——全部通过一个中央控制平面。
一个 Vercel 风格的扁平导航 UI,包含项目仪表盘、主机/监听器/会话浏览器、多主机调度控制台和管理员用户管理器。完整图库见 docs/screenshots/。重新运行 make screenshots 可从实时应用重新生成它们。
Platypus 提供两个后端二进制文件和一个独立桌面客户端:
| 二进制文件 | 角色 |
|---|---|
platypus-server | 守护进程。在 TLS 入站端口上接受入站代理连接;为管理工具提供 REST + WebSocket API;提供代理二进制文件的分发。 |
platypus-agent | 在每个托管主机上运行的进程。通过 TLS + protobuf 回连到服务器。 |
服务器纯粹是一个 API——没有嵌入的 Web UI。多个桌面端可同时连接到同一台服务器。
config.yml 自动启动监听器获取完整 Platypus 系统(包括服务器、Web UI 和基于 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 库(Linux 上为 webkit2gtk-4.1,Windows 上为 WebView2,macOS 上为 WKWebView)。
make desktop-deps # 一次性:安装 Wails CLI + pnpm 包
make desktop-build # → desktop/build/bin/platypus-desktop
make desktop-dev # 热重载开发模式
相同的页面、相同的功能(缺少实时事件推送),在任何浏览器中运行:
make web-ui # → desktop/frontend/dist-web/(静态包)
make web-ui-serve # 在 http://localhost:8080 预览
dist-web/ 是完全静态的;可部署到 GitHub Pages / S3 / nginx。通过登录表单将其指向任何 platypus-server。
完整说明见 desktop/README.md。
从 Releases 页面 下载适用于你操作系统/架构的存档,解压并运行。
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 字节十六进制;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。不要手动编写针对旧版
/agent/<host>:<port>路径的curl http://...URL——该流程已被移除。始终通过 UI 渲染安装命令,以便携带信任锚点。
打开桌面应用(platypus-desktop)或 Web UI(make web-ui-serve),填写服务器 URL 和密钥即可进入。标签页:会话(所有已拨入的代理)、终端、文件、隧道、监听器。
感谢所有支持者!🙏 [成为支持者]
通过成为赞助商来支持本项目。你的 Logo 将在此处显示并链接到你的网站。 [成为赞助商]
platypus-desktop | 原生(Wails v2)桌面 GUI。通过 URL + 密钥连接到任何可达的服务器;标签式 UI 包含会话、终端、监听器、文件、隧道。详见 desktop/。 |