Djangoのスケーラブルな本番対応Telegramボット

メニューボタンとロジックを備えた最も単純なTelegramボットを作成する方法については、Habréに関する記事がたくさんあり、すべてをデプロイする方法についての説明があります。この記事では、数十万人のユーザーが使用できる本番ボットの作成方法を紹介します。





みなさん、こんにちは!私の名前はダニイルオクロプコフです。合計30万人以上が使用するテレグラムボットの群れがあります。過去1年間にそれらを開発している間、私は快適な開発だけでなくスケーラビリティも提供するテクノロジーとアプローチのスタックに到達しました。この記事では、私が蓄積したすべての知識を共有します。





私の経験について

, "" , - 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