docker+heroku(container registry)でline botを開発するための環境を構築する
概要
docker、heroku(container registry)を使用して、line botの開発環境を構築したため、その方法を共有する。
前提
line developersにアクセスし、チャンネルを作成し、ラインアクセストークン、ラインシークレットを取得する。ここでは、Message APIを用いる方法で作製すること。
参考記事
全体像
dockerにて開発環境を構築し、それをそのままherokuへデプロイすることで簡単にlinebotを実現することができる。ローカル上で開発テスト行うのであれば、push通知などであればherokuへデプロイしなくても実施はできる。
1. Dockerfile, docker-compose.ymlの作成
Dockerfile
# docker-hubからベースのdocker imageをpull
FROM node:14.5.0-alpine
# コンテナ内で作業するディレクトリを指定
WORKDIR /app
docker-compose.yml
version: "3.0"
services:
linebot:
build: .
restart: always
tty: true
ports:
- 1212:1212
volumes:
- .:/app
# docker-hubからベースのdocker imageをpull
FROM node:14.5.0-alpine
# コンテナ内で作業するディレクトリを指定
WORKDIR /app
version: "3.0"
services:
linebot:
build: .
restart: always
tty: true
ports:
- 1212:1212
volumes:
- .:/app
以下のコマンドでイメージ作成しコンテナを起動。そして、コンテナ内に入る
$ docker-compose up -d --build # イメージの作成、コンテナの起動
$ docker-compose exec linebot sh # コンテナ内に入る
2. コンテナ内でのインストール作業
以下のコマンドでパッケージをインストール。できたらctrl+d
でコンテナを抜ける。
$ npm init --yes # package.json作成
$ npm install --save express @line/bot-sdk # packageのインストール
3. Dockerfile,docker-compose.ymlの変更
Dockerfile
FROM node:14.5.0-alpine
# ワークディレクトリ
WORKDIR /app
# コンテナ内で必要なパッケージをインストール
COPY package.json .
RUN npm install
# ホスト側カレントディレクトリ内部をコンテナ側にコピー
COPY . .
# 起動
CMD npm start
docker-compose.yml
version: "3.0"
services:
linebot:
build: .
restart: always
tty: true
ports:
- 1212:1212
env_file:
- .env
volumes:
- .:/app
- /app/node_modules
entrypoint: >
sleep 86400
4. その他のファイル作成
FROM node:14.5.0-alpine
# ワークディレクトリ
WORKDIR /app
# コンテナ内で必要なパッケージをインストール
COPY package.json .
RUN npm install
# ホスト側カレントディレクトリ内部をコンテナ側にコピー
COPY . .
# 起動
CMD npm start
version: "3.0"
services:
linebot:
build: .
restart: always
tty: true
ports:
- 1212:1212
env_file:
- .env
volumes:
- .:/app
- /app/node_modules
entrypoint: >
sleep 86400
npm start
で実行するコマンドをpackage.json
のscript欄に追加。index.js
を実行するように設定する。
"scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "start": "node index.js"
},
.envファイルの追加。
LINE_CHANNEL_SECRET=[ラインチャンネルシークレット]
LINE_ACCESS_TOKEN=[ラインアクセストークン]
実行するファイルindex.js
の追加。https://[アプリ名].herokuapp.com/bot/webhook
へアクセスしたら、HTTPレスポンスコード200を返すとしている。応答処理などは、index.js
に記述する。
// モジュールのインポート
const server = require("express")();
const line = require("@line/bot-sdk"); // Messaging APIのSDKをインポート
// パラメータ設定
const line_config = {
channelAccessToken: process.env.LINE_ACCESS_TOKEN, // 環境変数からアクセストークンをセットしています
channelSecret: process.env.LINE_CHANNEL_SECRET // 環境変数からChannel Secretをセットしています
};
// Webサーバー設定
server.listen(process.env.PORT || 1212);
// ルーター設定
// https://[アプリ名].herokuapp.com/bot/webhookでアクセスすると実行する関数
server.post('/bot/webhook', line.middleware(line_config), (req, res, next) => {
res.sendStatus(200);
console.log(req.body);
});
5. gitで管理
gitの初期化。
$ git init
.gitignore
の追加。
npm-debug.log
node_modules
.env
6. herokuへのデプロイ
shell
# herokuにログイン
$ heroku login
# heroku container registryにログイン
$ heroku container:login
# herokuアプリの作成
$ heroku create
# herokuにログイン
$ heroku login
# heroku container registryにログイン
$ heroku container:login
# herokuアプリの作成
$ heroku create
herokuのホームページで作成したアプリにアクセスし、環境変数を設定する。
setting->cofing varsで.envで設定した環境変数を設定する。
デプロイは以下のコマンドで行う。$ heroku open
はなくてもよい。ファイルを編集した際は毎回以下のデプロイ作業を行う事。
# イメージをビルド(Dockerfileを実行)しcontainer registryにプッシュ
$ heroku container:push web
# herokuサーバー上でコンテナ起動
$ heroku container:release web
# アプリをブラウザで開き、エラーがねければOK
$ heroku open
7. line developerツールでの確認
line developersにアクセスし、前提で作成したチャネルのwebhookをオンにして、webhookURLにhttps://[アプリ名].herokuapp.com/bot/webhook
を設定し、検証を押して成功と表示されればOK!
アプリ名は、$ heroku open
を実行した際のURLを見たらわかる。
8. line botを追加
line developersにアクセスし、作成したbotのMessage APIタブのQRでbotを追加する。メッセージの送信に対しての処理は、index.js
で記述することができるため、以降はindex.js
を編集し、デプロイ作業を実施して開発を進めることができる。
herokuへデプロイせずに応答を確かめるには、dockerのコンテナ内に入り、$ node index.js
を実行する。
$ docker-compose exec linebot sh # コンテナの中に入る
$ node index.js # serverの立ち上げ
さいごに
間違っている個所があればご指摘おねがいします!
参考
Author And Source
この問題について(docker+heroku(container registry)でline botを開発するための環境を構築する), 我々は、より多くの情報をここで見つけました https://qiita.com/Yuki-TU/items/77e4abad25722ca66b92著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .