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

다음 명령으로 이미지를 만들고 컨테이너를 시작합니다. 그리고 컨테이너 안으로 들어가

sehll
$ docker-compose up -d --build       # イメージの作成、コンテナの起動
$ docker-compose exec linebot sh     # コンテナ内に入る

2. 컨테이너 내에서의 설치 작업



다음 명령으로 패키지를 설치합니다. 가능하면 ctrl+d 로 컨테이너를 빠져나간다.

shell(컨테이너 내)
$ 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. 기타 파일 작성


npm start 에서 실행하는 명령을 package.json 의 script 란에 추가. index.js 를 실행하도록 설정한다.

package.json
  "scripts": {
-   "test": "echo \"Error: no test specified\" && exit 1"
+   "test": "echo \"Error: no test specified\" && exit 1",
+   "start": "node index.js"
  },

.env 파일 추가.

.env
LINE_CHANNEL_SECRET=[ラインチャンネルシークレット]
LINE_ACCESS_TOKEN=[ラインアクセストークン]

실행할 파일 index.js 추가. https://[アプリ名].herokuapp.com/bot/webhook 에 액세스하면 HTTP 응답 코드 200을 반환합니다. 응답 처리 등은 index.js에 기술된다.

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 추가.

.gitignore
npm-debug.log
node_modules
.env

6. heroku에 배포



# 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の立ち上げ

사이고에게



틀린 곳이 있으면 지적 부탁드립니다!

참고

좋은 웹페이지 즐겨찾기