Comment déployer le bot Python Telegram à l'aide de Webhooks sur Google Cloud Platform
Au lieu de l'avant-propos

- Écrivez un bot de télégramme. Maintenant, même les écoliers écrivent », a-t-elle déclaré.
«Et pourquoi pas», ai-je alors pensé («Eh bien, eh bien», je dirais maintenant).
Nous nous sommes assis dans Bean et autour d'une tasse de café, nous avons discuté des possibilités de tester des idées avec des modèles d'intelligence artificielle sur un cercle d'amis proche et peu fréquent. Lena, mon ancienne collègue, et à tous égards pas une blonde qui venait de terminer ses études de magistrature, a raisonné comme suit. En créant un bot, vous pouvez économiser du temps et de l'énergie sur l'interface en vous concentrant sur le cœur avec l'apprentissage automatique. Il faut avouer qu'il était impossible de résister à une telle logique de «sportive, membre du Komsomol et simplement belle» en ce beau dimanche matin. C'est résolu. Bot télégramme signifie bot télégramme.
Tout d'abord, j'ai rampé sur Google et trouvé un grand nombre de liens "comment faire un bot en 30 minutes". Cela m'a tellement inspiré que je ne suis pas allé au-delà des noms et j'ai commencé à créer un noyau. Dans la toute première approximation, j'ai dû écrire un système de traitement des requêtes de recherche utilisant le NLP (traitement du langage naturel). L'écriture du noyau a pris un temps assez raisonnable (néanmoins, l'expérience de Coca-Cola ne peut pas être bue). Et quelques jours plus tard, j'étais prêt à emballer la première version de test du noyau dans quelques autres commandes d'envoi-réception en quelques heures, exécutant tout cela dans Telegram pour le bénéfice de mes amis. Mais ça y était.
Soudain, tout un tas de problèmes ont surgi. Après avoir passé quelques jours à chercher sur Internet et à parler avec des collègues de la boutique, j'ai réalisé que l'évidence n'est pas évidente, et une autre "instruction" ne fera pas de mal. Cet article est donc apparu.
Au lieu d'entrée. Bibliothèques
Il existe plusieurs bibliothèques Python pour les robots de télégrammes. Le télégramme lui-même fait référence à trois d'entre eux: python-telegram-bot , pyTelegramBotAPI , AIOGram . Des liens vers ces bibliothèques et des exemples dans d'autres langues sont disponibles sur le site Web de Telegram ici . Bien sûr, il y a toujours l'API Telegram elle-même . Au cours de mes expériences, j'ai essayé deux variantes de l'API Telegram et de pyTelegramBotAPI. Et alors arrêté à la seconde.
En général, les impressions des bibliothèques sont les suivantes. Tous sont très similaires, ce qui n'est pas surprenant. Python-telegram-bot, il me semble, possède la meilleure documentation de tous, bien que le travail sur celui-ci soit arrêté (j'espère que je me trompe). On peut voir que le travail continue sur pyTelegramBotAPI, une nouvelle fonctionnalité apparaît. AIOGram semble plus jeune et plus vert. Dans ce dernier, je n'aimais pas cela. Au lieu de la documentation sur les webhooks, il y avait un lien vers le site Web de Telegram. Mais tout coule, tout change. Et le choix final reste à faire.
Nous ne reviendrons pas sur la question des bibliothèques dans cet article.
Quant au code du bot lui-même, comme je l'ai déjà noté, il existe de nombreux manuels sur Internet consacrés à la création de programmes simples et plus complexes. Aux fins du présent article, cela n'est pas sans principes. Prenons par exemple deux exemples tirés du github officiel de pyTelegramBotAPI:
- Bot télégramme utilisant le sondage ;
- Bot télégramme utilisant webhook .
Les sujets les plus controversés avec les robots télégrammes sont les certificats SSL, les webhooks et la diploing. Autour de cela et concentrer notre attention. Ci-dessous, je vous donnerai des instructions étape par étape qui vous permettront de placer votre bot de télégramme sur l'un des meilleurs services cloud du monde de la manière la plus simple et la plus fiable dans les plus brefs délais (au moins la première année). La création de certificats SSL, leur enregistrement dans le télégramme et d'autres questions connexes seront également mises en évidence. Si nécessaire, je vous expliquerai pourquoi nous utilisons telle ou telle option, telle ou telle équipe.
Sondage vs Webhook

