
🔨 مدير آلات حديث وعابر للمنصات
مركز إدارة للمضيفين لأسراب من أجهزة لينكس. قم بتثبيت وكيل Platypus على كل مضيف تملكه؛ يتصل الوكيل عائدًا بخادم Platypus عبر TLS + protobuf؛ من الخادم تحصل على شل تفاعلي، وإدارة الملفات، ونفق الشبكة على كل مضيف مُدار — من خلال لوحة تحكم مركزية واحدة.
واجهة مستخدم ذات تنقل مسطح على غرار Vercel مع لوحة تحكم المشروع، ومتصفح للمضيف/المستمع/الجلسة، ووحدة تحكم إرسال متعددة المضيفين، ومدير مستخدم إداري. اطّلع على المعرض الكامل في docs/screenshots/. أعد تشغيل make screenshots لتوليدها من التطبيق المباشر.
يتم شحن Platypus كملفين ثنائيين للخلفية بالإضافة إلى عميل سطح مكتب مستقل:
| Binary | Role |
|---|---|
platypus-server |
الخادم هو مجرد واجهة برمجة تطبيقات — لا توجد واجهة ويب مضمنة. يمكن لأجهزة سطح المكتب متعددة الاتصال بنفس الخادم في وقت واحد.
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 قبل كل commit:
pip install pre-commit # or: pipx install pre-commit
make hooks # one-time: wires .git/hooks/pre-commit
make pre-commit # optional: run all hooks against every file now
يتطلب Node 22+، وتبعيات Wails CLI (wails doctor)، ومكتبات WebView الخاصة بالمنصة (webkit2gtk-4.1 على لينكس، WebView2 على ويندوز، WKWebView على ماك).
make desktop-deps # one-time: install Wails CLI + pnpm packages
make desktop-build # → desktop/build/bin/platypus-desktop
make desktop-dev # hot-reload dev mode
نفس الصفحات، نفس الميزات (بدون دفع الأحداث في الوقت الفعلي)، تعمل في أي متصفح:
make web-ui # → desktop/frontend/dist-web/ (static bundle)
make web-ui-serve # preview at 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 بايت ست عشري؛ openssl rand -hex 32) بدلاً من ذلك بحيث لا يتم كتابة مفتاح تشفير المفتاح الخاص للـ CA بجانب قاعدة البيانات المشفرة.
./build/platypus-server # foreground; Ctrl-C for graceful shutdown
للإنتاج، قم بتشغيل الخادم تحت systemd بدلاً من تشغيله في الخلفية يدويًا.
platypus-server واحد ضد نفس قاعدة البيانات حتى يتم تنفيذ الإلغاء عبر العمليات. القياس الرأسي + وضع استعداد عالي التوفر هو الشكل المدعوم؛ النسخ المتماثلة المتوازنة الحمل غير مدعومة.PLATYPUS_DEV=1 موجودًا أيضًا (وهو ما يفعل احتياطيًا على القرص خاصًا بالتطوير فقط في <data-dir>/ca.kek — غير آمن للإنتاج لأن النص المشفر والمفتاح ينتهيان على نفس وحدة التخزين).distributor.store.endpoint set)، قم بتعيين PLATYPUS_DISTRIBUTOR_STORE_ACCESS_KEY_ID و PLATYPUS_DISTRIBUTOR_STORE_SECRET_ACCESS_KEY بدلاً من تضمينها في config.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.لا تقم بكتابة URLs
curl http://...يدويًا مقابل المسار القديم/agent/<host>:<port>— تم إزالة هذا التدفق. قم دائمًا بعرض أمر التثبيت عبر واجهة المستخدم بحيث يحمل مرساة الثقة.
افتح تطبيق سطح المكتب (platypus-desktop) أو واجهة الويب (make web-ui-serve)، املأ URL الخادم والسر، وستكون داخل التطبيق. التبويبات: الجلسات (كل وكيل اتصل بالخادم)، الطرفية، الملفات، الأنفاق، المستمعين.
هذا المشروع موجود بفضل كل الأشخاص الذين يساهمون.
شكرًا لجميع داعمينا! 🙏 [كن داعمًا]
ادعم هذا المشروع من خلال أن تصبح راعيًا. سيظهر شعارك هنا مع رابط لموقعك على الويب. [كن راعيًا]
| برنامج خفي. يقبل اتصالات الوكيل الواردة على منافذ TLS؛ يعرض واجهة برمجة تطبيقات REST + WebSocket لأدوات الإدارة؛ يقدم ثنائيات الوكيل للتوزيع. |
platypus-agent | العملية التي تعمل على كل مضيف مُدار. تتصل عائدًا بالخادم عبر TLS + protobuf. |
platypus-desktop | واجهة رسومية سطح المكتب أصلية (Wails v2). اتصل بأي خادم يمكن الوصول إليه باستخدام URL + secret؛ واجهة مستخدم ذات تبويبات للجلسات، والمحطات الطرفية، والمستمعين، والملفات، والأنفاق. راجع desktop/. |
config.docker.yml