wolf-host / README.md
mohammed978's picture
Wolf Host panel (gateway architecture, obfuscated sources)
73c1400 verified
|
Raw History Blame Contribute Delete
7.38 kB
metadata
title: Wolf Host
emoji: 🐺
colorFrom: indigo
colorTo: blue
sdk: docker
pinned: false
short_description: Multi-user Python hosting panel behind a Cloudflare gateway

🐺 Wolf Host — استضافة هيما

لوحة تحكم متعددة المستخدمين لاستضافة وتشغيل سكربتات Python (و PHP بمحرك كامل عبر مسار التشغيل)، مبنية على ثلاث طبقات حتى لا يظهر أي سر داخل الكود ولا ينكشف الرابط الحقيقي، مع مجمّع بوابتين في حسابي Cloudflare مختلفين لمضاعفة الحصة اليومية:

  المتصفح ──► https://3mh-host.pages.dev            (Cloudflare Pages — الواجهة الساكنة)
                  │  _worker.js  (موزّع المجمّع: A أولًا ثم B عند النفاد)
                  ▼
          ┌──────────────────────────┬──────────────────────────┐
          │ wolf-gateway (حساب A)     │ wolf-gateway-2 (حساب B)  │
          │ host.for.wolf             │ contact.3mh              │
          └──────────────────────────┴──────────────────────────┘
                  │  لكل حساب 100k طلب/يوم — يتزامنان معًا
                  │  • تسجيل الدخول + الكابتشا + الجلسات (KV/D1)
                  │  • API خفيفة تُقرأ من D1 مباشرة
                  │  • فحص مسارات الملكية ومنع traversal
                  │  • توقيع HMAC لكل طلب يمرّ للخلفية
                  ▼
              *.hf.space                            (Hugging Face Space — هذا السبيس)
                  • تشغيل/إيقاف العمليات + pip install
                  • File Manager + Console
                  • مزامنة القرص ⇄ D1 كل 60 ثانية
                  • إدارة ويب هوك تيليجرام تلقائيًا (set/delete)

الرابط الذي لا يتغيّر: https://3mh-host.pages.dev/ مصدر الحقيقة للبيانات: Cloudflare D1 (وليس قرص السبيس — القرص يُمسح مع كل rebuild). زيارات المواقع المستضافة تخرج على رابط مباشر <gateway>/web/<sub>/… (لا تمرّ بالوسيط) فتتوزّع بين الحسابين وتوفّر نصف الاستدعاءات.


✨ الوظائف (كلها محفوظة)

  • دخول أدمن + مستخدمين (التسجيل العام مغلق افتراضيًا)
  • أنواع سيرفرات جديدة عند الإنشاء:
    • python — بوت/سكربت (الوضع الافتراضي)
    • webapp — تطبيق ويب Python (يأخذ PORT/HOST من البيئة)
    • api — خدمة API بلغة Python
    • php — محرك PHP كامل (php-cli + إضافات) عبر خادم PHP المضمّن
  • كل سيرفر من نوع webapp/api/php يحصل على دومين فرعي خاص به مع رابط مباشر <gateway>/web/<sub>/ يثبَّت بالهاش على أحد الحسابين (توزيع أحمال)
  • 🤖 ويب هوك تيليجرام تلقائي: زر واحد في الكونسول يفعّله — الخلفية تكتشف توكن البوت في ملفات السيرفر وتنادي setWebhook على الرابط المباشر، وتعيد التسجيل عند كل تشغيل، وتزيله عند الإيقاف/الحذف، وتنقله للحساب الآخر إن نفدت حصته. (لا تستخدم getUpdates معه — تيليجرام يرفض الجمع بين الطريقتين.)
  • مجمّع بوابتين GATEWAY_URLS مع قاطع صحة: التبديل التلقائي عند نفاد حصة أحد الحسابين، وصفحة 503 مؤقتة (مع Retry-After) إذا نفدا معًا
  • API عامة للمنصة على /api/v1/* بمفتاح PANEL_API_KEY
  • إنشاء «سيرفرات» بدون حدود، مع تهدئة تلقائية تحت الضغط (adaptive_throttle)
  • تشغيل / إيقاف / إعادة تشغيل مع تثبيت تلقائي للمكتبات الناقصة و requirements.txt
  • File Manager كامل: رفع، إنشاء، إعادة تسمية، حذف، تحرير داخل المتصفح
  • Console حيّ منقّى من ضوضاء pip (CPU / RAM / IP)
  • لوحة أدمن: إحصائيات، تفعيل/حظر مستخدمين، حظر سيرفرات، مفاتيح API
  • مزامنة كل 60 ثانية: ملفات السيرفرات + meta.json + الحالة + آخر أسطر الكونسول

🗂️ بنية المشروع

المسار الدور
app.py الخلفية (Flask) — كل العمليات الثقيلة + إدارة ويب هوك تيليجرام
gwclient.py الاتصال بالبوابات: توقيع HMAC + /internal/* + /tg
proxy/ تغليف يمرر طلبات Telegram عبر Cloudflare Worker
worker/src/ كود البوابات (auth, api, store, internal, peer …)
worker/wrangler.toml إعداد البوابة A (حساب host.for.wolf)
worker/wrangler.account2.toml إعداد البوابة B (حساب contact.3mh)
migrations/ سكيما D1
dist/ ما يُنشر على Cloudflare Pages (_worker.js الموزّع + الواجهة)
scripts/seed_gateway.py بذر الحساب الثاني (مستخدمون/مفاتيح/جلسات)
scripts/ الترحيل إلى D1، التشويش، CSP، سكربتات المساعدة
.github/workflows/ النشر التلقائي عند الدفع (A + B + Pages + السبيس)

🚀 النشر

الخطوات الكاملة (بما فيها الأسرار وأوامر النشر والبذر): docs/DEPLOY.md ملخّص الأمن: docs/SECURITY.md

# 1) D1 schema (الحساب A فقط)
cd worker && npx wrangler d1 migrations apply wolf_host --remote

# 2) البوابتان
npx wrangler secret bulk --file secrets.json --env=""
npx wrangler deploy                                  # A
npx wrangler secret bulk --file secrets.json -c wrangler.account2.toml
npx wrangler deploy -c wrangler.account2.toml        # B

# 3) Pages (الرابط ثابت) ثم بذر B من A
cd .. && npx wrangler pages deploy dist --project-name 3mh-host
python scripts/seed_gateway.py --from <A-url> --to <B-url> --secret <SECRET>

🔐 لماذا لا يوجد سر واحد داخل الكود

  • PANEL_SERVICE_SECRET / ADMIN_PASSWORD / HF_ORIGIN → Cloudflare Secrets
  • نفس القيم على السبيس → Hugging Face Secrets
  • لا يوجد PANEL_SECRET_KEY بعد الآن (لا توجد جلسات Flask)
  • التسجيل معطّل افتراضيًا (ALLOW_REGISTRATION=0)
  • السبيس يرفض أي طلب غير موقّع، فالرابط المكشوف لا يكفي للوصول

الرخصة: MIT · المؤلف: White Wolf — https://t.me/j49_c