Решение проблемы

Установка и настройка мессенджера Zulip


Ранее на своем сайте я поднимал тему бесплатного чат-сервера, при чем не один раз. Сегодня я ее продолжу и расскажу о том, как установить и настроить бесплатный корпоративный мессенджер Zulip. В целом мне понравился этот продукт и показался простым и удобным, но не без недостатков, о которых упомяну.

Содержание:

  • 1 Введение
  • 2 Системные требования
  • 3 Установка Zulip
  • 4 Настройка Zulip
    • 4.1 Отправка email сообщений
    • 4.2 Базовые настройки сервера и клиента zulip
    • 4.3 Способы авторизации (email, Oauth2, GitHub, LDAP)
    • 4.4 Отправка сообщений в чат через email
  • 5 Заключение

Введение

Установка и настройка мессенджера Zulip

Начну с того, что расскажу, о чем уже писал на сайте:

  • Форк слака — mattermost. В целом понравился, работает нормально, особых багов нет. Но в бесплатной версии много ограничений и мало функционала. В статье все это указано, плюс много полезных комментариев. Видел этот сервер в реальной эксплуатации. Пользоваться можно, если вас устраивает функционал.
  • Чат сервер matrix и клиент Riot к нему. Хороший функционал в бесплатной версии, но показался сырым. Все подробности и мое мнение про продукту представлено в статье, рекомендую ознакомиться.

Если вы выбираете для себя корпоративный мессенджер, рекомендую ознакомиться со статьями и попробовать как минимум поставить сервер и хотя бы одним глазком взглянуть на него. Продукты вполне рабочие и возможно вам подойдут.

Zulip в этом плане не сильно хуже или лучше, он в целом похож немного на mattermost и прочие клоны slack. Мне он понравился, так как не заметил существенных недостатков, но в целом они тоже есть и для кого-то будут критичными. Перечислю их:

  • Сервер только под Ubuntu. В плане установки и настройки каких-то серьезных проблем в связи с этим нет. Но если у вас вся инфраструктура на других дистрибутивах, не хочется использовать сторонние дистрибутивы. Как минимум, поддержку Centos и Debian можно было бы сделать. Лично я предпочитаю именно их. Есть возможность самому руками поставить все компоненты и связать друг с другом, но это очень хлопотно. Я в итоге взял убунту и поставил все автоматом на нее.
  • Плохая русификация. Когда выбираешь русский язык, тебе честно говорят, что переведено 97%, но на деле в настройках достаточно много пунктов на английском языке, перемешанных с русскими. Пользоваться в таком формате очень неудобно, поэтому остается только вариант использовать английский язык. Либо оставлять как есть, но лично я не люблю, когда что-то сделано коряво. Если переводить, то все, а не так, как сделано. Но тут важный момент. Когда я начинал писать статью, перевод был значительно хуже. С выходом последней версии 1.8.0 перевод улучшился значительно.
  • Некоторый функционал работает не очевидно и не очень понятно. Например, отправка уведомления в чаты через email. Если у вас русские названия чатов, то работать это не будет. Так же не очень понятно, как настроить авторизацию через ldap c AD. Информации в документации не достаточно.

Среди плюсов отмечу следующее:

  • Хорошая документация, за исключением отдельных моментов. Это редкость. В интернете нет никаких статей и примеров настройки, но я смог почти все сделать и во всем разобраться по документации. Можете сами оценить — pdf.
  • Простой и лаконичный интерфейс. Ничего лишнего, в основном все интуитивно понятно.
  • Отдельные ветки обсуждений в одной конференции. К примеру, можно создать конференцию ИТ отдел и в ней выделить несколько тем со своим ветвением диалогов. Например — закупки, поддержка пользователей, настройка серверов, заявки и т.д.
  • Возможность пересылки сообщений из email сразу в конференцию. Можно создать почтовый алиас, письма, отправленные в этот алиас, будут автоматом падать в конференцию в чате.
  • Хорошее логирование всех событий. Легко дебажить настройку.

Ниже схема работы серверной части мессенджера.

Схема работы сервера Zulip

В общем и целом продукт оставил приятное впечатление. Добротный и качественный софт без лишних багнутых свистелок. Приступим к его установке.

Системные требования

У сервера Zulip есть минимальные системные требования, которые необходимо соблюсти. На сервер, не удовлетворяющий этим параметрам, установить бесплатный мессенджер не получится.

Для установки Zulip вам необходимо:

  • Выделенный сервер или виртуальная машина.
  • Операционная система Ubuntu 16.04 Xenial 64-bit или Ubuntu 14.04 Trusty 64-bit (не рекомендуется)
  • Как минимум 2 Gb оперативной памяти и 10 Gb дискового пространства. Для 100+ пользователей 4 Gb RAM и 2 CPUs.
  • Имя сервера, корректно резолвящееся через dns.
  • Учетная запись почты для получения письма от сервера.

