[PYTHON] Développement LINEbot, je souhaite vérifier le fonctionnement dans l'environnement local

Cet article ** Poussez en quelque sorte sur heroku chaque fois que je vérifie l'opération! !! ** Pour ceux qui pensent.

Environnement d'exploitation

Signification de l'utilisation d'heroku

Avant de résoudre le problème, réfléchissez aux raisons pour lesquelles vous utilisiez heroku en premier lieu. LINEbot et heroku étaient connectés via un jeton d'accès, une clé secrète et une ** URL de webhook **. "Figure" Une fois que l'application heroku est publiée (déployée), elle peut avoir une URL (~ herokuapp.com). C'est celui que j'utilise comme ** URL du webhook **. J'aimerais pouvoir ** préparer cette URL de webhook moi-même **, mais je ne peux pas ** facilement **. Je n'avais donc pas d'autre choix que de déployer et d'utiliser heroku pour obtenir l'URL de l'application (mais pas seulement).

Alors que faire

** Publiez votre hôte local ** vers l'extérieur ** sans utiliser heroku. En faisant cela, vous pouvez préparer une URL de webhook. (Je me demande s'il est sûr de publier localhost, mais je vais le laisser.) L'outil que j'utilise est ** ngrok **.

Comment faire

Téléchargez le fichier zip avec le bouton rouge sur site officiel de ngrok Screenshot from 2020-02-19 03-45-22.png

Ensuite, utilisez la commande suivante pour décompresser et vérifier la version.

installation de ngrok


cd ~/Downloads
unzip ngrok-stable-linux-amd64.zip
sudo cp ngrok /usr/bin/
ngrok version

Vous pouvez maintenant utiliser ngrok. Lors de l'utilisation réelle

Publié en externe sur ngrok


ngrok http [numéro de port]

Le [numéro de port] du serveur local est exposé à l'extérieur.

résultat de l'exécution ngrok


ngrok by @inconshreveable    (Ctrl+C to quit)
Session Status                online
Session Expires               7 hours, 59 minutes
Version                       2.3.35
Region                        United States (us)
Web Interface                 http://127.0.0.1:☓☓☓☓
Forwarding                    http://☓☓☓☓☓☓☓☓.ngrok.io -> http://localhost:5000 
Forwarding                    https://☓☓☓☓☓☓☓☓.ngrok.io -> http://localhost:5000
Connections
ttl     opn     rt1     rt5     p50     p90
0       0       0.00    0.00    0.00    0.00  

L'URL lorsque https: // ☓☓☓☓☓☓☓☓.ngrok.io à côté de Forwarding expose localhost au monde extérieur (le numéro de port est 5000). Utilisez ceci comme une URL ** webhook! ** **

.env est un fichier qui définit les variables d'environnement, alors ne le poussez pas sur GitHub. Pour éviter de pousser, découvrez comment utiliser le fichier .gitignore.

.env


LINE_CHANNEL_ACCESS_TOKEN = ☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓
LINE_CHANNEL_SECRET = ☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓

