Найти в Дзене
urryes - hooded Indian :-)

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

Понадобился как-то нам в компании чат. Корпоративный. Дело было так - не успел я в компанию нашу разудалую прийти, как тут же удивился. "Асю" увидал потому что… что-то древнее, простое и... родное. Тогда она ещё была вполне жива и функциональна. И продолжала в том же духе до самого самого своего конца, когда ей уже напрочь перекрыли кислород. Наряду с нею, в паре, так сказать, работал ещё и чат Вотсап. И предпринимались ещё никому почти что ненужные попытки освоения CRM-ки родной, отечественной - Битрикса 24. Прошло время. Ася почила в бозе. Стало быть замену нужно искать. А чего её искать, если вот он есть Луи Битрикс 24-й. Стоял сколько лет пез без дела и вот, поди ж ты, понадобился. Решили - “а давай-ка”. Попробовали его на демо-периоде - вроде ничего. Период быстро миновал и выяснилось, что да, версия бесплатная есть совсем не то, что монетизированная, количество “но” в первой чувствительно перевешивает количество “да”. Особенно ежели использовать её большей частью как корпоратив

Понадобился как-то нам в компании чат. Корпоративный. Дело было так - не успел я в компанию нашу разудалую прийти, как тут же удивился. "Асю" увидал потому что… что-то древнее, простое и... родное. Тогда она ещё была вполне жива и функциональна. И продолжала в том же духе до самого самого своего конца, когда ей уже напрочь перекрыли кислород. Наряду с нею, в паре, так сказать, работал ещё и чат Вотсап. И предпринимались ещё никому почти что ненужные попытки освоения CRM-ки родной, отечественной - Битрикса 24.

Прошло время. Ася почила в бозе. Стало быть замену нужно искать. А чего её искать, если вот он есть Луи Битрикс 24-й. Стоял сколько лет пез без дела и вот, поди ж ты, понадобился. Решили - “а давай-ка”. Попробовали его на демо-периоде - вроде ничего. Период быстро миновал и выяснилось, что да, версия бесплатная есть совсем не то, что монетизированная, количество “но” в первой чувствительно перевешивает количество “да”. Особенно ежели использовать её большей частью как корпоративный мессенджер, а не как CRM. Этих “но” пасаран может не сильно и много, зато крупные: поиска по чатам нет (и не предвидится - как любезно объяснили разработчики во Вконтакте). То есть по одному чату поиск произвести можно, но чтоб сразу по всем - нет, а если тех чатов несколько десятков? И кот кто запомнит куда он что писал, чтобы найти ранее писанное? Как так, не могут что ли командиры разработчики реализовать возможность давно реализованную практически у всех нормальных мессенджеров? Ну-и-ну…

Далее, в бесплатной версии доступ к переписке дается лишь на месяц, что нас, конечно, категорически не устроило и ни в какие ворота не влезло. Если бы в платной версии Битрикса был хотя бы вышеупомянутый поиск, не знаю как бы обернулось, возможно мы купили бы для корпоративных нужд Битрикс24, но с таким отношением разработчиков к пользователям - извините…

Итак, имея ввиду вышеизложенное, я по долгу службы своей ИТ-шной занялся поисками бесплатного корпоративного мессенджера, который мог бы закрыть наши потребности. Вы спросите, а что же Вотсап и Телеграм? Действительно, оба они могли бы выступать в качестве рабочих лошадок для внутриофисного взаимодействия, но мнения планктона работников офисного труда разделились и некоторые представители не горели желанием использовать личные аккаунты Вотсап и Телеграм в качестве рабочих. Хотя кто-то о мультиаккаунтности упоминал… В общем суммарным итогом всех этих офисных дискуссий стал поиск нового корпоративного мессенджера.

