Meshblu에서 오픈 소스 IoT 시작하기 - Part4: Hubot with Slack on Docker

지금까지에 Raspberry Pi와 환경 센서에서 측정 한 데이터를 Meshblu MQTT 브로커에 게시 한 후 freeboard 대시 보드에 표시했습니다. 이번에는 Hubot슬랙을 사용하여 대화식 인터페이스를 추가하려고합니다. Slack은 현대적인 UI로 Webhook이나 다른 웹 서비스와의 통합이 쉽기 때문에 편리하게 사용할 수 있습니다.

Hubot 및 Slack 설정



Slack의 Integration 페이지 https://{teamdomain}.slack.com/services/new에서 Hubot을 선택하고 API Token를 만듭니다. 현재는 Slack과 Hubot의 통합에 필요한 정보는 이 API Token만이 되어 매우 간단합니다.



bot의 이름을 지정하여 아이콘을 변경할 수 있습니다. 이번에는 avodado라고 명명했습니다.

프로젝트



이번에 작성한 프로젝트의 디렉토리 구성입니다. 리포지토리는 여기입니다.
$ cd ~/node_apps
$ git clone https://github.com/IDCFChannel/docker-hubot-slack
$ cd docker-hubot-slack
$ tree
.
├── Dockerfile
├── README.md
├── docker-compose.yml
├── docker-compose.yml.default
├── redis
└── scripts
    └── hello.coffee

Dockerfile



기본 이미지는 공식 io.js을 사용합니다. Hubot의 작동에 필요한 기본 npm은 전역에 root로 설치됩니다. Docker 이미지 안에 bot 프로젝트를 Yeoman으로 작성해 둡니다. 컨테이너의 scripts 디렉토리는 Docker 호스트의 디렉토리를 마운트하고 사용합니다.

이번에는 단순히 scripts 디렉토리 아래에 CoffeeScript 파일을 직접 넣기 만하면 external-scripts.json을 사용하지 않습니다.

~/node_apps/docker-hubot-slack/scripts/Dockerfile
FROM iojs:2.3
MAINTAINER Masato Shimizu <[email protected]>

RUN mkdir -p /app
WORKDIR /app

RUN adduser --disabled-password --gecos '' --uid 1000 docker && \
    chown -R docker:docker /app

RUN npm install -g hubot coffee-script yo generator-hubot

USER docker
RUN yes | yo hubot --defaults && \
    npm install --save hubot-slack mqtt

docker-compose.yml



docker-compose.yml.default를 이름 바꾸고 사용합니다.
$ mv docker-compose.yml.default docker-compose.yml

Docker 이미지의 /app 디렉토리에는 Yeoman을 사용하여 bot를 만들고 있습니다. scripts 디렉토리를 Docker 호스트에서 편집할 수 있도록 마운트합니다. 환경 변수는 테스트를 위해 HUBOT_LOG_LEVEL을 디버그 레벨로 설정하고 HUBOT_SLACK_TOKEN은 Slack의 Integration 페이지에서 얻은 Hubot의 API Token을 채웁니다.

또한 Hubot의 동작에는 Redis가 필요하므로 redis 서비스를 추가하여 npm 서비스에 link합니다.

~/node_apps/docker-hubot-slack/scripts/docker-compose.yml
npm:
  build: .
  volumes:
    - ./scripts:/app/scripts
    - /etc/localtime:/etc/localtime:ro
  ports:
    - 8089:8089
  environment:
    - PORT=8089
    - REDIS_URL=redis://redis:6379
    - HUBOT_LOG_LEVEL=debug
    - HUBOT_SLACK_TOKEN=xxx
  links:
    - redis
  command: ./bin/hubot -a slack
redis:
  image: redis
  volumes:
    - ./redis:/data
    - /etc/localtime:/etc/localtime:ro

사용법



빌드 및 실행



Docker 이미지를 빌드합니다. npm 서비스를 빌드하고 up합니다.
$ cd ~/node_apps/docker-hubot-slack
$ docker-compose build npm
$ docker-compose up npm

scripts/hello.coffee


hello 라고 bot에 발언하면, Hi 라고 대답해 오는 간단한 샘플입니다. 이번에는 이 hello 샘플의 bot 스크립트를 실행해 보겠습니다.

~/node_apps/docker-hubot-slack/scripts/hello.coffee
module.exports = (robot) ->
  robot.respond /HELLO$/i, (res) ->
    res.reply "Hi"

Slack에 로그인하고 avocado hello라고 말하면 masato: Hi로 응답합니다.

좋은 웹페이지 즐겨찾기