अजगर और docker में अपने सर्वर के समय पर नज़र रखने के लिए टेलीग्राम बॉट

1. हम एक टेलीग्राम बॉट बनाते हैं


पहले आपको एक बॉट लिखना होगा जो वांछित आईपी को पिंग करेगा और एक संदेश भेजेगा जब वांछित सेवा नेटवर्क से गायब हो जाती है, और फिर दिखाई देती है



मैं समझता हूं कि हब्र संसाधन के लिए, लेख काफी सरल है, और इसके अलावा, मैंने कोड की हर पंक्ति को चित्रित करने की कोशिश नहीं की, क्योंकि शुरुआती समझने के लिए सभी कोड काफी सरल हैं। मैंने यह तय करने का फैसला किया कि आपके बॉट को डॉकटर में बनाना कितना आसान है, जो उपयोगी काम करेगा।

1.1 एक विन्यास कैसे संग्रहित करें


मैंने कॉन्फ़िगर को एक यम फ़ाइल के रूप में संग्रहीत करने का निर्णय लिया।

botid:  userid: id_,    hosts: - "8.8.8.8:Google DNS Server" - "yandex.ru:Yandex domain name" 

आदेश में, बॉटिड एक टोकन है जो @ बीटफादर एक नया बॉट बनाते समय जारी करता है।

userid टेलीग्राम उपयोगकर्ता की आईडी है जो चैट में बॉट से संदेश प्राप्त करेगा। @Userinfobot का उपयोग करके प्राप्त किया जा सकता है

मेजबान वे सेवाएं हैं जो बॉट पिंग होंगी। आप एक आईपी पता और एक डोमेन नाम दोनों निर्दिष्ट कर सकते हैं। पते पर टिप्पणी एक बृहदान्त्र के माध्यम से इंगित की जाती है, इस टिप्पणी को पते के बजाय संदेश में प्रतिस्थापित किया जाएगा।

1.2 स्क्रिप्ट ही


सबसे पहले, होस्ट के लिए एक क्लास बनाएं।

 class address: def __init__ (self, address, comment): self.address = address self.comment = comment self.status = True 

पता एक आईपी या डोमेन नाम है।
टिप्पणी - yaml फ़ाइल से टिप्पणी।
स्थिति - नेटवर्क पर होस्ट या नहीं। डिफ़ॉल्ट ऑनलाइन है।

लिपि

 from telegram import Bot from pythonping import ping import time import yaml from libs.host import address def init(): """       ,  userid      set_hosts """ global bot, userid with open('/usr/src/app/config.yaml') as f: try: docs = yaml.load_all(f, Loader=yaml.FullLoader) for doc in docs: for k, v in doc.items(): if k == "botid": bot = Bot(v) elif k == "userid": userid = v elif k == "hosts": set_hosts(v) except yaml.YAMLError as exc: print(exc) def set_hosts(hosts): """          """ global hosts_list hosts_list = [] for item in hosts: ac = item.split(":") hosts_list.append(address(ac[0], ac[1])) def send_message(message): """    """ bot.send_message(userid, message, parse_mode='HTML', disable_web_page_preview=True) def ping_host(address): """  .     .    ,          .      ,       . """ if ping_url(address.address): if not address.status: address.status = True send_message(address.comment + " is up again") else: if (address.status): address.status = False send_message(address.comment + " is down") def ping_url(url): """  . Response list -    ping.      .    ,    . """ i = 0; try: response_list = ping(url) for response in response_list: if (not response.success): i += 1 if (i == 4): return False else: return True except Exception as e: send_message(str(e)) def main(): """  .  ,      . """ init() while True: for host in hosts_list: ping_host(host) time.sleep(30) if __name__ == '__main__': main() 

डॉकटर छवि को एक साथ रखना


मैं इस लेख में लिखा है कि कैसे स्थापित करें और क्या करें?

डॉकटराइल बनाने की जरूरत है। कोड फ़ोल्डर के बगल में, बॉट के स्रोत कोड को रखें।

 FROM python:buster RUN pip3 install python-telegram-bot pythonping pyyaml WORKDIR /usr/src/app COPY ./code/. . ENTRYPOINT ["python"] CMD ["main.py"] 

हम आधिकारिक अजगर भंडार से कर्ता की छवि को जोड़ते हैं। लाइब्रेरी स्थापित करें। वर्तमान फ़ोल्डर को / usr / src / app पर सेट करें। इस फ़ोल्डर में कोड कॉपी करें। स्टार्टअप में उपयोग की जाने वाली उपयोगिता अजगर होगी। CMD चलाने के लिए पैरामीटर पास करता है

अगला, आपको छवि को इकट्ठा करने और रिपॉजिटरी में डालने की आवश्यकता है

 docker build -t alsoeast/pingbot:1.0 . docker push alsoeast/pingbot:1.0 

डॉक चित्र बनाने के लिए, मैं डॉक-कंपोज़ का उपयोग करता हूं।

 version: '3' networks: default: external: name: network services: pingbot: container_name: pingbot image: alsoeast/pingbot:1.0 restart: always volumes: - ./config.yaml:/usr/src/app/config.yaml 

छवि रिपॉजिटरी से ली गई है, config.yaml फ़ाइल को माउंट किया गया है ताकि स्क्रिप्ट तर्क प्राप्त कर सके। यह केवल चलाने के लिए बनी हुई है

 docker-compose up -d 

अगर किसी को इसकी जरूरत है, तो बॉट डॉकटर हब पर उपलब्ध है।

UPD: 1.1 या नवीनतम छवि का एक नया संस्करण docker हब पर अपलोड किया गया है। कॉन्फ़िगरेशन फ़ाइल में, बॉटिड पैरामीटर को बॉटकी में बदल दिया गया, वैकल्पिक अंतराल पैरामीटर जोड़ा गया

Source: https://habr.com/ru/post/hi474434/


All Articles