Путь этот, как к любой слономоське, “был долог и труден”. Он занял не один день и прошел в 3 итерации. Ведь найти нужно было бесплатный мессенджер, отвечающий требованиям к поиску и хранению информации. Вначале всё было относительно просто. В первой итерации я не сильно заморочился, почитал обзоры по функционалу и бесплатности мессенджеров, да и, по совету нашего программиста, поставил Дискорд. Он был ничего, но не прошло и пары недель после установки, как его заблокировали, та же участь ждала и пришедший во вторую итерацию поиска ему на смену Viber, при этом от установки до блокировки прошло ещё меньше времени.

Ну и вот, после всех мытарств “ко мне пришел последний, третий” - счастливая судьба преподнесла на блюдечке ЕГО - загадочный и ранее никому не известный корпоративный мессенджер Zulip. Как правильно - “Зулип” или “Залип” - не знаю, второе, конечно звучит лучше. Но некоторые потешаются под названием не по детски…

Первым главным аргументом Zulip было то, что он бесплатен (да, платные версии есть, но функционал практически одинаков в обоих (есть пара нюансов)).

По поводу возможности поиска по всем чатам информация отсутствовала, что вызвало закономерное желание потестировать животинку вживую. Выбор здесь был весьма неплох - у Zulip есть версии и для Windows и для Линукс и приложения для ПК, Андроида и Айфона, и в браузере он прекрасно работает. Естественно, было принято решение ставить Linux-версию на виртуальный сервер - своеобычно, как и любой уважающий себя сайт.

А на какой же площадке тестировать? Ведь покупать может и не придется… Первое, что приходит на ум - свой хостер (у меня Хостлэнд), у которого держу как свои сайты (уже не один десяток лет), так и корпоративные (пару лет), на разных серверах, разумеется - <a href="https://www.hostland.ru/?r=3b4b87fa">Хостинг Hostland</a>.

Вроде бы да, но установить Zulip можно только на виртуальный/выделенный сервер (тестовый период 3 дня), а не на виртуальный хостинг (тестовый период 30 дней), тестового периода 3 дня для меня маловато в плане тестирования мессенджера - пользователи должны хотя бы недельку его поюзать.

Пришлось порыться в хостерах на предмет длинных тестовых. Было “взвешено” и найдено лёгкими (в хорошем смысле) несколько и отобрано два. Сначала выбор пал на Сервероида - https://serveroid.com/ru/ - у них все реализовано относительно удобно, понятно и быстро. Но оказалось, почему-то, что у в доступных операционках не очень новые Линуксы для установки – Убунта например только 22-я, а Debian – 11-й, гм…

Вроде бы ничего страшного, но только вроде бы. Почему - читайте далее. В итоге этого “почему” пришлось брать тестовый сервер у другой компании - https://www.smartape.ru/

А потому что у Сервероида тестовый период месяц (с оговорками – смотря какую конфигурацию виртуального сервера выберешь!), но у, Смартейпа операционки поновее, к примеру, Debian 12, хотя интерфейс личного кабинета у Смартэйп сложнее и тестовый период недели, кажется в две….

Вроде бы что ж такого - на сайте разработчиков Zulip пишут, что Убунта 22 поддерживается, однако на практике установить на неё Zulip не удалось – вылезли ошибки в зависимостях.Чем с ними разбираться, лучше попробовать более новую версию, тем более, что я знаю, она у моего хостера есть. Это Debian 12, архиважно, Zulip сейчас не ставится на Дебиан меньше 12-го, ну и, соответственно, тестовую версию устанавливаем у смартэйп на Debian 12.

Итак, приступаем к установке.

Этап 0

Создаем у себя в панели управления доменом А и АААА записи для поддомена указывающие на ip сервера, на который устанавливаем zulip. Ну, например поддомен zulip.vashacompanya.ru После этого переходим к установке самого Zulip на виртуальный сервер (в нашем случае тестовый).

Этап 1

Ставим Zulip, естественно в консоли:

Скачиваем:

wget https://download.zulip.com/server/zulip-server-latest.tar.gz

(если wgetа нет - сначала установите его).

Распаковываем:

tar -xf zulip-server-latest.tar.gz

Устанавливаем:

./zulip-server-*/scripts/setup/install --certbot \ --email=admin@vashacompanya.ru --hostname=zulip.vashacompanya.ru

