GitHub+Docker Hub+Azure Webapp for Container로 LINE Bot을 만드는 방법

사용하는 것



이 기사에서는 다음 서비스와 도구를 사용하여 LINE Bot을 이동합니다.
  • GitHub
  • 소스 보관소

  • Docker Hub
  • 소스에서 빌드 한 컨테이너 이미지를 넣는 곳

  • Azure Webapp for Container
  • 컨테이너 이미지 이동

  • yeoman
  • 템플릿 소스 생성 도구
  • ぇtps://이오오만. 이오/

  • generator-line-bot
  • yeoman 용 LINE Bot 템플릿
  • htps : // 기주 b. 코 m / 케나 카무 / 게 네라와 r- 네보 t


  • 구축 절차



    1. yeoman & generator-line-bot 설치



    아래 명령으로 yeoman과 generator-line-bot을 설치합니다. 만약 nodejs 환경이 없다면 먼저 준비하십시오.
    npm install -g yo
    npm install -g generator-line-bot
    

    2. LINE Bot 템플릿 생성



    ↑로 설치한 yeoman & generator-line-bot을 사용해 LINE Bot 템플릿을 작성합니다. 여기에서는 소스를 nodejs로 생성하고 있습니다.
    yo line-bot mybot --nodejs
    

    명령을 실행하면 Channel Secret과 Channel Access Token을 듣습니다만, 여기에서 지정한 값은 사용하지 않는 &GitHub에 올려서는 안 되는 문자열이므로, 미입력 그대로 하는 등 적당하게 설정해 둡니다.

    3. Dockerfile 만들기



    만든 템플릿을 Docker 이미지로 빌드하기 위한 Dockerfile을 만듭니다. (아래 샘플)
    FROM node:11.6.0-alpine
    
    ARG CHANNEL_ACCESS_TOKEN
    ARG CHANNEL_SECRET
    
    WORKDIR /var/opt/mybot
    ADD mybot/index.js .
    ADD mybot/package-lock.json .
    ADD mybot/package.json .
    ADD mybot/static ./static
    RUN npm install
    
    ENV CHANNEL_ACCESS_TOKEN ${CHANNEL_ACCESS_TOKEN}
    ENV CHANNEL_SECRET ${CHANNEL_SECRET}
    EXPOSE 3000
    
    CMD ["npm", "start"]
    

    4. GitHub 리포지토리 생성



    GitHub에 소스를 저장하는 리포지토리를 만듭니다.


    5. Docker Hub 리포지토리 생성 및 자동 빌드 설정



    Docker Hub에서 LINE Bot의 컨테이너 이미지를 게시하기 위한 리포지토리를 만듭니다.
    이 때 ↑의 4단계에서 작성한 GitHub 리포지토리에 대한 자동 빌드 설정을 해 둡니다.


    6. 생성한 소스를 GitHub 리포지토리에 push



    아래 명령으로 작성한 소스와 Dockerfile을 푸시합니다.
    git init
    git remote add origin https://github.com/stakagi/linebot.git
    echo node_modules >> .gitignore
    git add -A
    git commit -m "add mybot"
    git push -u origin master
    

    푸시 후 Docker Hub의 저장소를 보면 자동 빌드가 실행되고 새로운 컨테이너 이미지가 만들어집니다.

    7. Azure Webapp for Container 만들기



    Azure 포털에서 Azure Webapp를 만듭니다.
    세세한 설정은 생략합니다만, 이 설정에서는 「OS」는 Linux 「공개」는 Docker 이미지를 선택해, 컨테이너의 구성으로부터↑의 순서 5에서 작성한 리포지토리의 latest 이미지를 사용하도록 해 둡니다.

    //TODO 스크린샷 추가

    덧붙여서 terraform으로 만드는 경우는 ↓ 이런 느낌입니다.
    provider "azurerm" {
      version = "=1.21.0"
      subscription_id = "<<Set your subscription id>>"
    }
    
    variable "channel_access_token" {}
    variable "channel_secret" {}
    
    resource "azurerm_resource_group" "default" {
      name     = "linebot"
      location = "Japan East"
    }
    
    resource "azurerm_app_service_plan" "default" {
      name                = "${azurerm_resource_group.default.name}-plan"
      location            = "${azurerm_resource_group.default.location}"
      resource_group_name = "${azurerm_resource_group.default.name}"
      kind                = "Linux"
      reserved            = "true"
    
      sku {
        tier = "Basic"
        size = "B1"
      }
    }
    
    resource "azurerm_app_service" "default" {
      name                = "${azurerm_resource_group.default.name}-appservice"
      location            = "${azurerm_resource_group.default.location}"
      resource_group_name = "${azurerm_resource_group.default.name}"
      app_service_plan_id = "${azurerm_app_service_plan.default.id}"
      https_only          = "true"
    
      app_settings {
        CHANNEL_ACCESS_TOKEN                = "${var.channel_access_token}"
        CHANNEL_SECRET                      = "${var.channel_secret}"
        BASE_URL                            = "https://${azurerm_resource_group.default.name}-appservice.azurewebsites.net"
        WEBSITES_ENABLE_APP_SERVICE_STORAGE = "false"
        DOCKER_ENABLE_CI                    = "true"
        DOCKER_REGISTRY_SERVER_URL          = "https://index.docker.io"
      }
    
      site_config {
        linux_fx_version = "DOCKER|shunichitakagi/linebot:latest"
        always_on        = "true"
      }
    
      identity {
        type = "SystemAssigned"
      }
    }
    

    8. LINE Bot 계정 생성 및 Webhook 설정



    ぇぺぺrs. 네. 비 · 자 / LINE Bot 계정을 만듭니다.
    생성이 끝나면 해당 LINE Bot의 채널 기본 설정 화면에서 Webhook URL에 대해 ↑의 7단계에서 만든 Azure Webapp URL +/callback을 설정합니다.

    //TODO 스크린샷 추가

    9. Azure Webapp for Container에 대한 토큰 설정



    Azure 포털로 돌아가서 7단계에서 만든 Webapp의 애플리케이션 설정 화면을 열고 애플리케이션 설정 항목에 다음 두 가지 설정을 추가합니다.
  • CHANNEL_ACCESS_TOKEN
  • 채널 기본 설정 화면의 "액세스 토큰 (긴 기간)"값 설정

  • CHANNEL_SECRET
  • 같은 화면의 "Channel Secret"값 설정


  • //TODO 스크린샷 추가

    10. Azure Webapp for Container에 자동 배포를 위한 Webhook 설정



    Docker Hub에 새 이미지가 푸시되면 해당 이미지를 자동으로 Azure Webapp for Container에 배포하므로 Docker Hub에 Azure Webapp의 Webhook을 설치합니다.

    //TODO 스크린샷 추가



    이상의 설정을 실시하는 것으로, GitHub에 소스를 푸시하면 자동적으로 LINE Bot가 갱신되는 구조가 완성됩니다.

    좋은 웹페이지 즐겨찾기