СоХабр закрыт.

С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.

| сохранено

H Как развернуть для своей команды архив slack сообщений c синхронизацией и поиском в черновиках Tutorial

Я сам сторонник идеи что если нравится продукт то нужно покупать его и своими деньгами поддержать программистов.
Но иногда бывает что компания на этот софт денег тратить не может или не хочет. Особенно сложно платить от 100$ в месяц когда есть бесплатные аналоги или если чаты используются в некоммерческих целях.

Я опишу как можно развернуть сервис для хранения истории всех публичных сообщений вашей команды в slack и избавиться от основного, неприятного, иногда выбешивающего ограничения — up to 10k of your team’s most recent messages (можно смотреть и искать только среди 10 000 последних сообщений)

Среди готовых решений есть:


По подробнее расскажу про последнее решение, оно мне больше всего понравилось.

Как можно легко заметить основная идея принадлежит Lê Việt Hồng ( github.com/suoinguon ) я взял его решение за основу и начал добавлять туда разные фичи.
Так как это обычное Django приложение то новые фичи туда добавлять оказалось очень просто.

По сравнению с оригиналом теперь появились:
  • Полнотекстовый поиск по истории django-watson
  • Индексация только публичных групп и пониженный уровень токена только с необходимыми правами
  • Форматирование сообщений как в slack, включая смайлы django-emoji
  • Обновление всех библиотек и поддержка django 1.10
  • Импорт данных из выгружженого архива
  • Исправлены недочеты в логике получения данныз по API
  • Добавлены новые страницы — сообщения пользователя, статистика с помощью django orm
  • Добавлена навигация для того чтобы можно было отправить ссылку на конкретное сообщение c учетом пагинации django-pagination


Среди дальнейших планов хочется отметить:
  • Поддержать работы с несколькими командами
  • Улучшить работу с отображением файлов
  • Добавить возможность сложного поиска
  • Добавить больше веселой или полезной статистики


Создание сервера


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

Например, что можно запустить быстро и дешево:
vscale.io


www.digitalocean.com


aws.amazon.com/ru/ec2

(если регистрируетесь первый
раз то первый год одной машины будет бесплатно)

0.0065$ в час
512mb
1 vcpu
Ebs disk


Итого можно получить отдельный сервер за 200 рублей в месяц или вообще бесплатно на первое время.
Я проверял скрипт на Centos7 поэтому при создании выбираем её, узнаем её ip адрес или доменное имя и запоминаем их, они потребуется на следующем шагу.

Регистрируем slack приложение



Далее нам нужно зарегистрировать slack приложение для доступа к API

  1. Заходим на страницу api.slack.com/applications
  2. Создаем новое приложение


  3. Добавляем адрес только что созданного сервера в oauth redirects


  4. Сохраняем себе Client ID и Client Secret




Запускаем приложение


  1. Подключаемся по ssh на сервер
  2. Запускаем команду
  3. curl -O https://raw.githubusercontent.com/menemy/slack-backup/master/provisioning_on_centos7.sh
    
  4. Исправляем три настройки в начале скрипта
  5. SLACK_CLIENT_ID=[your_client_id]
  6. SLACK_CLIENT_SECRET=[your_client_secret]
  7. DOMAIN=[your_domain]
  8. Исправляем права и запускаем
  9. chmod 777 provisioning_on_amazonlinux.sh
  10. sudo ./provisioning_on_amazonlinux.sh
  11. Всё, после этого приложение запущено и доступно по вашему адресу, история синхронизируется раз в пять минут
  12. Нужно зайти на сайт и предоставить доступ в свой аккаунт slack


Опционально, восстанавливаем историю сообщений


Если вы узнали об этом решении поздно — не беда, slack на самом деле продолжает хранить вашу историю и позволяет выгрузить всю историю в виде zip архива.
Но это только для администраторов группу.

  1. Зайдите на страницу my.slack.com/services/export
  2. Создайте выгрузку
  3. Дождитесь окончания
  4. Обновите страницу и скачайть zip файл
  5. Загрузите файл на сервер и выгрузите в папку /usr/local/src/slack-backup/full_history/
  6. Запустите команду python /usr/local/src/slack-backup/manage.py restore_backup
  7. Дождитесь окончания, это может занять время




Буду рад если мои старания будут полезны. Если есть вопросы по работе или необходима помощь с установкой буду рад помочь в комментариях.

комментарии (23)

0
+1 –1
SlavikF ,  
Есть ещё вот такая open source альтернатива Slack:
https://www.mattermost.org/
без подобных ограничений и необходимости пилить костыли.

Сам сёрвис и веб-приложение работает без проблем. Я столкнулся со сложностью конфигураций push-notifications для мобильных приложений: там надо ставить для этого отдельный push-сервис, и потом связывать его с Googe и с Apple… Я уже не стал возиться.
+1
script88 ,  
я бы не сказал, что он работает без проблем. Лично у меня были проблемы с отображением gui(под linux), не сворачивался в трей и как-то крито срабатывали нотификации. Сам по себе продукт очень сырой.
–1
buran1 ,  
Упростите инсталляцию, сделайте так чтобы спрашивало при инсталляции те самые 3 параметра, которые в скрипте надо править, тогда тех, кто будет юзать Ваше приложение будет больше и фидбэка будет больше, если конечно хотите развивать его(Ваш прроект) дальше…