S'il n'y avait pas eu la confrontation entre sondage et webhook et quelques difficultés (partiellement artificielles) avec webhook, cet article n'aurait pas été nécessaire. Étant donné que cela est d'une importance fondamentale, regardons plus en détail.
Qu'est-ce qu'un bot et comment communique-t-il avec Telegram? De toute évidence, un bot est un programme qui s'exécute sur votre ordinateur ou serveur. Et la communication avec le télégramme se fait par l'envoi et la réception de messages. Et si tout est clair avec l'envoi de messages, une option est d'envoyer (l'adresse «où» nous le savons). Il existe deux options pour recevoir des messages de bot de Telegram.
Le premier est un sondage (traduction littérale du mot polling) du serveur Telegram pour les messages pour le bot. Le second est une «boîte aux lettres» avec une adresse IP (le webhook peut être traduit comme un piège Web), vers lequel arrivent les messages du serveur Telegram.
L'analogie la plus simple avec le vrai courrier. Laissez mail (bureau de poste) est le serveur Telegram, et vous êtes votre bot. Ensuite, dans le premier cas (scrutin), vous devez vous rendre à la poste pour la correspondance. Et si vous voulez recevoir des messages sans délai, vous n'aurez pas à y aller, mais vous ferez littéralement des va-et-vient sans répit. Comme nous le comprenons, vivre dans le courrier en attendant des messages est interdit! Dans le deuxième cas, vous indiquez votre adresse à la poste et attendez calmement la correspondance à la maison, en buvant du thé ou en fumant du bambou.
Bien sûr, pour une personne, la première option semble la plus grave. Mais, en parlant entre nous, si nous courons après les messages, nous envoyons un morceau de fer avec un code, alors nous ne devrions pas nous en soucier. Et il en serait ainsi, sinon pour un problème. De temps en temps, le courrier (le serveur Telegram) ferme parfois pour le déjeuner, puis se déplace. Et dans votre première option (sondage), une tragédie se produit, qui dans le monde réel des bots se termine par leur vol stationnaire et leur échec.
Dans le second cas, la «boîte aux lettres» avec l'adresse (webhook) ne se produit pas. Parce que ni vous, ni votre robot, n'allez nulle part, mais attendez simplement. Et peu importe où le bureau de poste a déménagé, car le facteur vous apporte du courrier.
Ainsi, en termes de quantité de code (voir lien ci-dessus), la première option semble plus simple. Et le second est plus logique, mais plus difficile. Pour sa mise en œuvre, vous devez obtenir une adresse, confirmer son authenticité et élever le serveur Web, auquel les messages du télégramme parviendront.
Bien sûr, pour la première option, il est possible d'ajouter la gestion des exceptions au code. Par exemple, si le courrier est fermé, attendez et attendez. Mais Internet prétend que tous les mêmes robots avec sondage sont juste pour jouer.
Au début, je ne pensais pas que le problème était si grave. Et il a fait une option avec sondage, suggérant qu'un jour je le réécrirai sur les webhooks. Mais cela n'a pas fonctionné. Sur mon ordinateur personnel avec macOS, le bot a fonctionné sans problème pendant une heure et deux (bien sûr, avec un VPN) et n'a pas planté. Mais dès que je l'ai transféré sur le serveur cloud sous Linux, cela ne pouvait pas fonctionner pendant 20 minutes. J'ai essayé de résoudre ce problème de différentes manières et paramètres, mais je n'ai reçu qu'un code d'erreur différent. Selawy, voici Telegram. Ayant perdu une journée, j'ai dû reprendre des webhooks sans tarder. Au final, je voulais lancer le bot sur le serveur maintenant, et non dans un an.
Réécriture de code sur le webhook
Le webhook n'est pas aussi effrayant qu'il est peint.
Si vous avez déjà un code bot avec interrogation, il ne sera pas difficile de le copier sur le webhook. Comparez les codes des exemples de la bibliothèque pyTelegramBotAPI. Vous trouverez l'intersection de code. Les lignes 13 à 25 du premier exemple sont les mêmes que les lignes 56 à 67 du deuxième exemple . Il s'agit d'une unité logique responsable du traitement des commandes, des messages et des réponses. Dans ce cas, l'exemple est trop simple, mais il reflète l'essentiel.
Ainsi, le bloc logique du bot doit rester inchangé et le reste doit être modifié en utilisant le code banal copier-coller en dehors du bloc logique du deuxième exemple (c'est-à-dire copier les lignes 1-55 et 70-87). Si vous regardez le code que vous copiez, vous pouvez facilement découvrir qu'en utilisant la bibliothèque aiohttp, votre bot installe un serveur http et commence à écouter sur le port alloué pour ce port, tandis que le module ssl Python est responsable du cryptage et des certificats. Outre aiohttp, il existe d'autres bibliothèques similaires, dont vous trouverez des exemples ici .
Alors. Nous avons un bot avec webhook. Il reste à le télécharger sur le serveur et à l'exécuter, recevant simultanément des données pour remplir les valeurs vides dans le code API_TOKEN, WEBHOOK_HOST, WEBHOOK_PORT, WEBHOOK_SSL_CERT, WEBHOOK_SSL_PRIV. Derrière chacune de ces valeurs se trouve une certaine procédure à signification secrète.
Enregistrer un bot dans Telegram
Commençons par le jeton de bot. Pour l'obtenir, accédez au messager Telegram et connectez-vous au bot @BotFather. Entrez la commande «/ newbot». En réponse, BotFather nous invite à entrer le nom et le nom d'utilisateur de notre bot et envoie un jeton convoité du formulaire «712308912: DLGSteczdUnPdnNYLzNikaGOhome7l9q3vova» (bien sûr, vous en aurez un autre). Nous sauvegardons le jeton, ne le montrez à personne. Dans le code, nous l'affectons à la variable API_TOKEN.
Où poster? Google Cloud Platform vs Heroku
Quelques mots sur les tourments du choix d'un service cloud. Il existe de nombreux exemples sur Internet où des robots télégrammes sont hébergés sur Heroku. Heroku est une plateforme PaaS (plateforme en tant que service). Vous téléchargez le code sur GitHub, et de là sur Heroku . Et votre robot commence à fonctionner immédiatement. Pas besoin d'installer le serveur, Python et les bibliothèques, tout a déjà été fait pour vous. Du moins, idéalement. Cette solution m'a également été recommandée par un de mes amis. Mais je l'ai refusé.
Si je comprends bien, le principal message pour les recommandations Heroku dans de nombreux manuels de «robots de 30 minutes» est la disponibilité d'un plan tarifaire gratuit sur Heroku. Mais, si vous regardez attentivement, il s'avère que ce plan est très limité et ne vous permettra pas de déployer un bot gratuit qui fonctionnerait jour et nuit.
Contrairement à Heroku, la plateforme Google Cloud Platform (GCP) offre une année complète de travail gratuit sur tous les services à moins de 300 $. Pour ce montant pour l'année, beaucoup de choses que vous pouvez essayer. À mon avis, c'est un cadeau magnifique, surtout pour ceux qui sont engagés dans la science des données. Et, bien sûr, GCP est aussi PaaS, une liste complète des services est ici . Il existe des solutions sans serveur, comme sur Heroku. J'ai choisi une voie plus conservatrice pour plus de contrôle à l'avenir, à savoir la solution serveur Compute Engine sur GCP.
Plateforme cloud Google
Projet, instance, IP statique, port
Créer un projet et un serveur
Nous allons à GCP, sélectionnez «Commencez gratuitement» et suivez les instructions. Si nous faisons tout correctement, nous aurons un compte d'un montant de 300 $ et même le premier projet créé. Nous sélectionnons ce projet ou en créons un autre dans le menu du haut, ce qui n'est pas difficile. Et puis allez dans l'onglet «Compute Engine / VM Instance» dans le menu latéral qui s'ouvre.
Cliquez sur «CRÉER UNE INSTANCE» et sélectionnez la configuration du serveur, par exemple, comme indiqué dans la capture d'écran ci-dessous. Vous pouvez choisir une micro configuration et cela ne vous coûtera que 4 $ par mois. Vous pouvez également mélanger, les fonds seront débités d'un cadeau de Google à 300 $.
En conséquence, nous obtenons.
Rendre l'adresse IP statique
Dans la colonne "IP externe", nous voyons l'adresse que nous conduisons dans la variable WEBHOOK_HOST dans notre bot (dans cet exemple, il s'agit de 35.224.231.90). Nous recevrons un certificat SSL à cette adresse ultérieurement. Si vous avez l'intention d'utiliser le bot pendant une longue période (même si vous changez le serveur dans GCP), alors je recommande de rendre cette adresse IP statique afin de la sauvegarder lors du passage d'une instance à une autre. Cela se fait dans la section «VPC / adresses IP externes».
Nous changeons le champ "Type" de "Éphémère" en "Statique", en donnant le nom à l'adresse statique afin que vous ne vous trompiez pas plus tard si vous avez une douzaine d'adresses IP plus tard.
Port ouvert
Pour que le webhook fonctionne correctement, nous devons ouvrir le port sur lequel Telegram va frapper. Actuellement (juillet 2019), Telegram prend en charge les ports suivants: 443, 80, 88, 8443. Plus de détails, vous pouvez voir le guide complet de Telegram sur les webhooks ici . Nous allons ouvrir le port 8443. Dans notre bot, cette valeur est déjà affectée à la variable WEBHOOK_PORT. Il reste à configurer la règle de pare-feu dans GCP pour notre instance de webhook-bot. Comment faire Allez dans l'onglet «Règles VPC / Firewall» et cliquez sur «CRÉER UNE RÈGLE DE PARE-FEU».
Et créez une règle, comme indiqué dans la capture d'écran ci-dessous.
Nous nous connectons au serveur, installons des bibliothèques
Ceci termine la configuration de base du serveur sur Google Cloud Platform. Nous avons obtenu un compte sur GCP, créé un projet, créé un serveur (instance) basé sur Ubuntu 19.04 dans le cadre du projet, réservé une adresse IP, ouvert le port 8443.
Il en reste peu. J'espère que nous pourrons nous passer d'une description détaillée de la partie d'installation de Python et des bibliothèques. Par conséquent, brièvement.
Allez dans l'onglet GCP "Compute Engine / VM Instance" et dans le champ "Connect" cliquez sur "SSH".
Un terminal devrait s'ouvrir sur votre ordinateur local avec accès à l'instance sur GCP. Il s'agit d'un environnement Ubuntu normal. Installez conda ou virtualenv , créez un environnement virtuel et installez Python 3 avec les bibliothèques principales. De plus, nous installons les bibliothèques nécessaires au fonctionnement de notre bot:
pip installer pyTelegramBotAPI
pip install aiohttp
Après l'installation, ne fermez pas le terminal, nous en aurons besoin.
Obtention d'un certificat SSL auto-signé pour IP
Je dois dire que sur Internet autour du sujet des certificats SSL pour Telegram est une horreur solide. Comme l'a dit Mikhail Lermontov à cet égard:
"Les chevaux mélangés en tas, les gens,
Et des volées de mille fusils
Fusionné en un long hurlement ... "
Si vous lisez ce qu'ils écrivent sur Internet, il s'avère que si le bot ne fonctionne pas sur les webhooks, alors les certificats mal reçus sont à blâmer. Et pourtant, ils ne peuvent pas être enregistrés sur ip. En général, Telegram n'accepte pas les certificats auto-signés. Et même s'il accepte le certificat, cela ne signifie pas que votre bot fonctionnera, et Telegram n'enverra même pas d'erreur.
Ce sont des histoires d'horreur. Pourquoi est-ce que j'écris ça? Outre le fait que ces histoires d'horreur m'ont coûté une autre journée perdue, j'ai même dû sauter de regarder "The Hobbit". Mon bot a d'abord refusé de travailler sur des webhooks. Cela s'est produit en raison de mes erreurs lors de son placement sur le serveur (alors je ne le savais pas). Mais à cause des histoires d'horreur ci-dessus, je cherchais le problème pas là, en me concentrant sur la résolution des problèmes avec les certificats SSL qui n'étaient pas là. Mais j'ai acquis une expérience inestimable. J'ai enregistré des certificats pour les années à venir à la fois sur les noms de domaine et sur ip, auto-signés et payés, à la fois sous la forme de deux fichiers et sous la forme de quatre. J'ai découvert quels certificats entrent et comment en faire des chaînes. J'espère que cela vous sera utile.
Une chose est bonne, vous n'avez pas besoin de monter sur ce râteau, je l'ai déjà fait pour vous. J'admets pleinement que comme il n'y a pas de «fumée sans feu», il y avait une raison pour de telles histoires d'horreur. Mais pour la journée actuelle, la situation semble s'être stabilisée.
À l'heure actuelle, nous recevrons un certificat SSL de la manière la plus pratique pour nous, à savoir sur ip (et non sur un nom de domaine), auto-signé (c'est-à-dire gratuitement) et ne coûtant qu'une seule ligne sans aucun site.
Dans le terminal (que nous n'avons pas encore fermé), préparez un répertoire séparé dans lequel nous enregistrerons le fichier de certificat et la clé privée. Allez dans ce répertoire et appelez-y la commande suivante.
$ openssl req -newkey rsa:2048 -sha256 -nodes -keyout url_private.key -x509 -days 3560 -out url_cert.pem
En réponse, vous recevrez des demandes pour remplir un certain nombre de champs simples. Remplissez-les dans l'exemple ci-dessous. Mais, bien sûr, indiquez correctement le code de votre pays, région, ville, nom de l'entreprise (le cas échéant), remplacez votre adresse IP et votre e-mail.
Par conséquent, vous obtiendrez deux fichiers dans le répertoire à partir duquel vous avez exécuté cette commande. Un fichier url_cert.pem est votre certificat et la deuxième clé privée est url_private.key. Dans le code bot, les variables WEBHOOK_SSL_CERT et WEBHOOK_SSL_PRIV leur sont respectivement attribuées. N'oubliez pas de saisir les chemins d'accès à ces fichiers avec les noms. Téléchargez des copies et conservez-les pour référence future.
Ne fermez pas le terminal.
Enregistrer le webhook dans Telegram
Enregistrement d'un webhook avec un certificat auto-signé
C'est peut-être la partie la plus excitante de «Que dira Telegram?». Sans aucun préambule, entrez simplement la commande suivante dans votre terminal. Remplacez l'adresse IP par la vôtre; ne touchez pas le port 8443. Insérez le jeton reçu de BotFather entre "/ bot" et "/ setWebhook") au lieu de YOUR-TOKEN. Exécutez la commande à partir du répertoire dans lequel les certificats sont stockés.
$ curl -F "url=https://35.224.231.90:8443" -F "certificate=@url_cert.pem" https://api.telegram.org/botYOUR-TOKEN/setWebhook
Si tout est correct, vous recevrez dans le terminal un message concis du télégramme indiquant que le webhook est installé.
Enregistrement d'un webhook avec le certificat «correct»
Si vous n'avez pas de certificat auto-signé, vous pouvez installer webhook avec la commande suivante directement depuis le navigateur.
https://api.telegram.org/botYOUR-TOKEN/setWebhook?url=https://YOUR.DOMAIN:8443/YOUR-TOKEN/
Veuillez noter que votre jeton est indiqué deux fois. De plus, il est important que YOUR.DOMAIN soit spécifié comme indiqué dans le certificat. Par exemple. J'ai enregistré le domaine mydreem.com, le bureau d'enregistrement m'a délivré un certificat SSL pour le domaine www.mydreem.com. Au lieu de YOUR.DOMAIN, vous devez spécifier le dernier www.mydreem.com.
Comment vérifier si le webhook est installé?
Vous pouvez vérifier si le webhook est installé à partir du navigateur avec la commande suivante:
https://api.telegram.org/botYOUR-TOKEN/getWebhookInfo
Cela fonctionne pour tous les cas. En réponse, vous devriez obtenir quelque chose comme ça au cas où le webhook est installé et le bot est en cours d'exécution:
{"ok":true,"result":{"url":"https://35.224.231.90:8443/712308912:DLGSteczdUnPdnNYLzNikaGOhome7l9q3vova/","has_custom_certificate":true,"pending_update_count":0,"max_connections":40}}
Ou comme ceci, lorsque le webhook est installé, mais que le bot ne fonctionne pas (ne fonctionne pas):
{"ok":true,"result":{"url":"https://35.224.231.90:8443/712308912:DLGSteczdUnPdnNYLzNikaGOhome7l9q3vova/","has_custom_certificate":true,"pending_update_count":2,"last_error_date":1564506964,"last_error_message":"Connection refused","max_connections":40}}
Comment réinitialiser le webhook?
Parfois, vous devrez peut-être modifier le certificat du bot, par exemple, en cas de déplacement vers un autre serveur (domaine). Ensuite, le jeton reste et le certificat change (le webhook est réinstallé). Ou il devient nécessaire d'exécuter le bot non pas sur le webhook, mais sur l'interrogation (si le webhook est installé, l'interrogation ne fonctionnera pas). Dans les deux cas, une commande qui «réinitialise» le webhook est utile:
https://api.telegram.org/botYOUR-TOKEN/setWebhook
Maintenant, tout est prêt pour télécharger le code sur le serveur et lancer le bot. Si vous êtes un maître du jeu sur la ligne de commande avec dix doigts, cela ne vous sera pas difficile. Et dans une minute, votre bot fonctionnera. Sinon, la section suivante aidera à faciliter quelque peu la tâche de téléchargement / téléchargement de fichiers sur votre serveur et leur gestion.
Cloud Shell ou «Drop Dead Beautiful»
C’est difficile pour moi, en tant que personne loin de l’administration système, de comprendre pourquoi, à l’ère du triomphe de l’intelligence artificielle, nous communiquons toujours avec les serveurs de ligne de commande comme jadis sur l’ordinateur EU / SM. Supposons qu'il existe des raisons inconnues des simples mortels. Ensuite, un phénomène comme Cloud Shell dans GCP doit être accepté avec une grande joie. Cet outil permet, certes avec des béquilles, mais de faciliter quelque peu le travail des non initiés. Bien que cela puisse faire du mal si vous ne connaissez pas certaines des nuances.
Cloud Shell permet d'accéder aux ressources cloud à partir de la ligne de commande directement depuis le navigateur. Vous pouvez facile gérez vos projets et ressources sans installer le SDK Google Cloud ou d'autres outils dans votre système (les deux dernières phrases sont extraites de leur page, c'est "facilement" barré par moi). Vous trouverez ici comment gérer vos projets à partir de la ligne de commande. Mais l'essentiel pour nous n'est pas ça. Lancez Cloud Shell (voir le gif ci-dessous, extrait de google).
Vous êtes connecté à Cloud Shell. Maintenant, si vous cliquez sur le bouton sous forme de crayon, «l'éditeur de texte en version bêta» s'ouvrira.
Dans le menu "Aide / À propos", vous pouvez découvrir qu'il s'agit de "theia-editor-for-cloudshell-preview 0.0.1". À la fin de l'article, je ne vais pas me plonger dans les fonctionnalités de travailler avec cet éditeur. Je ne soulignerai que les points clés. Ce n'est pas seulement un éditeur pour plusieurs langues (vérifié uniquement avec Python), mais aussi un gestionnaire de fichiers. Vous pouvez facilement organiser le partage de fichiers entre Cloud Shell et votre ordinateur local. Vous pouvez transférer des fichiers et des répertoires dans l'espace Cloud Shell avec votre souris.
Veuillez noter que je n'ai écrit nulle part au-dessus du fait qu'en utilisant l'éditeur, vous pouvez modifier et gérer des fichiers sur votre serveur (instance). Mais même cela suffit pour nous faciliter la vie. Et plus à ce sujet ci-dessous. Et maintenant, je vais vous dire quelque chose d'important à propos de Cloud Shell. Cela doit être compris pour ne pas entrer dans le pétrin, comme cela m'est arrivé.
Cloud Shell est un serveur basé sur Debian avec 5 Go d'espace disque et 1,7 Go de RAM. Certains logiciels y sont déjà préinstallés (dont Python). Cloud Shell peut facilement être confondu avec votre instance, installez conda dessus, créez env et exécutez le bot. Et, si le bot interroge, cela fonctionnera. Si sur le webhook, cela ne fonctionnera pas, car tous les ports sur Cloud Shell sont fermés! Et combien n'ouvrent pas de ports sur l'instance, ils n'apparaîtront pas sur Cloud Shell.
En raison de mon inexpérience juvénile et de ma négligence, je suis tombé dans ce piège et j'ai essayé pendant longtemps de comprendre pourquoi Telegram ne voyait pas mon bot avec un webhook. Ensuite, j'étais très contrarié. Mais la femme s'est réchauffée et les fils ont rassuré, et cet article est apparu.
Soit dit en passant, Cloud Shell existe en dehors de l'espace et du temps (une blague proche de la vérité). Si vous supprimez toutes les instances et tous les projets de votre domicile, votre Cloud Shell continuera d'exister pendant 120 jours supplémentaires avec tout ce que vous y aurez téléchargé. Ne confondez pas cela avec la sauvegarde de vos serveurs.
Alors. Averti, puis armé. Et maintenant, nous pouvons parler de commodités et apprendre quelques commandes utiles.
Par exemple, si vous souhaitez utiliser Cloud Shell comme terminal pour accéder à votre serveur (par exemple, webhook-bot), vous devez activer votre instance sur la ligne de commande:
$ gcloud compute ssh webhook-bot --zone us-central1-a
Après cela, vous vous retrouvez sur la ligne de commande de votre serveur. Vous pouvez revenir à Cloud Shell avec la commande «exit». Supposons que vous souhaitiez copier certains fichiers de Cloud Shell vers une instance. Pour ce faire, à l'invite de commandes Cloud Shell (pas une instance), tapez la commande suivante:
$ gcloud compute scp --recurse ~/telebot/my_favorite_robot.py webhook-bot:~/telebot --zone us-central1-a
Si vous modifiez la source avec la destination, la copie de l'instance vers Cloud Shell aura lieu. Dans l'exemple ci-dessous, nous copions le fichier «ex1.py» du répertoire «/ examples» du serveur «webhook-bot» dans le répertoire «/ telebot2» du Cloud Shell:
$ gcloud compute scp --recurse webhook-bot:~/examples/ex1.py --zone us-central1-a ~/telebot2
Ces commandes et d'autres commandes de partage de fichiers peuvent être trouvées ici . Vous pouvez échanger non seulement des fichiers, mais aussi des répertoires entiers. En conséquence, nous obtenons le schéma suivant qui nous facilite la vie. À partir de l'ordinateur local, nous copions les fichiers en cliquant sur quelques boutons de la souris dans Cloud Shell via l'éditeur de gestionnaire de fichiers "theia-editor-for-cloudshell-preview 0.0.1". Et puis nous redirigeons cela vers notre serveur (instance) avec la ligne de commande. Si nous devons modifier rapidement quelque chose, nous pouvons le faire dans le même éditeur dans Cloud Shell et télécharger des fichiers avec la même commande sur le serveur. Cela se révèle assez rapidement.
Je crois qu'il existe des moyens plus élégants et pratiques d'échanger et de gérer des fichiers pour un serveur cloud sur GCP à tous égards (sans installer de programmes supplémentaires sur l'ordinateur local). Peut-être via Cloud Storage . Franchement, je n'ai passé que quelques heures à chercher et à expérimenter sur cette question. Par conséquent, je vous serais reconnaissant de partager vos idées ou vos solutions de travail dans les commentaires.
Alors. Nous avons téléchargé les fichiers sur le serveur (instance). Et, si vous n'avez pas encore lancé le bot, il est temps de le faire en allant sur le terminal du serveur, en activant l'environnement virtuel nécessaire et en tapant une commande comme "python my_webhook_bot.py". Tout devrait fonctionner. Pour que le bot continue de fonctionner lorsque le terminal est fermé, il doit être lancé en arrière-plan. Par exemple, «nohup python my_webhook_bot.py &». La quête pour faire sortir le processus de l'arrière-plan et le terminer, je vous laisse, à moins, bien sûr, que vous le sachiez déjà.
Conclusion
J'espère que cet article vous a été utile, il a permis de gagner du temps et d'éviter les erreurs que j'ai faites lors de l'écriture d'un bot de télégramme avec des webhooks et de le placer sur le serveur. Tout ce qui était décrit dans l'article, je suis passé par moi-même, et au moment de la rédaction, juillet-août 2019, ça fonctionnait comme ça. Je tiens à exprimer une gratitude particulière à Mikhail Krutikov pour avoir navigué conjointement sur les étendues des services GCP et pour avoir aidé à réaliser un certain nombre de vérités importantes. Je suis ouvert aux questions, aux discussions et je serai reconnaissant pour les conseils dans les commentaires de cet article. Ou n'hésitez pas à m'écrire dans Telegram @Eduard_Lanchev .
Jusqu'au dernier moment, la question était ouverte pour moi de savoir s'il fallait donner un lien vers mon bot de télégramme. Des amis m'ont convaincu que ça valait le coup. Vous pouvez discuter avec mon bot sur @AelitaSoccerBot . Le bot est au tout début du voyage et beaucoup de travail reste à faire. Par conséquent, écrivez, si quelque chose ne va pas, écrivez si vous voulez partager votre expérience ou donner des conseils. Ma gratitude n'aura pas de limites dans des limites raisonnables. Remarque Fin 2019, le bot était désactivé en raison du manque de temps pour son support et son développement.
Et au final, je souhaite plein succès à tous les botovods et à mes collègues, datacientists!
Liens utiles
- API Telegram Bot
- Exemples de code de bot
- python-telegram-bot
- pyTelegramBotAPI
- AIOGram
- ssl - wrapper TLS / SSL pour les objets socket
- Heroku
- Plateforme cloud Google
- Moteur de calcul Google
- Marvin's Marvelous Guide to All Things Webhook
- Conda
- Virtualenv
- Coquille de nuage
- L'outil de ligne de commande gcloud compute
- Transfert de fichiers à l'aide de l'outil de ligne de commande gcloud
- Stockage cloud Google