Kata Pengantar

Untuk kebutuhan pribadi, ia mengangkat VSphere, di mana saya memutar router virtual dan server Ubuntu sebagai server media dan banyak barang, dan server ini harus dapat diakses dari Internet. Tetapi masalahnya adalah penyedia saya memberikan statika untuk uang, yang Anda selalu dapat menemukan aplikasi yang lebih berguna. Oleh karena itu, saya menggunakan banyak ddclient + cloudflare.
Semuanya baik-baik saja sampai ddclient berhenti bekerja. Setelah menggali sedikit, saya menyadari bahwa waktunya telah tiba untuk kruk dan sepeda, karena waktu untuk mencari masalah mulai terlalu banyak. Pada akhirnya, semuanya berubah menjadi iblis kecil yang hanya berfungsi, tetapi saya tidak membutuhkannya lagi.
Siapa yang peduli - selamat datang di kucing.
Alat yang digunakan dan bagaimana "itu" bekerja
Jadi hal pertama yang saya pelajari di situs web cloudflare adalah semua yang perlu Anda ketahui tentang
API . Dan saya sudah duduk untuk mengimplementasikan semuanya dengan Python (setelah mengenal Python, saya menggunakannya lebih sering untuk beberapa tugas sederhana atau ketika saya perlu membuat prototipe dengan cepat) ketika saya tiba-tiba menemukan implementasi yang hampir siap.
Secara umum, pembungkus
python-cloudflare diambil sebagai dasar.
Saya mengambil satu contoh untuk memperbarui DNS dan menambahkan penggunaan file konfigurasi dan kemampuan untuk memperbarui beberapa catatan A dalam zona dan tentu saja jumlah zona yang tidak terbatas.
Logikanya adalah sebagai berikut:
- Skrip menerima daftar zona dari file konfigurasi dan melewati mereka dalam satu lingkaran
- Di setiap zona, skrip loop melalui setiap catatan DNS tipe A atau AAAA dan memeriksa IP Publik dengan catatan
- Jika IP berbeda, ubahlah, jika tidak, lewati iterasi loop dan lanjutkan ke yang berikutnya
- Tertidur pada waktu yang ditentukan dalam konfigurasi
Instalasi dan pengaturan
Mungkin akan mungkin untuk membuat paket deb, tapi aku tidak kuat dalam hal itu, dan itu tidak rumit.
Saya menggambarkan proses secara rinci dalam README.md di
halaman repositori .
Tapi kalau-kalau, saya akan menjelaskan dalam bahasa Rusia secara umum:
- Pastikan Anda menginstal python3 dan python3-pip, jika tidak, instal (pada Windows, python3-pip diinstal dengan Python)
- Klon atau unduh repositori
- Instal dependensi yang diperlukan.
python3 -m pip install -r requirements.txt
- Jalankan skrip instalasi
Untuk Linux:
chmod +x install.sh sudo ./install.sh
Untuk Windows: windows_install.bat
- Edit file konfigurasi
Untuk Linux:
sudoedit /etc/zen-cf-ddns.conf
Untuk Windows:
Buka file zen-cf-ddns.conf di folder tempat Anda menginstal skrip.
Ini adalah file JSON biasa, tidak ada yang rumit dengan pengaturan - Saya secara khusus dijelaskan sebagai contoh 2 zona berbeda di dalamnya.
Apa yang tersembunyi di balik installer?
install.sh untuk Linux:
- Seorang pengguna dibuat untuk memulai daemon, tanpa membuat direktori home dan kemampuan login.
sudo useradd -r -s /bin/false zen-cf-ddns
- File log dibuat di / var / log /
- Kami membuat pemilik file log dari pengguna yang baru dibuat
- File disalin di tempatnya (config di / etc, file executable di / usr / bin, file service di / lib / systemd / system)
- Layanan diaktifkan
windows_install.bat untuk Windows:
- Salin file yang dapat dieksekusi dan file konfigurasi ke folder yang ditentukan pengguna
- Membuat tugas di penjadwal untuk menjalankan skrip saat startup sistem
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Setelah mengubah konfigurasi, skrip perlu direstart, di Linux semuanya sederhana dan familier:
sudo service zen-cf-ddns start sudo service zen-cf-ddns stop sudo service zen-cf-ddns restart sudo service zen-cf-ddns status
untuk Windows, Anda harus mematikan proses pythonw dan menjalankan kembali skrip (sangat malas bagi saya untuk menulis layanan di bawah Windows di C #):
taskkill /im pythonw.exe
Pada instalasi ini dan konfigurasi selesai, gunakan kesehatan Anda.
Bagi mereka yang ingin melihat bukan kode Python yang paling indah, berikut adalah
repositori di GitHub .
Lisensi MIT, jadi lakukan apa pun yang Anda inginkan dengan kebaikan ini.
PS: Saya mengerti bahwa itu ternyata sedikit penopang, tetapi berupaya dengan tugasnya dengan keras.
UPD: 10/10/2019 17:37
Saya menemukan satu masalah lagi, dan jika seseorang memberi tahu saya bagaimana menyelesaikannya, saya akan sangat berterima kasih.
Masalahnya adalah jika Anda menginstal dependensi tanpa sudo python -m pip install -r ..., maka dari bawah pengguna layanan modul tidak akan terlihat, tetapi saya tidak ingin memaksa pengguna untuk menginstal modul di bawah sudo, dan ini tidak benar.
Bagaimana cara membuatnya cantik?
UPD: 10/11/2019 19:16 Masalahnya diselesaikan menggunakan venv.
Ternyata beberapa perubahan. Rilis berikutnya adalah hari yang lain.