Э… Нет… Не установился… И почему? Многое приходило в голову. Какие только предположения не исследовались и не пробовались… Но итоге всё оказалось слишком просто. Выяснилось, что правильная строка установки без слэша! То есть вот такая!:

./zulip-server-*/scripts/setup/install --certbot --email=admin@vashacompanya.ru --hostname=zulip.vashacompanya.ru

Зачем в руководстве установщиков слэш - не знаю.

Кстати, руководство лучше смотреть здесь: https://zulip.readthedocs.io/en/latest/ - здесь поиск есть, а тут почему-то нет: https://zulip.com/help/

Руководство по установке здесь: https://zulip.readthedocs.io/en/latest/production/install.html

Установка запустилась, но опять застопорилась, вновь возникли трудности. Система тестовая, маломощная. И вот в консоли выдается сообщение: «No swap allocated; when running with < 5GB of RAM, we recommend at least 2GB of swap.» - то есть если оперативки меньше 5 Гб, нужен своп.

Что ж…. ладно. Ставим своп:

убеждаемся, что мы в корне сервера:

ls

если нет - поднимаемся на уровень выше – то есть в корень:

cd /

создаем новый своп:

dd if=/dev/zero of=/swapfile bs=1M count=4096

Ставим нужные права на файл:

chmod 600 /swapfile

Форматируем файл под своп:

mkswap /swapfile

Включаем своп:

swapon /swapfile

если надо, чтоб своп автоматически стартовал после перезагрузки сервера дописываем в конец файла /etc/fstab строку:

/swapfile none swap sw 0 0

После этого вновь запускаем установку Zulip.

Тестовая система не очень поворотливая, ставился Zulip примерно с полчаса (на рабочем - минут 10). В процессе установки будет выдано сообщение о готовности подтвердить соглашение при установке SSL-сертификата. Естественно, соглашаемся.

-2

В конце, если всё прошло без проблем, получаем строку с сообщением о том, что Zulip успешно стартовал со ссылкой на интерфейс управления:

-3

Открываем эту ссылку.

Здесь вводим все данные о своей организации:

-4

Завершаем регистрацию:

-5

Стадия 2

Заработало. Сайт, а вернее сайтовый интерфейс мессенджера открылся, управлять им уже можно. Но. Необходимо отправить приглашения будущим пользователям, чтобы они присоединились к команде. Здесь 2 возможности - либо отправляем пригласительную ссылку, либо сразу приглашение на мейл. Да и сам сервер Zulip о том же пишет: «Zulip необходимо отправлять электронные письма для подтверждения адресов пользователей и отправки оповещений. Узнайте, как настроить электронную почту. » Ссылка на приглашение пользователей в правом нижнем углу - “Пригласить в организацию”

-6

Хм, зацените интерфейс - по словам многих “почти из девяностых…”.

Так, а вот и окно приглашения - выбираем - ссылку создать или на конкретный мейл отправить приглашение:

-7

М-да… “узнайте как настроить” - долго это, лучше отправим-ка сразу приглашение!

Отправляем приглашение на почту, а оно не доходит…

В чём же дело?...

Конкретно на домене моей организации, для которого мы добавили поддомен zulip. отправка почты настроена через сервера mail.ru – так как доменная почта располагается именно на них – по многим причинам, главная из которых размеры почтовых ящиков (у некоторых - м-м-м… много места занимает…), ну и удобство управления этими ящиками. Так вот отправку через эти сервера и надо настроить.

Поэтому открываем по ftp и заполняем в файле «/etc/zulip/settings.py» соответствующие поля в разделе «Outgoing email (SMTP) settings.»:

ZULIP_ADMINISTRATOR = 'admin@vashacompanya.ru' (от чьего имени и через чей почтовый ящик отправляется почта)

EXTERNAL_HOST = 'zulip.vashacompanya.ru' (поддомен на котором установлен Zulip )

EMAIL_HOST = "smtp.mail.ru"

EMAIL_HOST_USER = "admin@vashacompanya.ru

