Pages principalement référencées
https://devcenter.heroku.com/articles/container-registry-and-runtime
https://github.com/line/line-bot-sdk-python
Je pense que si vous déployez sur Heroku normal, vous allez pousser requirements.txt et procfile, mais si vous pouvez créer un environnement avec Docker, il sera plus facile de l'utiliser, alors créez un environnement en utilisant Docker. Je fais.
linebot │ .dockerignore │ Dockerfile.heroku │ └─app │ bot.py
Dockerfile.heroku
FROM kyobad/miniconda3-alpine:latest
MAINTAINER K.Kato
RUN pip install --upgrade pip \
&& conda install -y flask \
&& pip install flask gunicorn line-bot-sdk \
&& adduser -D botter \
&& mkdir /home/botter/app
USER botter
COPY ./app /home/botter/app
WORKDIR /home/botter/app
CMD gunicorn -b 0.0.0.0:$PORT bot:app --log-file=-
bot.py
###Ceci est une copie du SDK officiel###
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
app = Flask(__name__)
line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_CHANNEL_SECRET')
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text))
if __name__ == "__main__":
app.run()
Dans Dockerfile, nous construisons l'environnement pour nous-mêmes. Vous pouvez le changer librement, mais sachez que seul le port ne sera pas reconnu par Heroku à moins que vous ne le définissiez sur `` $ PORT ''.
https://www.heroku.com/home Souvenez-vous du nom de l'application que vous avez créée (vous pouvez également créer une application en utilisant cli)
De là, je vais travailler avec cli
Tout d'abord, connectez-vous au registre avec heroku container: login '' Ensuite, créez une image avec
docker -f Dockerfile.heroku build ''. Le nom de l'image sera modifié plus tard, alors n'hésitez pas à le nommer.
Après avoir créé l'image, réécrivez le nom de l'image pour pousser vers Heroku
docker tag <image> registry.heroku.com/<app>/<process-type>
Ici, <app> '' est le nom de l'application dans heroku, et
Cela lancera le conteneur avec l'URL spécifiée! Pratique! Mais ça ne marche toujours nulle part
Étant donné que la clé d'accès et la clé secrète ne sont pas solides dans le code, définissez à l'aide du cli d'heroku
heroku config:set ACCESS_TOKEN=hogehoge --app appname
Et ainsi de suite, définissez les variables d'environnement depuis la console.
Lorsque cela est fait, le retour du perroquet doit être terminé
Recommended Posts