Rocket.Chat

Applications juil. 14, 2020

Si vous travaillez dans le domaine de l'informatique, vous connaissez probablement Slack qui est une sorte de messagerie qui permet de communiquer facilement au sains d'une équipe ou d'une entreprise.

Les prix sont tout à fait correctes, mais j'aime mon indépendance, j'utilise donc un équivalent que je peux héberger.

Rocket.Chat me permet à la fois de partager facilement des informations avec mes collègues, il me permet aussi de recevoir des messages provenant des serveurs pour nous informer d'éventuels problèmes ou du bon déroulement des mises à jour et sauvegardes.

J'ai aussi mis en place un salon qui indique les opérations faites sur le Gitea de la boite. Pull, commit, ticket... Les collaborateurs sont au courant de ce qui ce passe en temps réel sur la partie développement.

Je l'ai mis en production avec Docker et voici mon fichier docker-compose.yml

version: '2'
services:
  chat:
    image: rocketchat/rocket.chat:3.3.3
    restart: always
    command: bash -c 'for i in `seq 1 30`; do node main.js && s=$$? && break || s=$$?; echo "Tried $$i times. Waiting 5 secs..."; sleep 5; done; (exit $$s)'
    privileged: true
    networks:
      - traefik
    ports:
      - "3000:3000"
    labels:
      - "traefik.frontend.rule=Host:adresse.chat"
      - "traefik.port=3000"
      - "traefik.backend=chat"
      - "traefik.frontend.entryPoints=http,https"
    environment:
      - PORT=3000
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
    depends_on:
      - mongo

  mongo:
    image: mongo:4.0
    restart: always
    networks:
      - traefik
    volumes:
      - ./db-rocket:/data/db:z
    command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
    labels:
      - "traefik.enable=false"

  mongo-init-replica:
    image: mongo:4.0
    command: 'bash -c "for i in `seq 1 30`; do mongo mongo/rocketchat --eval \"rs.initiate({ _id: ''rs0'', members: [ { _id: 0, host: ''localhost:27017'' } ]})\" && s=$$? && break || s=$$?; echo \"Tried $$i times. Waiting 5 secs...\"; sleep 5; done; (exit $$s)"'
    depends_on:
      - mongo

networks:
  traefik:
    external:
      name: traefik_traefik

J'utilise le revers proxy Traefik pour gérer mes conteneurs et automatiser la gestion des certificats de sécurités.

Pour ce qui est de l'intégrations des messages en provenance des serveurs, il suffit d'appeler le scripte suivent :

#!/usr/bin/env bash
function usage {
    programName=$0
    echo "description: use this program to post messages to Rocket.chat channel"
    echo "usage: $programName [-b \"message body\"] [-u \"rocket.chat url\"]"
    echo "      -b    The message body"
    echo "      -u    The rocket.chat hook url to post to"
    exit 1
}
while getopts ":b:u:h" opt; do
  case ${opt} in
    u) rocketUrl="$OPTARG"
    ;;
    b) msgBody="$OPTARG"
    ;;
    h) usage
    ;;
    \?) echo "Invalid option -$OPTARG" >&2
    ;;
  esac
done
if [[ ! "${rocketUrl}" || ! "${msgBody}" ]]; then
    echo "all arguments are required"
    usage
fi
read -d '' payLoad << EOF
{"text": "${msgBody}"}
EOF
echo $payLoad
statusCode=$(curl \
        --write-out %{http_code} \
        --silent \
        --output /dev/null \
        -X POST \
        -H 'Content-type: application/json' \
        --data "${payLoad}" ${rocketUrl})
echo ${statusCode}

Vous pouvez voir un exemple d'utilisation ici.

Julien HL

Développeur full stack, sysadmin & CEO UNITS.