Ещё нюанс: в файле конфигурации вместо EMAIL_USE_TLS = True ставим EMAIL_USE_SSL = True, а EMAIL_USE_TLS = True – закомменчиваем:

# EMAIL_USE_TLS = True

EMAIL_USE_SSL = True

EMAIL_PORT = 465

Сначала я попробовал порт 587 - порт не сработал для smtp, поэтому, согласно документации меилру поменял его на 465

Не забываем создать пароль для приложения для ящика меилру (в интерфейсе управления ящиком на меилру) то есть для этого ящика - admin@vashacompanya.ru и прописать этот пароль в файле zulip-secrets.conf который лежит там же, где и settings.py - «/etc/zulip/zulip-secrets.conf»:

email_password = kakoy-to-parol

Тестируем полученную конфигурацию:

su zulip -c '/home/zulip/deployments/current/manage.py send_test_email komu-to-herovato@vashacompanya.ru'

Если всё хорошо, на адрес указанный в тесте придет письмо. Но. Даже если оно и придёт, не обольщайтесь – не факт, что будущим пользователям мессенджера придут приглашения на регистрацию на их мейлы при отправке реального приглашения. Внимательно смотрите что тест напишет в консоль. Да, из теста может и да, а вот пользователям при отправке приглашений – все равно нет! Что за чёрт?

А всё потому, что есть в файле конфигурации и такая настройка:

NOREPLY_EMAIL_ADDRESS = "" – если этот адрес не указать явно, то тест noreply – писем отправится с адреса по умолчанию и провалится. Если указать его явно, подставив какой-либо адрес на своём домене, он отправится с указанного адреса (вернее попытается отправиться) и тоже провалится, так как чтобы отправить письмо из приложения (а zulip в данном случае будет считаться приложением) нужен пароль, а его прописывать некуда. Что за…. гм… история…

Сами разработчики рекомендуют: «мол, ребята, если не соображаете чё как делать – воспользуйтесь бесплатными серверами для транзакционной почты – там вам разжуют»

Ага, ну спасибо за совет…

Кстати, не забываем перезагрузить сервер, чтобы изменения конфигурации применились:

Перезапуск Zulip:

su zulip -c '/home/zulip/deployments/current/scripts/restart-server'

Ну хорошо, а нам-то что делать? Решаем вопрос быстро, хотя и неэлегантно. Ставим в качестве адреса «NOREPLY_EMAIL_ADDRESS» тот же самый ящик, что и в ZULIP_ADMINISTRATOR, что и в EMAIL_HOST_USER. Да, неэлегантно, зато быстро и работает. Если бы можно было просто указать пароль для почтового ящика в NOREPLY_EMAIL_ADDRESS - это было бы гораздо правильнее, но разработчики почему-то такой возможности не дали…И явно её в документации не указали…

После этого вновь тестируем конфигурацию

su zulip -c '/home/zulip/deployments/current/manage.py send_test_email komu-to-herovato@vashacompanya.ru'

И после этого, если всё нормально и все тесты прошли, отправляем приглашение на мейл

Кстати, как показала практика можно, конечно, и ссылку-то отправить на регистрацию, но она очень быстро “заканчивается” - пишет о блокировке пользователя примерно на сутки. Может тут дело в едином ip-шнике для всех пользователей организации… В общем ссылку даем, но готовимся рассылать приглашения на мейлы всем пользователям.

Кстати, а что же по поводу поиска по чатам? - Да, он, таки есть, но, к сожалению, “топорный” - не учитывает морфологию, не умеет искать по части слова. Если, например, слово было “синхрофазатрон” - то он его найдет лишь если набирать полностью “синхрофазатрон”, в ответ же на “синхро” и “трон” ничего не выдаст. Ну хоть так… А там поглядим…И ещё ограничение поиска - 10000 сообщений вроде бы… Но это должно быть решаемо…

А так… Ну да, интерфейса он не самого гламурного, но функционал неплохой, на твёрдую 4-ку, хранение данных - бесконечно, поиск, хоть и неказистый - есть. Вперёд, будем обживать новый мессендежер…