مقدمة

لتلبية الاحتياجات الشخصية ، قام برفع VSphere ، حيث قمت بتدوير جهاز توجيه افتراضي وخادم Ubuntu كخادم وسائط ومجموعة من الأشياء الجيدة ، ويجب أن يكون هذا الخادم متاحًا من الإنترنت. لكن المشكلة تكمن في أن مزود الخدمة يقدم إحصائيات ثابتة مقابل المال ، والتي يمكنك دائمًا العثور على تطبيق أكثر فائدة. لذلك ، استخدمت مجموعة من ddclient + cloudflare.
كان كل شيء على ما يرام حتى توقف ddclient عن العمل. بعد حفرها قليلاً ، أدركت أن الوقت قد حان للعكازات والدراجات ، حيث بدأ يستغرق الكثير من الوقت للعثور على المشكلة. في النهاية ، تحول كل شيء إلى شيطان صغير يعمل فقط ، لكنني لست بحاجة إلى أي شيء آخر.
من يهتم - مرحبا بكم في القط.
الأدوات المستخدمة وكيف "يعمل"
لذا فإن أول ما تعلمته على موقع cloudflare هو كل ما تحتاج لمعرفته حول
واجهة برمجة التطبيقات . وكنت جالسًا بالفعل لتنفيذ كل شيء في Python (بعد التعرف على Python ، أستخدمه كثيرًا في بعض المهام البسيطة أو عندما أحتاج إلى تقديم نموذج أولي بسرعة) عندما صادفت فجأة تنفيذًا جاهزًا تقريبًا.
بشكل عام ، تم اتخاذ المجمع
بيثون - cloudflare كأساس.
أخذت مثالاً واحداً لتحديث نظام أسماء النطاقات وأضفت استخدام ملف التكوين والقدرة على تحديث العديد من سجلات A داخل المنطقة وعدد طبيعي غير محدود من المناطق.
المنطق كالتالي:
- يتلقى البرنامج النصي قائمة المناطق من ملف التكوين ويمر عبرها في حلقة
- في كل منطقة ، يتم تنفيذ البرنامج النصي عبر كل سجل DNS من النوع A أو AAAA ويتحقق من IP العام مع السجل
- إذا كان عنوان IP مختلفًا ، فقم بتغييره ؛ وإذا لم يكن الأمر كذلك ، تخطي تكرار الحلقة وانتقل إلى التالي
- يغفو في الوقت المحدد في التكوين
التثبيت والإعداد
ربما سيكون من الممكن تقديم حزمة .deb ، لكنني لست قوياً في ذلك ، وهي ليست معقدة.
وصفت العملية بالتفصيل في README.md على
صفحة المستودع .
ولكن فقط في حالة ، سوف أصف بالروسية بشكل عام:
- تأكد من تثبيت python3 و python3-pip ، إن لم يكن ، تثبيت (على Windows ، python3-pip مثبت مع Python)
- استنساخ أو قم بتنزيل المستودع
- تثبيت التبعيات اللازمة.
python3 -m pip install -r requirements.txt
- قم بتشغيل البرنامج النصي للتثبيت
لنظام التشغيل Linux:
chmod +x install.sh sudo ./install.sh
لنظام التشغيل Windows: windows_install.bat
- تحرير ملف التكوين
لنظام التشغيل Linux:
sudoedit /etc/zen-cf-ddns.conf
لنظام التشغيل Windows:
افتح الملف zen-cf-ddns.conf في المجلد حيث قمت بتثبيت البرنامج النصي.
هذا ملف JSON عادي ، لا يوجد شيء معقد بسبب الإعدادات - لقد وصفت على وجه التحديد كمثال 2 مناطق مختلفة فيه.
ما هو مخفي وراء التركيب؟
install.sh لنظام التشغيل Linux:
- يتم إنشاء مستخدم لبدء البرنامج الخفي ، دون إنشاء دليل رئيسي وقدرات تسجيل الدخول.
sudo useradd -r -s /bin/false zen-cf-ddns
- يتم إنشاء ملف السجل في / var / log /
- نجعل مالك ملف السجل للمستخدم الذي تم إنشاؤه حديثا
- يتم نسخ الملفات في أماكنها (التكوين في / etc ، الملف القابل للتنفيذ في / usr / bin ، ملف الخدمة في / lib / systemd / system)
- تم تفعيل الخدمة
windows_install.bat لنظام التشغيل Windows:
- نسخ الملف القابل للتنفيذ وملف التكوين إلى المجلد المحدد من قبل المستخدم
- ينشئ مهمة في برنامج الجدولة لتشغيل برنامج نصي عند بدء تشغيل النظام
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
بعد تغيير التكوين ، يحتاج البرنامج النصي إلى إعادة التشغيل ، في لينكس كل شيء بسيط ومألوف:
sudo service zen-cf-ddns start sudo service zen-cf-ddns stop sudo service zen-cf-ddns restart sudo service zen-cf-ddns status
لنظام التشغيل Windows ، سيكون عليك قتل عملية pythonw وإعادة تشغيل البرنامج النصي (أنا كسول جدًا لكتابة خدمة تحت Windows في C #):
taskkill /im pythonw.exe
عند اكتمال التثبيت والتكوين ، استخدم صحتك.
بالنسبة لأولئك الذين يريدون إلقاء نظرة على رمز Python الأكثر جمالا ، إليك
مستودع على GitHub .
رخصة معهد ماساتشوستس للتكنولوجيا ، لذلك تفعل ما تريد مع هذا الخير.
ملاحظة: لقد فهمت أنه كان عكازًا قليلاً ، لكنه يتأقلم مع مهمته مع اثارة ضجة.
محدث: 10/10/2019 17:37
لقد وجدت مشكلة واحدة أخرى ، وإذا أخبرني أحدهم بكيفية حلها ، فسأكون في غاية الامتنان.
المشكلة هي أنه إذا قمت بتثبيت التبعيات بدون تثبيت sudo python -m pip - r ... ، فمن الوحدات التابعة للمستخدم لن تكون الوحدات مرئية ، لكنني لا أريد إجبار المستخدمين على تثبيت الوحدات النمطية تحت sudo ، وهذا غير صحيح.
كيف تجعلها جميلة؟
محدث: 10/11/2019 19:16 يتم حل المشكلة باستخدام venv.
اتضح بعض التغييرات. الإصدار التالي سيكون في اليوم الآخر.