Let's Chat과 Hubot을 연결

14502 단어 LetsChatHubot
1년 가까이 전에사내에서 HipChat 클론의 Kandan과 Hubot 이동 - Qiita라고 기사를 썼다.

최근 프로젝트를 위한 개발 기반 환경을 갖추었고, 그 일환으로 채팅 앱을 살펴보면 Let's Chat을 발견했다. (정말은 Slack라든지 서비스를 사용하고 싶지만, 좀처럼 그렇게도 가지 않는다…)
당시 Kandan을 사용해 환경 정돈했지만, 상당히 번거롭거나 늦거나 불만도 상당히 있었다. 그래서 Let's Chat에서 환경을 정돈해 보았다.
결과를 먼저 써 두면, 환경 구축은 비교적 간단하고, UI도 모던하고 응답도 좋았으므로 추천.

환경 구축



도커 , 에 6 , Vagrant 과 순서가 실려 있지만, 사내에서 이용하기 때문에 Local installation 를 참고로 구축.

이번에는 CentOS6.5에 구축했다.

Node.js 설치



nodebrew에서.
$ wget git.io/nodebrew
$ perl nodebrew setup
export PATH=$HOME/.nodebrew/current/bin:$PATH 를 path 에 추가하라고 하기 때문에 추가한다.
현재 최신v0.12.4을 설치합니다.
$ nodebrew ls-remote
$ nodebrew install-binary v0.12.4
$ nodebrew use v0.12.4

MongoDB 설치



MongoDB 리포지토리 추가

/etc/yum.repos.d/mongodb.repo
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1

설치
$ yum -y install mongodb-org

시작
$ service mongod start

Python2.7 설치



표준으로 Python2.6이 들어 있었지만, Python2.7 이상이 필요하므로 넣어 둔다.
$ yum -y groupinstall "Development tools"
$ yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libicu-devel.x86_64
$ curl -O https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz
$ tar zxvf Python-2.7.6.tgz
$ cd Python-2.7.6
$ ./configure --prefix=/opt/local
$ make && make altinstall
# 元から入っていたPythonをリネームしておく
$ mv /usr/bin/python /usr/bin/python2.6.6
$ ln -snf /opt/local/bin/python2.7 /usr/bin/python
$ python -V
Python 2.7.6

원래부터 들어 있는 Python의 버전을 올리면 yum이 움직이지 않게 되므로, 리네임한 Python을 보도록, 이하와 같이 수정한다.

/usr/bin/yum
- #!/usr/bin/python
+ #!/usr/bin/python2.6.6
import sys
try:
    import yum
