Summary: Из-за проблем со Slack нам нужно было искать альтернативу, а терять накопленные наработки не хотелось. Мы нашли способ переехать относительно безболезненно и с сохранением данных — рассказываем, как это сделали.
Приветствую, уважаемые читатели Хабра. Меня зовут Иван, я руковожу направлением омниканальных решений в Лиге Цифровой Экономики. На старте одного из проектов около шести лет назад мы с заказчиком решили, что будем вести все проектные коммуникации в Slack. На тот момент для нашей небольшой команды стоил он не так дорого, да еще и был удобнее, чем альтернативные мессенджеры.
Шли годы, наши с заказчиком команды расширялись, а Slack становился не просто мессенджером, а огромной базой знаний: он оброс всевозможными ботами (как готовыми, так и самописными) и по сути превратился в цифровое рабочее место для каждого сотрудника.
Но все хорошее когда-нибудь заканчивается. Так произошло и с нашим Slack. В 2022 году появились первые новости о блокировках воркспейсов у некоторых российских компаний. Позже возникли и другие трудности, например, нельзя было оплатить подписку российскими картами.
Сохранялись серьезные риски:
Могла потеряться вся накопившаяся база знаний и боты для комфортной работы.
Была вероятность лишиться удобного и привычного мессенджера.
Иностранный облачный продукт было невозможно контролировать, к нему появилось недоверие: он показал свое отношение к пользователям, заблокировав несколько крупных воркспейсов без суда и следствия.
В этот момент мы начали думать об альтернативах.
Новый мессенджер должен был соответствовать нескольким важным критериям:
Возможность использования on-premise без подписок и оплаты.
Open Source с большим комьюнити для того, чтобы мы могли находить ответы на интересующие вопросы и кастомизировать необходимое.
Возможность импортировать в новый мессенджер историю из Slack.
Интерфейс, похожий на Slack, и привычные функции.
В этом посте не буду приводить сравнительную таблицу: единственным мессенджером, который удовлетворял бы нашим критериям, оказался Mattermost.
Я в деталях расскажу, как мы подошли к вопросу переезда и как решали возникшие в процессе проблемы. Не претендую на абсолютную правильность, но все работает уже около полугода, и довольно хорошо.
1. Установка Mattermost (проблем не возникло)
Установка БД:
sudo apt install postgresql postgresql-contrib
Установка приложения:
sudo wget https://releases.mattermost.com//mattermost--linux-amd64.tar.gz
sudo tar -xvzf mattermost*.gzСоздание сервиса:
sudo nano /lib/systemd/system/mattermost.service
Балансировка и HTTPS:
sudo apt install nginx
sudo apt install certbot
sudo certbot certonly —standalone -d <space_url>Более детально на примере Ununtu 20.04 смотрите здесь.
2. Базовое администрирование
Запуск/остановка/перезапуск:
sudo systemctl start mattermost.service
sudo systemctl restart mattermost.service
sudo systemctl stop mattermost.serviceФайл конфигурации:
/opt/mattermost/config/config.json
@mm-01:/opt/mattermost/config$ ll@mm-01:/opt/mattermost/logs$ cd /opt/mattermost/config/
@mm-01:/opt/mattermost/config$ ll
total 40
drwxrwxr-x 2 mattermost mattermost 4096 May 24 18:19 ./
drwxrwxr-x 12 mattermost mattermost 4096 Mar 25 08:17 ../
-rw-rw-r-- 1 mattermost mattermost 1069 Mar 15 15:58 cloud_defaults.json
-rw--w---- 1 mattermost mattermost 21561 May 24 18:19 config.json
-rw-rw-r-- 1 mattermost mattermost 243 Mar 15 15:58 README.md
3. Экспорт из Slack
Мы собрали важные каналы в Slack (публичных и приватные) для переноса истории сообщений в Mattermost. Тут сразу скажу, что нам важны были преимущественно сообщения, а не медиаконтент, поэтому его переносить мы не стали.
Однако важно было как-то забэкапить и контент из Slack, чтобы при крайней необходимости была возможность к нему обратиться.
Мы изучили различные инструменты для бэкапирования и миграции, даже рассмотрели вариант собственного написания скриптов. В итоге решили воспользоваться инструментом backupery.
Купили лицензию, добавили системного пользователя в нужные приватные каналы и экспортировали историю сообщений. На выходе получилось два артефакта: файл для дальнейшего импорта в Mattermost, а также файлы HTML и папки с контентом (при открытии index.html можно ходить по чатам и качать контент).
4.Импорт в Mattermost
Рекомендуется сначала протестить импорт/экспорт на тестовых Slack/Mattermost!
Для преобразования экспорта из Slack понадобится инструмент mmetl.
Для упрощения работы с файлами можно добавить каталог с утилитами в $PATH и работать с файлами из любой директории.
export PATH="/opt/mattermost/bin:$PATH"
Сначала необходимо преобразовать экспорт в формат для Mattermost.
mmetl transform slack --team <team_name> --file slackExport.zip --output mattermost_import.json
zip mattermost-import.zip mattermost_import.json
Перед выполнением следующих команд надо авторизоваться через mmctl.
mmctl auth login https://chat.address.ru --username <username> --password <password>
Сначала следует загрузить получившийся файл.
mmctl import upload ./mattermost-import.zip
После загрузки проверить, есть ли он в списке файлов импорта, скопировать сгенерированное инструментом имя документа и начать сам процесс.
mmctl import list available
mmctl import process <id>_mattermost-import.zip
Статус можно проверить, использовав job id, который выдаёт прошлая команда:
mmctl import job show <job_id> --json
При успешном импорте должны появиться аккаунты пользователей и каналы.
Если учётные записи деактивированы в Slack, они снова станут активными в Mattermost. Необходимо отключить их вручную.
5. Удаление лишних пользователей через CLI
Документация по mmctl находится здесь.
Репозиторий утилиты — здесь.
Перед выполнением команд сначала надо авторизоваться через mmctl.
Перед выполнением команд сначала надо авторизоваться через mmctl.
./mmctl auth login https://chat.address.ru --username <username> --password <password>
Удаление пользователя (больше команд здесь):
./mmctl user delete <id> --confirm
6. Установка плагинов (на примере remind)
Стоит отметить, что большая часть нужных плагинов может быть установлена через GUI (в клиенте нужно перейти в раздел Marketplace и инсталлировать необходимое). Однако через GUI ставится не все, поэтому далее привожу команду, которая позволяет сделать это через CLI (на примере remind, он позволяет создавать различные напоминания).
./mmctl plugin add /opt/com.github.scottleedavis.mattermost-plugin-remind-0.4.5.tar.gz
7. Настройка привычного интерфейса и инструментария
Включаем Threads как в Slack (начиная с версии 7.2, включается в консоли администрирования для всех, в предыдущих каждому пользователю нужно делать это самостоятельно).
Settings -> Display -> Collapsed Reply Threads (Beta) -> On -> Save
Оформление (цветовая тема) как в Slack:
Settings -> Display -> Theme -> Custom Theme
Нажимаем на ссылку Import theme colors from Slack. В открывшемся поп-апе вставляем, например, следующее:
#3F0E40,#350d36,#1164A3,#FFFFFF,#350D36,#FFFFFF,#2BAC76,#CD2553,#350d36,#FFFFFF
Сохраняем. Либо же сразу вставляем тему в окно “Copy and paste to share theme colors”.
Большое количество тем есть на нескольких порталах: для Slack, для Mattermost.
Групповое уведомление (аналог @group в Slack)
Первый вариант.
Групповое тегание (мы называем это "собакнуть"