
🔨 현대적인 크로스 플랫폼 머신 관리자
Linux 시스템 플릿을 위한 호스트 관리 허브입니다. 소유한 모든 호스트에 Platypus 에이전트를 설치하세요. 에이전트는 TLS + protobuf를 통해 Platypus 서버로 다시 연결됩니다. 서버에서 모든 관리 호스트에 대한 대화형 셸, 파일 관리, 네트워크 터널링을 하나의 중앙 제어판을 통해 얻을 수 있습니다.
Vercel 스타일의 플랫 네비게이션 UI로 프로젝트 대시보드, 호스트/리스너/세션 브라우저, 멀티 호스트 디스패치 콘솔, 관리 사용자 관리자를 제공합니다. 전체 갤러리는 docs/screenshots/에서 확인하세요. make screenshots를 다시 실행하여 라이브 앱에서 스크린샷을 재생성할 수 있습니다.
Platypus는 두 개의 백엔드 바이너리와 독립 실행형 데스크톱 클라이언트로 제공됩니다:
| 바이너리 | 역할 |
|---|---|
platypus-server | 데몬. TLS 인그레스 포트에서 인바운드 에이전트 연결을 수락합니다. 관리 도구를 위한 REST + WebSocket API를 노출합니다. 배포용 에이전트 바이너리를 제공합니다. |
서버는 순수 API입니다 — 내장 웹 UI가 없습니다. 여러 데스크톱이 동시에 동일한 서버에 연결할 수 있습니다.
config.yml에서 자동 시작 리스너전체 Platypus 시스템(서버, 웹 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를 참조하세요.
Releases 페이지에서 OS/아키텍처에 맞는 아카이브를 다운로드하고 압축을 풀어 실행하세요.
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도 존재하지 않는 한 서버가 시작을 거부합니다 (이는 개발 전용 디스크 기반 폴백을 <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을 설정하지 않는 한).수동으로
curl http://...URL을 레거시/agent/<host>:<port>경로에 대해 작성하지 마세요 — 해당 흐름은 제거되었습니다. 항상 UI를 통해 설치 명령을 렌더링하여 신뢰 앵커를 전달하세요.
데스크톱 앱 (platypus-desktop) 또는 웹 UI (make web-ui-serve)를 열고 서버 URL과 시크릿을 입력하면 바로 사용할 수 있습니다. 탭: 세션 (들어온 모든 에이전트), 터미널, 파일, 터널, 리스너.
이 프로젝트는 기여해 주신 모든 분들 덕분에 존재합니다.
모든 후원자님께 감사드립니다! 🙏 [후원자가 되기]
스폰서가 되어 이 프로젝트를 지원해 주세요. 귀하의 로고가 여기에 귀하의 웹사이트 링크와 함께 표시됩니다. [스폰서가 되기]
platypus-agent |
| 각 관리 호스트에서 실행되는 프로세스. TLS + protobuf를 통해 서버로 다시 연결됩니다. |
platypus-desktop | 네이티브 (Wails v2) 데스크톱 GUI. URL + 시크릿으로 연결 가능한 모든 서버에 연결합니다. 세션, 터미널, 리스너, 파일, 터널을 위한 탭 UI. desktop/ 참조. |