except ImportError:
    print >> sys.stderr, """\
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
.
.

Let's Chat 설치


$ git clone https://github.com/sdelements/lets-chat.git
$ cd lets-chat
$ npm install

시작


$ npm start

> [email protected] prestart /opt/lets-chat
> migroose


> [email protected] start /opt/lets-chat
> node app.js


██╗     ███████╗████████╗███████╗     ██████╗██╗  ██╗ █████╗ ████████╗
██║     ██╔════╝╚══██╔══╝██╔════╝    ██╔════╝██║  ██║██╔══██╗╚══██╔══╝
██║     █████╗     ██║   ███████╗    ██║     ███████║███████║   ██║
██║     ██╔══╝     ██║   ╚════██║    ██║     ██╔══██║██╔══██║   ██║
███████╗███████╗   ██║   ███████║    ╚██████╗██║  ██║██║  ██║   ██║
╚══════╝╚══════╝   ╚═╝   ╚══════╝     ╚═════╝╚═╝  ╚═╝╚═╝  ╚═╝   ╚═╝

Release 0.4.0

http://localhost:5000에 액세스하면 로그인 화면이 표시됩니다.
port 번호나 가입 허가 등은 settings.yml 로 행한다. Kerberos나 LDAP등의 인증에도 대응하고 있는 모양.



멋진 로그인 화면이다.

Init script를 만들고 서비스를 시작할 수 있도록 허용



npm start로 기동하는 것은 싫기 때문에, 서비스 기동할 수 있도록 한다.

Let's Chat의 daemon화는 forever를 사용하여 행하므로 설치해 둔다.
$ npm install -g forever

다음 용으로 Init script를 작성한다. 경로는 각 환경에 맞추어야 한다.

/etc/init.d/lets-chat
#!/bin/sh
#
# Note runlevel 2345, 86 is the Start order and 85 is the Stop order
#
# chkconfig: 2345 86 85
# description: Description of the Service
#
# Below is the source function library, leave it be
. /etc/init.d/functions

# result of whereis forever or whereis node
export PATH=/home/tenten0213/.nodebrew/current/bin
# result of whereis node_modules
export NODE_PATH=$NODE_PATH:/home/tenten0213/.nodebrew/current/lib/node_modules

SERVICE_NAME="Let's Chat"
cd /opt/lets-chat


start(){
        forever start app.js
}

stop(){
        forever stop app.js
}

restart(){
        forever restart app.js
}

case "$1" in
        start)
                echo "Start service ${SERVICE_NAME}"
                start
                ;;
        stop)
                echo "Stop service ${SERVICE_NAME}"
                stop
                ;;
        restart)
                echo "Restart service ${SERVICE_NAME}"
                restart
                ;;
        *)
                echo "Usage: $0 {start|stop|restart}"
                exit 1
                ;;
esac

init.d/lets-chat 및 app.js에 실행 권한 부여
$ chmod a+x /etc/init.d/lets-chat
$ chmod a+x app.js

이제 다음과 같이 서비스를 시작할 수 있습니다.
$ service lets-chat start

Hubot과의 협력



Hubot 설치 및 구축에 대한 자세한 내용은 문서을 참조하십시오.

자신의 Hubot을 만든 디렉토리에 Let's Chat 어댑터를 설치합니다.
$ npm install hubot-lets-chat --save

Hubot에 대한 계정을 미리 만들고 인증 토큰을 얻습니다.



취득한 토큰과, 참가시키고 싶은 룸의 id( http://localhost:5000/#!/room/55825920a58fe99f7c28f232라면 55825920a58fe99f7c28f232 )를 HUBOT_LCB_TOKENHUBOT_LCB_ROOMS에 각각 설정한다.
export HUBOT_LCB_TOKEN=NTRiNjg5NmYyMDZiMzEwMDAwYTAxNmZiOjE0ZTg2ODMwYz...
export HUBOT_LCB_ROOMS=5279facb1015642226000011,5394ffbabdea44e815000003

Let's Chat의 프로토콜이나, 호스트명, 포트명등도 지정할 수 있다.
export HUBOT_LCB_PROTOCOL=http
export HUBOT_LCB_HOSTNAME=localhost
export HUBOT_LCB_PORT=5000

어댑터로 lets-chat을 지정해 기동하면, Hubot가 Let's Chat에 참가하게 된다.
$ ./bin/hubot -a lets-chat



일단 Hubot도 Init script 쓰고 있었다.

추가
↓ 그렇다면 제대로 움직이지 않을지도… 안된다면
기동만 run.sh 을 준비해, 멈추는 것은 forever stop 하는 느낌으로.
#!/bin/sh
#
# Note runlevel 2345, 86 is the Start order and 85 is the Stop order
#
# chkconfig: 2345 86 85
# description: Description of the Service
#
# Below is the source function library, leave it be
. /etc/init.d/functions

# result of whereis forever or whereis node
export PATH=/home/tenten0213/.nodebrew/current/bin
# result of whereis node_modules
export NODE_PATH=$NODE_PATH:/home/tenten0213/.nodebrew/current/lib/node_modules
export PATH=$HOME/.nodebrew/current/bin:$PATH
export HUBOT_LCB_HOSTNAME=localhost
export HUBOT_LCB_PORT=5000
export HUBOT_LCB_TOKEN="NTRiNjg5NmYyMDZiMzEwMDAwYTAxNmZiOjE0ZTg2ODMwYz..."
export HUBOT_LCB_ROOMS=5279facb1015642226000011,5394ffbabdea44e815000003

SERVICE_NAME="Hubot"
cd /home/tenten0213/hubot

start(){
        forever start -c coffee node_modules/.bin/hubot -a lets-chat
}

stop(){
        forever stop -c coffee node_modules/.bin/hubot -a lets-chat
}

restart(){
        forever restart -c coffee node_modules/.bin/hubot -a lets-chat
}

case "$1" in
        start)
                echo "Start service ${SERVICE_NAME}"
                start
                ;;
        stop)
                echo "Stop service ${SERVICE_NAME}"
                stop
                ;;
        restart)
                echo "Restart service ${SERVICE_NAME}"
                restart
                ;;
        *)
                echo "Usage: $0 {start|stop|restart}"
                exit 1
                ;;
esac

참고


  • Node.js의 daemon화에 대해 (forever를 사용해보기) - Qiita
  • Starting Node Forever Scripts at Boot w/ CentOS
  • 좋은 웹페이지 즐겨찾기