P.S.
Сам я слак не юзаю, знакомился как-то, он мне показался через чур замудрённым в плане UI, между слаком и хипчатом всё таки выбрал последний, у него были менее жесткие ограничения на бесплатном уровне. Тем не менее у хипчата тоже ограничения по хранению истории, ноя ограничился написание простого скрипта стнкующего по апи в sqlite хистори, до написания какого-либо WUI так руки и не дошли…
+1
enemy_spb ,  
Спасибо за замечание, сделал интерактивную версию скрипта
curl -O https://raw.githubusercontent.com/menemy/slack-backup/master/provisioning_on_centos7_interactive.sh
0
vetash ,  
Можно сделать альтернативный клиент на нод-вебките, вставить куда-нибудь див с инпутом поиска и отправлять запросы на апи своего сервера :D
0
CyboMan ,  
Тоже решал эту проблему. Написал на node.js/express 10-строчник который отправляет все это в Logstash-Elasticsearch-Kibana крутящиеся в докере. Последняя решила проблему морды для поиска. На все про все — час возни. При желании легко написать бота для slack который будет прямо в чате и искать через ES API.

Если найду этот 10-строчник, поделюсь, самого сервиса давно нет.
0
stogov ,  
Индексация только публичных групп и пониженный уровень токена только с необходимыми правами

Т.е. поиск по приватным группам не производится?
0
enemy_spb ,  
1) Приватные группы по умолчанию не выгружаются при экспорте
2) Не хочется брать на себя ответственность хранения чей то публичной переписки
0
stogov ,  
1) А вообще таковая возможность имеется?

У нас бОльшая часть групп — приватные, поэтому это критичная фича.
0
shutkarmannbii ,  
Так же как и DM, а вот хранит ли это чудо именно direct message history? а то в моём случае только это и нужно
0
enemy_spb ,  
Оригинал хранит приватные группы. Можете посмотреть в его сторону https://github.com/snakazawa/slack-backup

Или посмотрите на один из проектов которые я в начале привел. Они чисто для личного использования скачивают. Просто очень скользкий момент хранения приватных сообщений без шифрования на сервере с доступом админа сервера.
–1
ivlevdenis_ru ,  
Говнокод! :(
+1
enemy_spb ,  
Вам шашечки или ехать?
0
stankevichEvg ,  
Хочу пользоваться крутым но платным продуктом, а денег нет или не хочу платить, а тут еще есть аналоги бесплатные и жаба душит еще сильнее => надо хакнуть
Узнаю русского человека! )
0
enemy_spb ,  
Так никто не хакает ничего)
Никакие ограничения slack не обходятся. Просто используется его API для того чтобы хранить копию своих сообщений.

И это не только для бесплатности, но может быть использовано как бекап своих сообщений на черный день.
0
buran1 ,  
О как, а расскажите, пожалуйста, если не секрет, сами Вы много приобрели платных продуктов?

Пользоваться все хотят, купить или платить каждый месяц не все готовы, вполне понятно, что на бесплатных планах урезано всё, но никто и не говорит, что это плохо и надо «хакнуть», речь идёт о банальном хранении своей переписки, кому-то важно хранить всю хистори и лимита в 10к сообщений(или сколько там у слака на бесплатном плане) мало, вот народ и придумывает способы решить это.
0
enemy_spb ,  
Для личного использования я всё покупаю, для мобильного все за деньги, для мака всё за деньги, единственное пришлось отказаться от фотошопа и заменить его на Pixelmator. Есть разные подписки которые то же ежемесячно оплачиваются.

Вы просто путаете мои личные траты и траты на софт на работе где решают другие люди и лицензии стоят других денег.
0
buran1 ,   * (был изменён)

Прошу прощения, если я Вас задел, мой комментарий был адресован stankevichEvg, а не Вам.


Я также разделяю Ваши взгляды о тратах "на работе" и "для себя", более того, у меня был опыт ещё более грустный работы в одной конторе: там юзалось исключительно всё бесплатное, чтобы не платить и из месенджеров юзался только скайп, а мне хотелось привнести в работу больше удобства: я загорелся настроить работу через хипчат/слак чтобы все уведомления с редмайна приходили в чат, чтобы все ошибки на проекте с sentry также прилетали в чат, чтобы с gitlab тоже всё прилетало в чат и чтобы деплой делался ботом =)


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

0
lex-tsy ,  
Благодарю! Полезная фича для слака.
Осталось только разобраться с https в uwsgi.
0
enemy_spb ,   * (был изменён)
http://uwsgi-docs.readthedocs.io/en/latest/HTTPS.html
Думаю можно так, но вообще для чего то серьезного лучше оставить в uwsgi только python, остальное вынести в nginx

Среди дальнейших шагов для улучшения безопасности в settings_local.py
  • Нужно выключить дебаг (DEBUG=False)
  • Заполнить ALLOWED_HOSTS
  • Изменить SECRET_KEY
  • Заполнить ADMINS

И установить fail2ban для веб сервера и ssh
0
shann ,  
Простите, а куда делся provisioning_on_amazonlinux.sh?
Вижу on_centos7, on_centos7_interactive, а также упоминание provisioning_on_amazonlinux.sh, но только в README.md
0
enemy_spb ,  
Удалил, так как не было возможности проверить самому. Как будет возможность протестирую и выложу.
0
shann ,  
Кстати, после мелких правок provisioning-скрипта завелось и под дебиан (правда без пакета uwsgi-router-http), по крону смотрю парсится раз в 5 минут, но у меня по наблюдениям история синхронизируется только через час, хотя по логам ошибок никаких не вываливается.
И кстати — большое спасибо за решение, понравилось и очень удобно.