・ ** Exécutez main.py ** Préparez deux terminaux et exécutez à nouveau ngrok sur un. (Ngrok associe une URL différente à chaque fois qu'elle est exécutée, donc la valeur devrait avoir changé plus tôt). Avec cette exécution, l'URL du webhook des développeurs LINE

https://☓☓☓☓☓☓☓☓.ngrok.io/callback

Réglez sur (https!). Enfin, exécutez main.py dans un autre terminal comme suit.

main.Exécuter py


pipenv shell //Dans un environnement virtuel
pipenv run python3.8 main.py

Espérons que l'exemple fonctionnera.

** En cas d'erreur ** Error: the command python3.8 could not be found within PATH or Pipfile's [scripts]. Si vous obtenez une erreur comme celle ci-dessus Changez python3.8 pour celui qui convient à votre environnement.

main.Exécuter py


pipenv run python main.py

Par exemple, python ou python3.

Résumé

J'ai pu confirmer l'opération localement sans pousser à chaque fois à heroku. Modifier main.py ⇒ Exécuter ⇒ Il suffit d'éditer, le développement est donc fluide.

Cependant, ** ngrok modifie l'URL à chaque fois qu'elle est exécutée **, vous devez donc modifier l'URL du webhook des développeurs LINE à chaque fois que vous arrêtez ngrok. De plus, je pense qu'exposer localhost à l'extérieur ** est mauvais pour la sécurité ** (je ne connais pas les détails).

c'est tout!

Article de référence

Il semble que ngrok soit sûr ou dangereux, gratuit ou payant, et ainsi de suite. Vérifier les actions autour du webhook sur l'hôte local ngrok est trop pratique Utilisez ngrok de la manière la plus sûre possible (authentification de base)

Recommended Posts

Développement LINEbot, je souhaite vérifier le fonctionnement dans l'environnement local
Je veux afficher la progression en Python!
Je veux écrire en Python! (1) Vérification du format de code
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
Je souhaite créer facilement un environnement de développement basé sur un modèle
Je veux écrire en Python! (3) Utiliser des simulacres
Je veux utiliser le jeu de données R avec python
Je veux éviter les problèmes de saisie lors du débogage de l'exemple de vérification des compétences de Paiza dans un environnement local tel que Jupyter [Python]
Je veux obtenir des informations sur le fonctionnement de Yahoo Route
Je veux rendre le type de dictionnaire dans la liste unique
Je veux aligner les nombres valides dans le tableau Numpy
Je ne voulais pas écrire la clé AWS dans le programme
Je veux utiliser des rails avec des rails même dans un environnement vagabond
Je veux faire de la deuxième ligne le nom de la colonne dans pandas
Je veux réussir le test G dans un mois Jour 1
Je veux vérifier la position de mon visage avec OpenCV!
Je veux connaître la population de chaque pays du monde.
Je veux épingler Spyder à la barre des tâches
Je veux sortir froidement sur la console
Je veux imprimer dans la notation d'inclusion
Je veux gérer la rime part1
Je veux gérer la rime part3
Je veux créer un environnement Python
Je veux afficher la barre de progression
Je veux intégrer Matplotlib dans PySimpleGUI
Je veux gérer la rime part2
Je veux gérer la rime part5
Je veux gérer la rime part4
Je veux changer la couleur en cliquant sur le point de dispersion dans matplotlib
Comment vérifier le GAE local à partir du navigateur iPhone dans le même LAN
Je souhaite séparer le traitement entre le temps de test et l'environnement de production
[Langage C] Je souhaite générer des nombres aléatoires dans la plage spécifiée
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Je veux expliquer en détail la classe abstraite (ABCmeta) de Python
Je souhaite trier une liste dans l'ordre des autres listes
Je souhaite utiliser Django Debug Toolbar dans les applications Ajax
Maintenance de l'environnement réalisée avec Docker (je souhaite post-traiter GrADS en Python
Je souhaite laisser une commande arbitraire dans l'historique des commandes de Shell
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Utilisons la VM NAOqi OS. Je veux résoudre les dépendances avec pip même dans le développement Pepper
Je veux charger le projecteur pytest en tant que bibliothèque ailleurs (pytest peut ne pas exister dans l'environnement)
Je souhaite utiliser l'environnement de bureau d'Ubuntu même sur Android pour le moment (entrée version japonaise de Termux dans l'environnement de bureau)
Introduction à Python Préparons l'environnement de développement
Je veux corriger Datetime.now dans le test de Django
Je veux créer une fenêtre avec Python
Quoi qu'il en soit, je veux vérifier facilement les données JSON
Je veux gérer la rime part7 (BOW)
Je souhaite stocker les informations de la base de données dans la liste
Je veux fusionner des dictionnaires imbriqués en Python
De 0 à la construction de l'environnement de développement Django à l'exploitation de base
Je souhaite personnaliser l'apparence de zabbix
Je souhaite utiliser la fonction d'activation Mish
Je veux visualiser où et combien de personnes se trouvent dans l'usine
Je veux créer un bel environnement de développement Python pour mon nouveau Mac
[Django memo] Je souhaite définir à l'avance les informations de l'utilisateur connecté dans le formulaire.
Je souhaite définir un cycle de vie dans la définition de tâche d'ECS
Je souhaite voir une liste de fichiers WebDAV dans le module Requêtes
Je souhaite stocker les résultats de% time, %% time, etc. dans un objet (variable)