Установка 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 Установка клиентов на телефон

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

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

  1. Привет из 2021) Если тема актуальна, то я синхронизировал пользователи с AD, но пароли он не подтянул, соответственно вручную просит вбивать. А есть ли вариант сквозной авторизации, либо подтягивание паролей из ад, т.к. они меняются раз в три месяца

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

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

 

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