Установка Zulip

Установка и настройка мессенджера Zulip

Как я уже говорил, у Zulip хорошая документация, так что устанавливать сервер мессенджера будем строго по ней. Вот прямая ссылка, можете воспользоваться ей — https://zulip.readthedocs.io/en/latest/production/install.html#step-2-install-zulip Так даже будет правильнее, потому что документация, скорее всего, будет более актуальной, чем моя статья. А если вам не хочется разбираться с документацией, то смотрите краткую выжимку из нее далее.

У меня следующая версия системы:

# lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial

Я сразу буду работать под root, без sudo.

Скачиваем сервер zulip:

# cd ~

# wget https://www.zulip.org/dist/releases/zulip-server-latest.tar.gz
# tar -xf zulip-server-latest.tar.gz

Установка zulip:

./zulip-server-*/scripts/setup/install --certbot --email=chat@serveradmin.ru --hostname=zulip.zeroxzed.ru
chat@serveradmin.ru почтовый ящик администратора чата
zulip.zeroxzed.ru доменное имя будущего сервера

Обращаю внимание на доменное имя. Для него нужен будет валидный сертификат. Либо уже существующий, либо получим бесплатный от let’s encrypt. Без нормального сертификата использовать zulip неудобно, так как пользоваться им будем в основном через браузер.

Я получил ошибку установки.

Установка Zulip

Zulip installation failed! 

The install process is designed to be idempotent, so you can retry after resolving whatever issue caused the failure (there should be a traceback above). A log of this installation is available in /var/log/zulip/install.log

Досадно. Я рассчитывал, что для тестовой версии, работающей без нагрузки, мне будет достаточно гигабайта памяти. Но увы, сервер даже не захотел установиться на виртуалку, где меньше 2gb оперативной памяти.

Я для тестов использую виртуальные машины ihor, которые можно заказывать на сутки. Минимальная конфигурация стоит 10р. в день, с 2 гигабайтами памяти 14р. Очень удобно. Раньше свои сервера использовал, но со временем понял, что проще и дешевле пользоваться услугами хостеров. В итоге просто добавил к виртуалке еще один гигабайт оперативной памяти и перезагрузил ее. Продолжаем установку.

./zulip-server-*/scripts/setup/install --certbot --email=chat@serveradmin.ru --hostname=zulip.zeroxzed.ru

Установщик сразу попробует получить сертификат от let’s encrypt с помощью certbot. Для этого нужно будет подтвердить лицензионное соглашение.

Получение бесплатного сертификата для чата

У меня сервер имеет выделенный ip адрес, доменное имя zulip.zeroxzed.ru настроено и нормально резолвится. Так что я сразу автоматически получил валидный сертификат для zulip сервера. Удобно сделан установщик — экономит наше время на настройку.

Установка будет длиться значительное время. У меня минут 15 прошло, пока не появилась информация о том, что сервер установлен.

Завершение установки Зулип

Переходим по приведенной ниже ссылке, чтобы подтвердить установку и зарегистрировать организацию.

Создание организации в zulip

Обратите внимание, что веб сервер уже работает по https с помощью валидного сертификата. Дальше выполняете указания мастера по созданию организации. Не буду подробно на этом останавливаться. Там все очевидно и просто.

После создания организации, вы сразу же попадаете в веб интерфейс мессенджера.

Корпоративный мессенджер Zulip

На этом непосредственно установка корпоративного чата zulip закончена. Перейдем к его настройке.

Настройка Zulip

Отправка email сообщений

На предыдущем скриншоте видно, что сервер в самом верху выдал предупреждение о том, что надо настроить отправку email. Это нужно для отправления подтверждений регистрации, уведомлений о поступающих сообщения, когда вы в онлайне и для других нужд. Сервер активно использует email рассылки. Так что рекомендую обязательно настроить отправку почтовых сообщений.

Все настройки сервера хранятся в конфигурационном файле /etc/zulip/settings.py. Причем, они там неплохо задокументированы. Я первоначальную настройку выполнял только по этим комментариям. Потом уже пошел читать документацию.

Итак, настраиваем отправку email. Я буду использовать бесплатный ящик на яндексе с адресом — chat@serveradmin.ru. Настройка других провайдеров будет аналогичной, отличаться будут только адрес smtp сервера и рабочий порт.

Указываем следующие настройки для отправки email:

EMAIL_HOST = 'smtp.yandex.ru'

EMAIL_HOST_USER = 'chat@serveradmin.ru'
EMAIL_USE_TLS = True
EMAIL_PORT = 587

В файл /etc/zulip/zulip-secrets.conf добавляем пароль от ящика.

