Установка rocket-chat через docker и интеграция с OPENLDAP + шифрование через nginx.

Установка rocket-chat через docker и интеграция с OPENLDAP.
В свете последних событий с охреневшим РК и всякими им подобными пи…ми, займемся ка мы установка своего чата аля slack chat на наш сервер ubuntu/debian через docker-compose. Также интегрируемся в OPENLDAP для порядка. Как устанавливать OPENLDAP я писал ТУТА!!!
В чем преимущества rocket chat:

— все храним у себя;
— не надо беспокоиться об истории как в slack (ограничена на бесплатной версии);
— интеграция с openldap;
— так же есть бот;
— поддержка markdown в сообщениях;
— и множество плюшек.

1. Запуск rocket-chat через docker-compose.

Создадим docker-compose и необходимые диры.
На данный момент последняя версия чата — rocketchat:0.66.0-rc.1,ее мы и прописали в docker-compose.

mkdir -p /docker-compose/rocketchat
cd /docker-compose/rocketchat
mkdir -p data/rocketchat/uploads
mkdir -p data/rocketchat/db
chmod 777 -R data/rocketchat/uploads

Собираем докер из исходов.

nano Dockerfile
FROM node:8.9-slim
# crafted and tuned by pierre@ozoux.net and sing.li@rocket.chat
MAINTAINER buildmaster@rocket.chat
RUN groupadd -r rocketchat \
&&  useradd -r -g rocketchat rocketchat \
&&  mkdir -p /app/uploads \
&&  chown rocketchat.rocketchat /app/uploads
VOLUME /app/uploads
# gpg: key 4FD08014: public key "Rocket.Chat Buildmaster <buildmaster@rocket.chat>" imported
RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 0E163286C20D07B9787EBE9FD7F9D0414FD08104
#
ENV RC_VERSION 0.66.0-rc.1
#RC_VERSION
WORKDIR /app
RUN curl -fSL "https://releases.rocket.chat/${RC_VERSION}/download" -o rocket.chat.tgz \
&&  curl -fSL "https://releases.rocket.chat/${RC_VERSION}/asc" -o rocket.chat.tgz.asc \
&&  gpg --batch --verify rocket.chat.tgz.asc rocket.chat.tgz \
&&  tar zxvf rocket.chat.tgz \
&&  rm rocket.chat.tgz rocket.chat.tgz.asc \
&&  cd bundle/programs/server \
&&  npm install
USER rocketchat
WORKDIR /app/bundle
# needs a mongoinstance - defaults to container linking with alias 'db'
ENV DEPLOY_METHOD=docker-official \
    MONGO_URL=mongodb://db:27017/meteor \
    HOME=/tmp \
    PORT=3000 \
    ROOT_URL=http://localhost:3000 \
    Accounts_AvatarStorePath=/app/uploads
EXPOSE 3000
CMD ["node", "main.js"]

Собираем докер

docker build -t registry-gitlab.itc-life.ru:4567/deploy/docker-stack-itc/rocketchat:0.66.0-rc.1 .

Редактируем docker-compose.yml

version: '2'
services:
  rocketchat:
    image: registry-gitlab.itc-life.ru:4567/deploy/docker-stack-itc/rocketchat:0.66.0-rc.1
    restart: unless-stopped
    volumes:
      - ./data/rocketchat/uploads:/app/uploads
      - ./data/rocketchat/sounds:/app/sounds
      - ./data/rocketchat/emod:/app/emod
    environment:
      - PORT=3000
      - ROOT_URL=https://rc.itc-life.ru
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
      - MAIL_URL=smtp://smtp.email
      #- MAIL_URL=smtp://smtp.mandrillapp.com
      #- MONGO_URL=mongodb://db:27017/rocketchat
      #- ROOT_URL=https://community.storj.io
      #- Accounts_UseDNSDomainCheck=True
    depends_on:
      - mongo
    ports:
      - 3000:3000
      - 9200:9100
    networks:
      rc-net:
        aliases:
          - rocketchat
  mongo:
    image: mongo:4.0-rc
    restart: unless-stopped
    volumes:
     - ./data/rocketchat/mongodb4:/data/db
     - ./data/rocketchat/dump:/dump
    command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
    networks:
      rc-net:
        aliases:
          - mongo.rc.db
  # this container's job is just run the command to initialize the replica set.
  # it will run the command and remove himself (it will not stay running)
  mongo-init-replica:
    image: mongo:4.0-rc
    command: 'mongo mongo/rocketchat --eval "rs.initiate({ _id: ''rs0'', members: [ { _id: 0, host: ''localhost:27017'' } ]})"'
    depends_on:
      - mongo
    networks:
      rc-net:
        aliases:
          - mongo.init
  ## hubot, the popular chatbot (add the bot user first and change the password before starting this image)
  hubot:
    image: rocketchat/hubot-rocketchat:latest
    restart: unless-stopped
    environment:
      - ROCKETCHAT_URL=rocketchat:3000
      - ROCKETCHAT_ROOM=''
      - ROCKETCHAT_USER=rocketchatbot
      - LISTEN_ON_ALL_PUBLIC=true
      - ROCKETCHAT_PASSWORD=23423423fdsf3423rdsrfsdfsdfdsf34rwerf
      - ROCKETCHAT_AUTH=ldap
  # you can add more scripts as you'd like here, they need to be installable by npm
      - EXTERNAL_SCRIPTS=hubot-help,hubot-seen,hubot-links,hubot-diagnostics
    depends_on:
      - rocketchat
    volumes:
      - ./data/rocketchat/scripts:/home/hubot/scripts
  # this is used to expose the hubot port for notifications on the host on port 3001, e.g. for hubot-jenkins-notifier
    ports:
      - 3001:8080
    networks:
      rc-net:
        aliases:
          - hubot
  redis:
    image: redis:latest
    restart: unless-stopped
    networks:
      rc-net:
        aliases:
          - redis.rc.db
