Posted at

1つのhubotを複数のslackにつなぐ(hubotを複数起動する)

More than 1 year has passed since last update.

hubotをすでにslackと連携していて、全く同じbotを別のslackに繋げたらいいな、


起動時のパスでトークン渡してるんだから、別のトークン渡せばいいんじゃない?と思ったんです。

ところがうまくいかなかったので調べました。

雰囲気から察するに、複数起動できない時やはslack adapter関係なさそうなので、

複数のhubotを起動したかったんだけどうまくいかない!っていう時はチェックしてみてください。


TL;DL


  • hubotを複数起動するにはPORT環境変数の指定が必要なことがある

  • bin/hubot はシェルスクリプトなのでお気に召すままカスタマイズ


やってみた

エラーがでて2個目が起動しません。

[Wed Apr 25 2018 13:35:47 GMT+0900 (JST)] ERROR Error: listen EADDRINUSE 0.0.0.0:8080

at Object._errnoException (util.js:1022:11)
at _exceptionWithHostPort (util.js:1044:20)
at Server.setupListenHandle [as _listen2] (net.js:1367:14)
at listenInCluster (net.js:1408:12)
at doListen (net.js:1517:7)
at _combinedTickCallback (internal/process/next_tick.js:141:11)
at process._tickCallback (internal/process/next_tick.js:180:9)

ということでググってみると、

-デフォルトでport 8080として起動する

-変更するには環境変数PORTを設定する

ということがわかりました。

また、 hubot の bin/hubot は実はshell scriptなので、こいつの中で環境変数を設定してやればいいようです。

せっかくなので、起動用のスクリプト内でtoken指定やadapter 指定もしてしまいましょう。

ついでに npm installをこのスクリプトが毎回やっているのですが、起動が遅くなるので必要なタイミングで自分でnpm installできるなら消してしまっていいと思います。

そんな感じで出来上がった起動スクリプトがこんな感じ


hubot-a

#!/bin/sh

set -e

export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH"
#他と被らないPORTを指定する
export PORT=8091
#slack token
export HUBOT_SLACK_TOKEN=xxx-99999999999-XXXXXXXXXXXXXXXXXXXX
#-a(--adaptor)でアダプターを決め打ちする
exec node_modules/.bin/hubot --name "hubots" "$@" -a slack


2個目のhubotについては、これをコピーしてslack tokenとportだけ書き換えればOKです。


参考

SSH - 一つのVPSサーバーでhubotを複数起動することは可能でしょうか?(112248)|teratail