email_password = KG5Aj1DkYnCm

Зайдем в консоль под пользователем zulip и перезапустим сервер для применения настроек.

# su zulip 

# /home/zulip/deployments/current/scripts/restart-server

Проверяем отправку почты:

# /home/zulip/deployments/current/manage.py send_test_email zeroxzed@gmail.com

В указанный ящик должно упасть тестовое письмо. Если это не так, то разбирайтесь с ошибками. В этом помогут следующие лог файлы:

  • /var/log/zulip/errors.log
  • /var/log/zulip/send_email.log
  • /var/log/zulip/queue_error/email_senders.errors

Мне пришлось немного повозиться с отправкой, но это из-за особенности работы бесплатной почты Яндекса. Со своим сервером проблем никаких не было. Если будете использовать почтовый ящик от gmail, то у разработчиков есть рекомендации на этот счет. Если есть свой почтовый сервер, то лучше пользоваться им.

Базовые настройки сервера и клиента zulip

Выполним несколько настроек, которые мне показались полезными. Сначала начнем с сервера. Заходим в чат, нажимаем справа вверху на шестерёнку, попадаем в настройки. Выбираем вкладку Organization.

Настройка сервера Zulip

Дальше перечислю настройки, отличающиеся от дефолтных, на которые рекомендую обратить внимание:

  • Organization profile -> Organization avatar — установка изображения с логотипом компании.
  • Organization settings -> Default user settings Здесь можно указать язык, который будет установлен новым пользователям. Выбираете подходящий вам. Тут же я указываю использовать привычный нам 24-х часовой формат времени.
  • Organization permissions -> Joining the organization По-умолчанию, свободная регистрация пользователей закрыта. Зарегистрироваться можно только по специальной ссылке, которую может сформировать любой текущий пользователь. Вы можете открыть свободную регистрацию для всех, или разрешить приглашать новых пользователей только администраторам чата. Для того, чтобы отправить приглашение на почту новому пользователю, надо нажать на шестеренку с настройками и выбрать раздел invite users. Пригласить пользователя в чатВ этом же разделе можно запретить пользователям изменять свое имя и email адрес, так же настроить права на создание и управление чатами.
  • User Groups Здесь можно раскидать пользователей по группам. Я не понял, для чего этот функционал, где потом использовать эти группы. Если кто-то подскажет, буду рад.
  • Default streams Тут настраиваются чаты, которые будут подключены новому пользователю автоматически.

Это что касается серверной части. Дальше посмотрим на настройки пользователя.

  • В Display settings настраиваем язык, формат времени и некоторые другие элементы внешнего вида. Делать это нужно, если не подходят дефолтные настройки сервера, установленные администратором.
  • В Notifications настраиваем уведомления. Это будут дефолтные настройки для всех чатов. Можно отдельно изменить эти настройки для конкретного чата в его свойствах.
  • Любопытная настройка Alert words. Вам будут приходить оповещения каждый раз, когда в чатах будет присутствовать указанное вами слово.

Все остальное очевидно и не заслуживает отдельного внимания.

Думаю, сразу после установки имеет смысл удалить дефолтные чаты и создать свои. Сервер нормально понимает кириллицу, так что можно создавать чаты с русскими именами и пробелами. Но есть общая рекомендация — давать названия чатам краткие. Так удобнее работать с ними. После создания списка чатов можно сразу указать те из них, которые будут подключаться новым пользователям. Было бы очень удобно, если бы чаты подключались пользователям в зависимости от групп, в которых он состоит. Но я не увидел такой возможности.

Способы авторизации (email, Oauth2, GitHub, LDAP)

Zulip поддерживает несколько типов авторизации:

  1. Email and password. Данный способ доступен по-умолчанию и не требует отдельной настройки. Работает сразу после установки.
  2. Google accounts. Стандартная гугловская авторизация. Как ее подключить, описано в конфигурационном файле в комментариях.
  3. GitHub accounts.То же самое, что и гугл авторизация, только от github. По идее, что гугл, что гитхаб настраиваются просто, судя по описанию, но я не проверял.
  4. LDAP server. Тут можно использовать сервер AD от Microsoft. Очень привлекательная возможность, но у меня сходу не получилось настроить. Надо внимательно разбираться. Планирую сделать это и дополнить статью, либо написать отдельно.
  5. Apache-based SSO. Не понял точно, что это такое. Сам не сталкивался, судя по описанию, мне не очень надо, но подробно не смотрел.

Более подробно о способах авторизации рассказано в соответствующем разделе документации. Лично меня заинтересовал только первый и четвертый. Постараюсь позже разобраться с настройкой авторизации через LDAP в виде AD. Сходу не завелось.

Отправка сообщений в чат через email

