
🔨 एक आधुनिक, क्रॉस-प्लेटफॉर्म मशीन प्रबंधक
लिनक्स मशीनों के बेड़े के लिए एक होस्ट प्रबंधन केंद्र। अपनी प्रत्येक मशीन पर Platypus एजेंट स्थापित करें; एजेंट TLS + protobuf के माध्यम से आपके Platypus सर्वर पर वापस कॉल करता है; सर्वर से आपको प्रत्येक प्रबंधित होस्ट पर एक इंटरैक्टिव शेल, फ़ाइल प्रबंधन और नेटवर्क टनलिंग मिलती है - एक केंद्रीय नियंत्रण तल के माध्यम से।
एक Vercel-शैली फ्लैट-नेव UI जिसमें एक प्रोजेक्ट डैशबोर्ड, एक होस्ट/लिसनर/सेशन ब्राउज़र, एक मल्टी-होस्ट डिस्पैच कंसोल और एक व्यवस्थापक उपयोगकर्ता प्रबंधक शामिल है। पूरी गैलरी docs/screenshots/ पर देखें। लाइव ऐप से उन्हें फिर से जनरेट करने के लिए make screenshots चलाएँ।
Platypus दो बैकएंड बाइनरी और एक स्टैंडअलोन डेस्कटॉप क्लाइंट के रूप में आता है:
| बाइनरी | भूमिका |
|---|---|
सर्वर पूरी तरह से एक API है - इसमें कोई एम्बेडेड वेब 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 में।
रिलीज़ पृष्ठ से अपने OS/arch के लिए उपयुक्त संग्रह डाउनलोड करें, निकालें और चलाएँ।
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 फ़ॉलबैक को सक्षम करता है ताकि एक ताज़ा प्रारंभ "बस काम करे"; उत्पादन के लिए, उस env var को हटा दें और इसके बजाय 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 सेट), तो उन्हें config.yml में डालने के बजाय PLATYPUS_DISTRIBUTOR_STORE_ACCESS_KEY_ID और PLATYPUS_DISTRIBUTOR_STORE_SECRET_ACCESS_KEY सेट करें। बंडल किया गया उस कारण से YAML फ़ील्ड खाली छोड़ कर आता है।192.168.88.129
0.0.0.0:9443192.168.88.130 (platypus-agent चलाता है)सबसे पहले, ./platypus-server चलाएँ। यदि कोई मौजूद नहीं है तो assets/config.example.yml से एक config.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-server| डेमन। TLS इनग्रेस पोर्ट्स पर इनबाउंड एजेंट कनेक्शन स्वीकार करता है; एडमिन टूलिंग के लिए REST + WebSocket API प्रस्तुत करता है; वितरण के लिए एजेंट बाइनरी प्रस्तुत करता है। |
platypus-agent | वह प्रक्रिया जो प्रत्येक प्रबंधित होस्ट पर चलती है। TLS + protobuf के माध्यम से सर्वर पर वापस कॉल करती है। |
platypus-desktop | नेटिव (Wails v2) डेस्कटॉप GUI। URL + सीक्रेट के साथ किसी भी पहुँच योग्य सर्वर से कनेक्ट करें; टैब वाला UI सेशन, टर्मिनल, लिसनर, फ़ाइलें, टनल। desktop/ देखें। |
config.docker.yml