
🔨 最新のクロスプラットフォームマシンマネージャー
Linuxマシンのフリート向けのホスト管理ハブ。所有するすべてのホストにPlatypusエージェントをインストールします。エージェントはTLS + protobuf経由でPlatypusサーバーに接続します。サーバーからは、管理下の各ホストに対してインタラクティブシェル、ファイル管理、ネットワークトンネリングを一元的なコントロールプレーンから行えます。
Vercel風のフラットナビUIで、プロジェクトダッシュボード、ホスト/リスナー/セッションブラウザ、マルチホストディスパッチコンソール、管理ユーザーマネージャーを備えています。完全なギャラリーはdocs/screenshots/をご覧ください。ライブアプリから再生成するにはmake screenshotsを実行してください。
Platypusは2つのバックエンドバイナリとスタンドアロンのデスクトップクライアントとして提供されます:
| バイナリ | 役割 |
|---|---|
platypus-server | デーモン。TLSイングレスポートでエージェントの着信接続を受け付けます。管理ツール向けにREST + WebSocket APIを公開し、配布用のエージェントバイナリを提供します。 |
サーバーは純粋に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コマンドが取得でき、フリートにエージェントをデプロイできます。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。
コントリビューターは、各コミット前にgofmt / goimports / go vet / golangci-lintが実行されるようにgitフックをインストールする必要があります:
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にあります。
OS/アーキテクチャに適したアーカイブを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バイトの16進数、openssl rand -hex 32)を設定してください。そうすることで、CA秘密鍵の暗号化キーが暗号化データベースの隣に書き込まれることがなくなります。
./build/platypus-server # フォアグラウンド; Ctrl-Cでグレースフルシャットダウン
本番環境では、手動でバックグラウンド実行するのではなく、systemdの下でサーバーを実行してください。
platypus-serverを実行しないでください。サポートされる構成は垂直スケールとHAスタンバイであり、水平ロードバランスレプリカはサポートされていません。PLATYPUS_DEV=1も存在しない限りサーバーは起動を拒否します(PLATYPUS_DEV=1は<data-dir>/ca.kekに開発専用のオンディスクフォールバックを有効にしますが、暗号文とキーが同じボリュームに配置されるため本番環境では安全ではありません)。distributor.store.endpointが設定されている場合)、config.ymlにハードコードするのではなく、PLATYPUS_DISTRIBUTOR_STORE_ACCESS_KEY_IDとPLATYPUS_DISTRIBUTOR_STORE_SECRET_ACCESS_KEYを設定してください。バンドルされている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とシークレットを入力すれば完了です。タブ:セッション(接続しているすべてのエージェント)、ターミナル、ファイル、トンネル、リスナー。
このプロジェクトは、貢献してくださるすべての方々のおかげで成り立っています。
すべてのバッカーの皆様に感謝します!🙏 [バッカーになる]
スポンサーになることでこのプロジェクトを支援してください。あなたのロゴがここに表示され、ウェブサイトへのリンクが付きます。[スポンサーになる]
platypus-agent| 管理下の各ホストで実行されるプロセス。TLS + protobuf経由でサーバーに接続します。 |
platypus-desktop | ネイティブ (Wails v2) デスクトップGUI。到達可能な任意のサーバーにURLとシークレットで接続します。セッション、ターミナル、リスナー、ファイル、トンネル用のタブ付きUI。詳細はdesktop/を参照。 |