Каждому чату в Zulip можно назначить почтовый алиас, который будет передавать почтовые сообщения, отправленные на этот алиас прямиком в чат. По-умолчанию данная функция не работает. Ее нужно настраивать отдельно. Этим и займемся. Есть 2 способа настроить данный функционал:

  1. Использовать локальный почтовый сервис.
  2. Использовать сторонний почтовый ящик, подключаясь к нему по imap с определенным интервалом.

Удобнее и быстрее настроить первый способ. Работает он немного криво. Я долго разбирался, чтобы понять, как его настроить по-человечески, но так и не понял. Расскажу подробнее по ходу дела. Нам нужно в конфиге задать один единственный параметр:

EMAIL_GATEWAY_PATTERN = "%s@zulip.zeroxzed.ru"

После этого выполняем от рута команду:

# /home/zulip/deployments/next/scripts/zulip-puppet-apply -f

Перезапускаем сервер:

# su zulip

# /home/zulip/deployments/current/scripts/restart-server

Теперь создадим новый канал, например IT. Для этого открываем настройки и заходим в Manage streams.

Настройка чатов

Создаем новый канал. В свойствах канала видим адрес, на который можно отправлять письма. В моем случае это адрес IT+09bf1d51e0ce94d4c6fa191e0a979d7e@zulip.zeroxzed.ru.

Email адрес чата

Я долго не мог понять, почему такой адрес. Почему не просто it@zulip.zeroxzed.ru. Но увы, понять не смог. Попытки как-то это исправить ни к чему не привели. Я перечитал всю документацию, все что смог найти в гугле, но ничего не помогло. Перестал искать после того, как увидел описание этого функционала на zulipchat — https://zulipchat.com/integrations/doc/email Я понял, что так и было задумано.

Теперь для того, чтобы сервер zulip мог получать почту, необходимо создать MX запись для домена zulip.zeroxzed.ru. Я это сделал через редактор доменных записей. Должно получиться примерно вот так:

mx запись в dns для сервера зулип

После этого отправил письмо на ящик канала и оно действительно попало в чат. То есть функционал вполне рабочий. Реализован с помощью postfix. Он принимает письма, потом передает в зулиповский доставщик почты. Информация о входящих письмах отражается в системном почтовом логе /var/log/mail.log. Если что, смотрите туда. Если там писем нет, значит они не доходят до сервера. Разбирайтесь, почему это так. Возможно не настроен фаервол или неправильно указаны dns записи.

Важный нюанс, который я заметил во время тестирования. Если у вас русские названия чатов, сервер автоматически им назначит email адрес с русским названием. Очевидно, что вы не сможете отправить на такой ящик письмо. Скорее всего это баг. Как исправить или обойти этот момент не знаю.

Заключение

Установка и настройка мессенджера Zulip
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Я рассмотрел, как мне показалось, основные моменты, на которые стоит обратить внимание при установке и настройке zulip мессенджера. Такие моменты, как создание каналов, отправку сообщений, картинок и т.д. не стал описывать. Тут и так все понятно, надо самому зайти и посмотреть.

В целом, этот мессенджер подходит на роль корпоративного. Сделан добротно, каких-то существенных багов я не заметил. Правда, в эксплуатацию чат еще не вводил, пока только готовлюсь. Думаю, буду его использовать. Из бесплатного, он мне понравился больше, чем все, что я видел до него. Конечно, не без недостатков, но мне они показались не критичными.

Я забыл рассказать про десктопную и мобильную версию клиента. Десктопная практически ничем не отличается от того, что вы видите в браузере. Как я понимаю, это просто обертка, которая работает так же как и браузер по http. Там все идентично web версии, так что рассказывать не о чем. Мобильная версия ставится через google play. Мне в целом понравилась. Работает быстро, ничего лишнего, общаться удобно, уведомления есть.

Еще раз поднимаю тему бесплатного корпоративного мессенджера и прошу поделиться своими мыслями и предложениями на этот счет в комментариях. Сразу скажу, что лично устанавливал и тестировал Mattermost (эксплуатировал длительное время в реальном коллективе), Rocket.Chat (только тестировал, показался очень багнутым), Matrix (показался сыроват, но в целом ничего), Mychat (штука платная, но стоит недорого, внимательно его тестировал, но не понравился дремучий интерфейс «привет из 2000-х»). Zulip из этой компании понравился больше всего.

На правах рекламы даю ссылку на виртуальные серверы в Германии с полным администрированием, с русской тех поддержкой. Вы можете заказать виртуальный сервер и попросить техподдержку настроить там zulip. Можно ссылку на мою статью дать. Они вам это сделают. Это для тех, кто не хочет заморачиваться. Главное не ошибиться и заказать именно с администрированием, включенным в стоимость.

СМОТРИ ТАКЖЕ