Bot Telegram Siap Produksi yang Skalabel di Django

Ada banyak artikel di Habré tentang cara membuat bot Telegram yang paling sederhana dengan tombol menu dan logika, ada petunjuk tentang cara menerapkan semuanya. Pada artikel ini, saya akan menunjukkan kepada Anda cara membuat bot produksi yang dapat digunakan oleh ratusan ribu pengguna.





Halo semuanya! Nama saya Daniil Okhlopkov dan saya memiliki segerombolan bot telegram yang digunakan oleh lebih dari 300.000 orang secara total. Saat mengembangkannya selama setahun terakhir, saya menemukan setumpuk teknologi dan pendekatan yang tidak hanya memberi saya pengembangan yang nyaman, tetapi juga skalabilitas. Pada artikel kali ini, saya akan membagikan semua ilmu yang telah saya kumpulkan.





Tentang pengalaman saya

, "" , - stackoverflow. , *, , . , , . , !





GitHub , . , python-telegram-bot, Django, Celery, Postgres, Redis, Dokku, GitHub Actions . , .





Django?

: Django - ! ? :





  1. Django , . YCombinator , , - .





  2. - , . , : " ".





  3. Django . . .





, , hello-world, , , (, Telegram Bot API ). , - - , .





, background tasks. , . Django Celery. Redis, Django-celery-beat ( , ).





:

, . . "" ,





  1. ( , sqlite, in memory). , Postgres.





    1. , .





  2. - , .





    1. , , Sentry.





  3. CI, .





    1. GitHub Actions, Dokku git pull , - . .





  4. . - .





    1. polling , - ⬇️.





Telegram Bot API ( ): .





  1. Polling - , .





  2. Webhook - : URL .





, -, handlers, . , HTTPS , , , IP DNS . ngrok , , , .





polling - , Webhook : , , load balancer ( docker-compose, PaaS, Heroku, Google App Engine Digital Ocean App Platform).





Django Telegram bot

Django? view ( ), ( handlers - ) ( ).





Django Model . , - /start. , , . @classmethod



, User -.





, . Redis load balancers .... .





, , - . , , , . , - , ? .





Postgres Redis. HTTPs. load balancer . , , zero-downtime ?





. , (Google App Engine, Digital Ocean App Platform, Heroku). self-hosted (Dokku, CapRover). Self-hosted , - (, Digital Ocean), apt-get install 



.





Dokku?

Heroku . GitHub , . , , . , , , , , . .





, stackoverflow " ", " ", " https" . , .





.

: . , , . ! .





Heroku , , : , . ?





, Open Source self-hosted . Dokku. , UI one-click github integration, .





Heroku, Dokku , open-source Buildpacks, 2 HTTPS .





Dokku + Django

buildpacks , , ) ) . requirements.txt Procfile.





Dokku DOKKU_SCALE, . , worker=4, : Procfile worker ( , Celery worker), 4 , load balancer. ? .





Dokku , "" Postgres Redis, , DATABASE_URL



REDIS_URL



, settings.py, .





. CI , Main ssh git pull ( Dokku). GitHub Actions, .





, Dokku , , HTTPs, GitHub Actions , Wiki .






, - . , - , , . , .





? ? .








All Articles