Установка 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 Установка клиентов на телефон
В магазинах есть оф приложения.
Чувак, спасибо тебе за пример с AD!
Да пожалуйста!!!
Привет из 2021) Если тема актуальна, то я синхронизировал пользователи с AD, но пароли он не подтянул, соответственно вручную просит вбивать. А есть ли вариант сквозной авторизации, либо подтягивание паролей из ад, т.к. они меняются раз в три месяца
Привет. На сайте есть последняя версия мануала – https://itc-life.ru/ustanovka-rocket-chatlatest-version-s-pomoshhyu-doker-i-openldap-integraciya/. Я использую openldap – у меня подтягиваются все данные – включая пароли.