شخصياً، لا أوصي بتشغيل تكوين الحاويات المزدوجة على أي جهاز أقل من 8 جيجابايت من ذاكرة الوصول العشوائي (RAM) و4 معالجات (CPU) و80 جيجابايت من مساحة القرص، لكن تجربتك وظروفك قد تختلف. أنا أشغل منتدىً نشطاً نسبياً على هذا الإعداد من Hetzner مع حوالي 300 مستخدم نشط، وأيwhere من 70 إلى 100 وحدة DEU.
نص بايثون (Bash) للبحث عن خوادم Hetzner
حسنًا، قد يساعدك هذا ويساعد الآخرين الذين يقرأون هذا. إنه محدد لـ Hetzner ولكن يمكن تكييفه على الأرجح لموردي VPS الآخرين (لا تطلب مني فعل ذلك لك).
هذا نص Bash بسيط سيفحص كل 5 دقائق عن خادم Hetzner من طراز CAX21 أو CX33 وينشره كموضوع في فئة على مثيل Discourse الحالي الخاص بك (يمكنك تعديل النص لتكوين اختيارك). يعمل بشكل مشابه لفئة RSS.
ستحتاج إلى رمز Hetzner ومفتاح API لـ Discourse، ومعرف الفئة (Category ID) لفئة Discourse المطلوبة لنشر المواضيع فيها. يمكن تعديل النص ليشمل فلترًا لتحديد الموقع أيضًا (هذا يبحث عن جميع مواقعهم).
الخطوة 1: الحصول على رموز API
- رمز API الخاص بـ Hetzner: اذهب إلى وحدة تحكم Hetzner Cloud → اختر مشروعك → ثم انقر على الأمان على اليسار → رموز API → إنشاء رمز (قراءة فقط جيد). انسخ هذا المفتاح واحفظه.
- مفتاح API الخاص بـ Discourse: اذهب إلى إدارة Discourse → API → إنشاء مفتاح جديد (مستخدم النظام، جميع نقاط النهاية جيد). انسخ هذا واحفظه أيضًا.
الخطوة 2: تثبيت jq
قم بتسجيل الدخول عبر SSH إلى خادم Hetzner الحالي الخاص بك وثبّت محلل JSON jq (يستغرق بضع ثوانٍ فقط):
apt-get update
apt-get install jq -y
الخطوة 3: إعداد نص التتبع
على خادم Hetzner الحالي الخاص بك، أنشئ نص Bash التالي:
nano /root/hetzner_tracker.sh
الصق هذا الكود داخله (ستحتاج إلى إدراج مفاتيح API الخاصة بك الفعلية، وعنوان URL الخاص بمنتداك، ومعرف الفئة الذي تريد النشر فيه).
#!/bin/bash
HETZNER_TOKEN="أدخل_رمز_hetzner_الجديد_هنا"
DISCOURSE_URL="https://your-forum.com"
DISCOURSE_USER="system"
DISCOURSE_API_KEY="أدخل_مفتاح_discourse_api_الجديد_هنا"
CATEGORY_ID=XX # معرف فئة منتدى Discourse الخاص بك
# 1. اسأل Hetzner عن طرازات الخوادم، واحصل فقط على المعرفات لطرازات 8 جيجابايت الرخيصة (CAX21 أو CX33)
TYPES_JSON=$(curl -s -H "Authorization: Bearer $HETZNER_TOKEN" "https://api.hetzner.cloud/v1/server_types")
TARGET_IDS=$(echo "$TYPES_JSON" | jq -c '[.server_types[] | select(.name == "cax21" or .name == "cx33") | .id]')
# 2. اسأل Hetzner عن مستويات المخزون الفورية لجميع مراكز البيانات.
DC_JSON=$(curl -s -H "Authorization: Bearer $HETZNER_TOKEN" "https://api.hetzner.cloud/v1/datacenters")
# 3. تحقق من جميع المواقع لمعرفة ما إذا كانت طرازاتنا المحددة في قائمة "متاح".
MATCHES=$(echo "$DC_JSON" | jq -r --argjson targets "$TARGET_IDS" '
.datacenters[] |
.location.name as $loc |
.name as $dc |
.server_types.available[] |
select(. as $avail | $targets | index($avail)) |
"- الموقع: \($loc | ascii_upcase) (\($dc)) - معرف طراز الخادم: \(.)"
')
# 4. إذا وجدنا تطابقًا، قم ببناء منشور Discourse وأرسله!
if [ -n "$MATCHES" ]; then
RAW_TEXT="خادم ميزانية 8 جيجابايت (CAX21 أو CX33) متاح الآن!
**التطابقات التي تم العثور عليها:**
$MATCHES
[انتقل إلى وحدة تحكم Hetzner الآن!](https://console.hetzner.cloud/)"
PAYLOAD=$(jq -n --arg title "🚨 تنبيه HETZNER: خادم 8 جيجابايت في المخزون!" \
--arg raw "$RAW_TEXT" \
--argjson cat "$CATEGORY_ID" \
'{title: $title, raw: $raw, category: $cat}')
curl -s -X POST "$DISCOURSE_URL/posts.json" \
-H "Api-Key: $DISCOURSE_API_KEY" \
-H "Api-Username: $DISCOURSE_USER" \
-H "Content-Type: application/json" \
-d "$PAYLOAD"
# تعطيل النص بعد الإرسال حتى لا يزعج منتداك
chmod -x "$0"
fi
احفظ الملف (ctrl+o, enter, ctrl+x)، ثم اجعله قابلاً للتنفيذ:
chmod +x /root/hetzner_tracker.sh
الخطوة 4: أتمتة النص
افتح ملف إعداد جدول cron:
crontab -e
أضف هذا السطر في أسفل الكود الموجود تمامًا:
*/5 * * * * /root/hetzner_tracker.sh
كيف يعمل:
كل 5 دقائق، سيسأل خادمك Hetzner بهدوء، “هل لديك أي خوادم متاحة اليوم؟”
إذا أجابت Hetzner بنعم، يستخدم النص على الفور API الخاص بـ Discourse لإنشاء موضوع جديد تمامًا في الفئات المحددة لديك، وإذا قمت بإعداد Discourse لإعلامك بالمواضيع الجديدة، يجب أن يهتز بريدك الإلكتروني و/أو هاتفك.
إليك مثالاً على منشور موضوع من عندما كنت أبحث عن خادم CPX31 سعة 8 جيجابايت محدد في منطقة الولايات المتحدة.
بمجرد النشر بنجاح، يعطل النص أذونات التنفيذ الخاصة به (chmod -x) حتى لا يزعج منتداك بمئات المنشورات بينما الخادم في المخزون.
لا تقلق، لقد استخدمت هذا العديد من المرات ولن يفرض عليك حدود معدل الاستخدام.
