[SOLVED] Mattermost + hubot + docker


#1

Hi,

I want play with hubot-mattermost on my Mac, so I installed Mattermost with Docker (with the guide on the official site). I launch my container with
“docker run --name mattermost-preview -d --publish 8065:8065 mattermost/mattermost-preview”.

In Mattermost, I configured my outgoing webhook with the callback URL “http://0.0.0.0:8065/hubot/incoming”.

With this configuration, when I write something in my target channel, I have “Event POST failed, err=Post http://0.0.0.0:8065/hubot/incoming: address forbidden” in Mattermost logs on my container.

So I configured “Allow untrusted internal connections to:” in Mattermost with “0.0.0.0”. Now, I have no error in Mattermost logs.

So I can launch hubot with this configuration :
MATTERMOST_ENDPOINT=/hubot/incoming
MATTERMOST_INCOME_URL=http://localhost:8065/hooks/xxxxxxxxxxxxxxxxxx
EXPRESS_PORT=8065
MATTERMOST_TOKEN=xxxxxxxxxxxxxxx
and this command : bin/hubot --adapter mattermost

But I have this error in hubot logs :
[Tue May 01 2018 16:27:33 GMT+0200 (CEST)] ERROR Error: listen EADDRINUSE 0.0.0.0:8065
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)
at Function.Module.runMain (module.js:695:11)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3

I think it’s because the port 8065 is already used by Mattermost server (exposed in my docker container).

I don’t know how I should configure my Mattermost and my hubot properly.

Can someone help me please ?
And sorry for my English.

Thanks all.


#2

I don’t use mattermost-preview nor Hubot, but if you run a container using the --publish 8065:8065 option then your application (here the mattermost server) will bind the port 8065 on your host.

I’m not sure but I think your EXPRESS_PORT should be different than your Mattermost port. I guess that you need to choose another port for EXPRESS_PORT and change the callback URL of your Mattermost outgoing webhook with this port.


#3

Hi, thanks for your reply. Yes, that’s I saw, the hubot start on the port 8081 for me now, and the problem is I can’t start hubot on the same port as exposed by docker. Finally, I installed hubot in the mattermost container. The problem is solved. Thank you pichouk.


#4

Hi Antoine, Can you explain how you did it? I have the same problem, I can’t get Hubot to work/connect with Mattermost 4.9.0 on my docker.

Thank you very much!


#5

Hi Fabianski-tr,

I created a new Docker image by creating this Dockerfile :

FROM mattermost/mattermost-preview:latest
RUN apt-get update && apt-get upgrade -y
RUN apt-get install curl -y
RUN apt-get install sudo -y
RUN curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
RUN apt-get install -y nodejs
RUN npm install -g yo generator-hubot && useradd hubot -m -s /bin/sh

USER hubot
WORKDIR /home/hubot
RUN echo no | yo hubot --owner=“Name mail@address.com” --name=“webhook-hubot” --description=“Hubot for mattermost webhooks” --adapter=mattermost &&
sed -i /heroku/d ./external-scripts.json && sed -i ‘/dependencies/a “coffee-script”: “^1.12.6”,’ ./package.json

USER root
WORKDIR /mm
ADD docker-entry.sh .

RUN chmod +x ./docker-entry.sh
ENTRYPOINT ./docker-entry.sh

The docker-entry.sh file is this file : https://github.com/mattermost/mattermost-docker-preview/blob/master/docker-entry.sh

Then launch your container, connect to it, and use a port different of 8065 to launch your hubot instance (with the EXPRESS_PORT environment variable). Configure the others hubot environment variable. Finally, you can configure your outgoing webhook in Mattermost with this callback url : http://localhost:{EXPRESS_PORT}/{MATTERMOST_ENDPOINT}

Good luck.


#6

It returns authentication errors all the time:

"{“level”: “info”, “ts”:1525859555.876387, “caller”: “api4/context.go:127”, “msg”: "Invalid session err=GetSession: Invalid session token=r7ajssnci7f59fg9eybi8te9ma, err=<, "}

Am I missing any other settings?
I realize this:

export MATTERMOST_ENDPOINT=/hubot/incoming
export MATTERMOST_INCOME_URL=http://127.0.0.1:8065/hooks/XXXXXX
export MATTERMOST_SELFSIGNED_CERT=true
export EXPRESS_PORT=8080
export MATTERMOST_TOKEN=YYYYYY
./bin/hubot -a mattermost


#7

Check your tokens in MATTERMOST_INCOME_URL and MATTERMOST_TOKEN variables. You should get them from Mattermost webhook configuration.

I have the same configuration without MATTERMOST_SELFSIGNED_CERT. I didn’t set it. Maybe you can try without this variable set.


#8

If I have configured the parameter EXPRESS_PORT=8080.

Then in the configuration in the Outgoing Webhook (Mattermost) is the following, right?


#9

Yes, that’s my case (with port 8081). You can try another port, maybe your port 8080 is already used.


#10

And there is no need for any more configuration or user creation in a different way? I don’t understand if everything is the same as you indicated because the bot doesn’t answer. :frowning:


#11

No sorry, I don’t understand why the bot doesn’t answer.


#12

¿You create userbot with Matterbot invite link?

My steps are:

  1. Run container with port 8065
  2. Create a new user admin
  3. Create a normal user for Bot
  4. Enable Webhooks (Incoming and Outgoing) on Custom Integration
  5. Configure the webhooks with the settings I have indicated above
  6. Export config on container and run Hubot with mattermost adapter

Am I missing something?


#13

No sorry. I did the same thing. I have no idea to help you at this point.