##NETWORKS
networks:
  rc-net:
    driver: bridge

Теперь cпулим все оставшиеся образы.

docker-compose pull

И запустим все по очереди — сначала монго, потом произведем инициализацию реплик монго, затем стартанем сам чат.

docker-compose up -d monogo
docker-compose up -d mongo-init-replica
docker-compose up -d rocketchat

Готово, как мы видим здесь мы открыли порт 3000 на 127.0.0.1. Создадим конфиг nginx для проксирования на наш чат

upstream rc {
    server                 127.0.0.1:3000;
}
# let rc deal with the redirection
server {
  listen                    80;
  server_name               chat.itc-life.ru;
  server_tokens             off;
  root                      /dev/null;
  access_log /dev/null;
    location / {
    return              301 https://$server_name$request_uri;
    }
}
server {
  listen                    443   ssl http2;
  server_name               chat.itc-life.ru;
  server_tokens             off;
  root                      /dev/null;
    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_certificate /etc/nginx/ssl.d/itc-life.ru/certificate.crt;
    ssl_certificate_key /etc/nginx/ssl.d/itc-life.ru/private.key;
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/dhparam.pem;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:2m;
    ssl_stapling on;
    ssl_stapling_verify on;
  access_log /dev/null;
  location / {
        proxy_pass http://rc;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;
        proxy_redirect off;
  }
}
Передергиваем nginx и заходим на наш чат.
chat.itc-life.ru

ОК. ВСё запустилось.


Заполняем данные и жмем continue

Здесь нихуя не произойдет — всё висит без изменений — так что просто обновим страницу.
Теперь можем войти под нашим логином и паролем.
Логин — почта которую вы указали — у меня это — test@itc-life.ru.
Далее забиваем данные

Еще данные

Готово.

Входим и переходим к настройкам чата

2. Настройка rocket chat.

2.1 Настройка загрузки файлов

Сразу поменяем тип файловой системы и максималный обьем передаваемых файлов

Настроим путь сохранения загруженных файлов

Файлы будут сохраняться в проброшенгую директорию в каталоге /docker-compose/rocketchat

./data/rocketchat/uploads

2.2 Настройка OPENLDAP интеграции для rocket-chat

Приводим к виду как у меня на скринах. А именно.
ПРОТОКОЛ LDAP

Включить LDAP ==>> ДА
РЕЗЕРАВНАЯ АВТОРИЗАЦИЯ ==>> ДА
ХОСТ ==>> ВАШ IP C LDAP
PORT ==>> 389
BASE DN ==>> dc=itc-life,dc=ru

Вкладка АУТЕНТИФИКАЦИЯ

USER DN ==>> cn=admin,dc=itc-life,dc=ru
PASSWORD ==>> ВАШ ПАРОЛЬ АДМИНА ИЛИ ЮЗЕРА,КОТОРЫЙ МОЖЕТ ИСКАТЬ В LDAP
ВКЛАДКА Sync / Import
Поле "Имя пользователя" ==>> uid
Поле уникального идентификатора ==>> uid
Домен по-умолчанию - я оставил пустой
Объединить существующих пользователей ==>> Нет
Синхронизация пользовательских данных ==>> Да
Карта пользовательских данных ==>> {"cn":"name", "mail":"email"}
Синхронизация пользовательских аватаров ==>> ДА(подгрузять из LDAP)

Ниже в этой вкладке больше ничего не менял.
Вкладка user search

Фильтр ==>> (objectclass=*)
Область ==>> sub
Поле поиска ==>> uid

Всё пробуем авторизоваться — ВСЁ ОК.

2.3 Настройка уведомлений

2.4 Настройка уведомлений — всегда слать на desktop приложение

2.5 Включить отправку уведомлений на все устройства

2.6 Отключаем регистрацию

2.7 Создаем бота и входящий webhook для отправки сообщений

Здесь можно отметить полную совместимость со slack chat. Даем нашему боту роль bot в настройках

Идем создадим канал — например elasticalerts. ВАЖНО — он должен быть не приватным.
Теперь создадим входящий webhook во вкладке интеграция

И нажмем сохранить. Появятся данные данные

Скопируем строку в через терминал отправим. Всё ок

2.9 Установка клиентов на ubuntu

sudo snap install rocketchat-desktop

2.10 Установка клиентов на телефон

В магазинах есть оф приложения.

2 thoughts on “Установка rocket-chat через docker и интеграция с OPENLDAP + шифрование через nginx.

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.