SSD Nodes Learn 🎉 VPS от $5.50/мес
Руководства Matt ConnorАвтор: Matt Connor

Self-hosted альтернативы Slack: сравнение решений

Сравнение Mattermost, Rocket.Chat, Synapse и Zulip по потреблению RAM, типам баз данных, настройке push-уведомлений и лицензиям. Анализ требований для 10 и 100 пользователей.

Какие self-hosted альтернативы Slack стоит использовать

Для небольшой команды внимания заслуживают Mattermost, Rocket.Chat, Matrix с Synapse и Zulip. Если вам нужен внутренний инструмент для команды на одном сервере, используйте Mattermost. Для публичного сообщества лучше подходит Zulip. Matrix с Synapse стоит выбирать только в том случае, если вам необходимо общаться с серверами, принадлежащими другим людям. Федерация — это единственная функция, которую не могут скопировать остальные, и именно она меняет вашу работу как администратора.

Списки функций не помогут выбрать между этими четырьмя решениями. Все они поддерживают каналы, ветки обсуждений, поиск, загрузку файлов и мобильные приложения. Разница заключается в том, что они требуют от вас ежемесячно: объем оперативной памяти, база данных, которую нужно поддерживать в рабочем состоянии, путь для push-уведомлений, который вы можете не контролировать, и лицензия, определяющая, доступна ли нужная вам функция бесплатно или за плату. Приведенное ниже сравнение основано на этих критериях для групп из 10 и 100 пользователей.

Что из себя представляет каждый из четырех продуктов

Mattermost — это сервер на языке Go с базой данных PostgreSQL. Один бинарный файл, одна база данных, один конфигурационный файл. Он работает подобно Slack, включая ветки обсуждений и slash-команды. С точки зрения администрирования это наименее примечательный вариант из четырех, что является комплиментом.

Rocket.Chat — это приложение на Node.js, работающее с MongoDB. Оно обладает самым широким набором функций в этом списке, включая голосовые и видеозвонки, а также омниканальный почтовый ящик, который собирает обращения клиентов из электронной почты и социальных сетей в единый интерфейс. Если этот функционал — основная причина вашего выбора, сначала сравните его с специализированной службой поддержки Chatwoot, поскольку чат-сервер для поддержки решает иные задачи, нежели чат-сервер для командной работы.

Matrix — это протокол, а не продукт. Synapse является эталонной реализацией сервера (Python, PostgreSQL), а Element — клиент, который использует большинство пользователей. Это единственный вариант в списке, при котором ваш сервер может взаимодействовать с серверами, которыми вы не управляете.

Zulip — это сервер на Python (Django и Tornado) с использованием PostgreSQL, RabbitMQ, memcached и Redis, которые устанавливаются как единое целое с помощью собственного скрипта. Его модель основана на темах внутри каналов, поэтому обсуждение, начатое во вторник, легко найти в пятницу. Версия 12.0 вышла в апреле 2026 года.

Объем ОЗУ и выбор базы данных для 10 и 100 пользователей

Все цифры в таблице ниже взяты из официальной документации проектов по состоянию на август 2026 года. Эти данные не являются результатами моих измерений и не вымышлены. Основа для каждой строки одинакова: минимальная конфигурация, опубликованная разработчиками, с учетом базы данных, если проект выделяет её в отдельный ресурс.

ChartRAM in the smallest deployment each project documents (vendor figures, August 2026)
The data behind this chart
[
  {
    "label": "Synapse",
    "published_ram_gb": 1,
    "notes": "Synapse install docs: at least 1 GB free RAM if you want to join large public rooms. PostgreSQL is required for production and is not sized."
  },
  {
    "label": "Mattermost",
    "published_ram_gb": 2,
    "notes": "Mattermost requirements: 1 to 1,000 users on 1 vCPU and 2 GB RAM, single server, database included."
  },
  {
    "label": "Zulip",
    "published_ram_gb": 2,
    "notes": "Zulip requirements: under 100 users on 1 CPU, 2 GB RAM and 2 GB swap. 100 users and above needs 2 CPUs and 4 GB."
  },
  {
    "label": "Rocket.Chat",
    "published_ram_gb": 8,
    "notes": "Rocket.Chat requirements: smallest published tier is 4 GiB for the app plus 4 GiB for MongoDB, rated up to 500 concurrent users."
  }
]

Структура строк различается, и это первый важный вывод. Значение 1 ГБ для Synapse — это нижний порог для процесса Synapse с условием: документация требует наличия как минимум такого объема свободной оперативной памяти для участия в крупных публичных комнатах. PostgreSQL в эту цифру не входит. Значение 2 ГБ для Mattermost относится ко всей машине, включая базу данных, и рассчитано на поддержку от 1 до 1000 пользователей на одном vCPU. Zulip указывает 2 ГБ ОЗУ и один процессор для нагрузки менее 100 пользователей, плюс 2 ГБ swap, а при 100 пользователях и более — 4 ГБ ОЗУ и два процессора. Rocket.Chat публикует самое большое значение в этом списке — 8 ГБ, так как приложение требует 4 ГБ, а MongoDB — еще 4 ГБ; этот уровень рассчитан на 500 одновременных пользователей.

При десяти пользователях все 4 систем работают на оборудовании, которое не требует особого внимания. При ста пользователях требования начинают различаться: Mattermost по-прежнему укладывается в свой уровень 2 ГБ, Zulip требует 4 ГБ и второй процессор, а минимальный задокументированный уровень Rocket.Chat остается неизменным — 8 ГБ, так как потребление памяти MongoDB определяется характеристиками машины, а не количеством ваших пользователей.

Выбор базы данных определяет будущие обновления в большей степени, чем повседневная производительность. Mattermost требует PostgreSQL 14 или новее и прекратил поддержку MySQL начиная с версии v11, поэтому установка на MySQL сегодня означает неизбежную миграцию в будущем. Synapse работает на SQLite, и в документации прямо указано, что SQLite подходит только для тестирования, так как демонстрирует низкую производительность в больших комнатах. Rocket.Chat 8 требует MongoDB 8.0, что означает, что обновление базы данных и обновление самого чата станут единым проектом, а не двумя отдельными задачами.

Что на самом деле дает VPS с 2 GB RAM

Тарифный план с 2 GB — это начальный уровень у большинства провайдеров, и он является реальным решением для двух из четырех перечисленных вариантов.

  • Mattermost подходит. Это единственный продукт, для которого производитель указывает именно такой объем памяти для работы до 1000 пользователей при условии размещения PostgreSQL на том же сервере. Десять человек на 2 GB будут работать комфортно.
  • Zulip подходит при наличии swap. Документация рекомендует использовать swap на любых системах с объемом менее 5 GB и предупреждает, что на машинах с малым количеством RAM возникают ошибки нехватки памяти (out of memory) во время обновлений, где tools/webpack — это этап, на котором происходит сбой. Это реальная проблема, с которой вы столкнетесь при обновлении, а не при установке.
  • Synapse подходит, пока нагрузка невелика. Потребление ресурсов в простое невелико. Проблема заключается в скачках нагрузки, и раздел о федерации ниже объясняет, откуда они берутся.
  • Rocket.Chat — это решение, которого стоит избегать при 2 GB, и причина кроется в движке хранения MongoDB. WiredTiger рассчитывает размер своего внутреннего кэша как большее из двух значений: 50% от (RAM минус 1 GB) или 256 MB. Таким образом, на машине с 2 GB он резервирует около 512 MB еще до запуска Node.js. Результатом не будет явный отказ в работе. Он установится, запустится, будет замедляться по мере накопления истории, и в конечном итоге механизм kernel out of memory killer завершит процесс, который в этот момент потребляет больше всего памяти.

Проверьте, что у вас есть на самом деле, прежде чем принимать решение, так как провайдеры считают RAM иначе, чем free:

free -h
swapon --show

Помните, что чат-сервер — не единственное приложение на сервере. TLS (transport layer security) termination, резервное копирование и среда выполнения контейнеров также требуют памяти. Размещайте выбранный сервер за обратным прокси, в котором вы разбираетесь, например Nginx, Caddy или Traefik, а если вы используете контейнеры, то основы Docker Compose для VPS — это то, с чего стоит начать настройку.

Нужен ли мобильным приложениям собственный сервер push-уведомлений

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

Механизм работы следующий. Apple Push Notification service (APNs) и Firebase Cloud Messaging (FCM) принимают уведомления только от владельца учетных данных для подписи конкретного приложения. Ваш сервер не может отправлять push-уведомления в приложение, которое вы не собирали самостоятельно. Поэтому self-hosted сервер чата, использующий сборку из App Store, должен передавать уведомления через шлюз вендора, который и устанавливает правила игры.

  • Mattermost. Бесплатный вариант — Test Push Notification Service (TPNS) по адресу https://push-test.mattermost.com. В документации указано, что он не рекомендуется для production и не имеет соглашения об уровне обслуживания (SLA). Он работает только со сборками из App Store и Play Store. Hosted Push Notification Service (HPNS) предназначен для production и требует платной подписки. Третий путь — самостоятельная сборка push-прокси, что потребует создания собственных сборок приложения с вашими собственными учетными данными APNs и FCM.
  • Rocket.Chat. Для работы push-уведомлений необходимо зарегистрировать рабочее пространство в Rocket.Chat Cloud. Для community-версий установлено ограничение в 10 000 push-уведомлений в месяц. Это примерно 330 уведомлений в день на всё рабочее пространство. Когда квота исчерпана, уведомления перестают приходить до начала следующего месяца, что воспринимается пользователями как неисправность приложения.
  • Matrix с Element. Synapse отправляет уведомления на push-шлюз, а официальные приложения Element настроены на работу со шлюзом, который matrix.org поддерживает по адресу https://matrix.org/_matrix/push/v1/notify. Полезная нагрузка содержит идентификаторы события и комнаты, а не текст сообщения; приложение запрашивает контент с вашего сервера, поэтому шлюз видит только метаданные, а не содержание переписки. Запуск собственного шлюза Sygnal поддерживается, но требует сборки и распространения собственных приложений. На Android есть промежуточный вариант: UnifiedPush с сервером ntfy, который вы хостите самостоятельно.
  • Zulip. Бесплатный тариф включает сервис мобильных push-уведомлений для 10 пользователей. При количестве пользователей более 10 потребуется платный тариф, однако бесплатный план Community покрывает потребности многих некоммерческих организаций. В Zulip 12.0, вышедшем в апреле 2026 года, добавлено сквозное шифрование (E2EE) для полезной нагрузки push-уведомлений.

При десяти пользователях каждый из этих продуктов предоставляет работающие уведомления бесплатно. При ста пользователях ситуация меняется: Zulip требует платный тариф, Mattermost продолжает работать на тестовом сервисе без SLA и поддержки, ежемесячный лимит Rocket.Chat становится ограничивающим фактором, а на Matrix это никак не влияет, так как шлюз остается бесплатным.

Какие из них предоставляют единый вход (SSO) бесплатно

Единый вход (SSO) — это область, где бизнес-модель open core проявляется наиболее отчетливо.

  • Zulip включает поддержку SAML (security assertion markup language) и LDAP (lightweight directory access protocol) в self-hosted версии сервера без дополнительной платы. Отдельного платного уровня для этого не существует.
  • Synapse поддерживает OpenID Connect (OIDC), SAML и CAS в своем конфигурационном файле бесплатно. В новых инсталляциях все чаще используется Matrix Authentication Service — отдельный сервис с односторонней миграцией из классической аутентификации Synapse, поэтому планируйте этот переход заранее, а не по факту.
  • Rocket.Chat в версии community edition поддерживает базовую авторизацию через LDAP и SAML. Синхронизация расширенных атрибутов пользователя, сопоставление групп и команд, а также фоновая синхронизация требуют лицензии enterprise.
  • Mattermost в бесплатной версии Team Edition предоставляет только GitLab OAuth. SAML, AD/LDAP и OpenID Connect являются платными функциями.

Если вы планируете использовать несколько сервисов с единой учетной записью, установите self-hosted провайдер идентификации Authentik перед ними и проверьте, какие из этих четырех приложений могут взаимодействовать с ним в рамках имеющейся у вас лицензии.

Во что на самом деле обходится федерация

Федерация — это причина существования Matrix. Ваш пользователь присоединяется к комнате, размещенной на чужом сервере, и общается с людьми, чьи учетные записи находятся там же, подобно тому, как почтовые серверы обмениваются письмами. Ни один другой вариант здесь этого не делает. Если вам это нужно, ничто другое на этой странице не станет заменой.

Это также причина, по которой Synapse представляет собой особый тип нагрузки. Когда ваш пользователь присоединяется к федеративной комнате, ваш сервер получает копию состояния этой комнаты и ее событий, а также кэширует медиафайлы, которые публикуют пользователи на других серверах: аватары, изображения и файлы. Использование диска определяется комнатами, которые вы не создавали, и людьми, у которых нет учетных записей на вашем сервере. Именно поэтому установки Synapse накапливают медиахранилище, объем которого значительно превышает объем сообщений, отправленных их собственными пользователями. Это также причина, по которой присоединение к большой публичной комнате является специфической операцией, для которой в документации указаны требования к оперативной памяти.

Установите политику хранения данных в первый же день, а не в тот день, когда диск окажется заполнен:

media_retention:
  local_media_lifetime: 90d
  remote_media_lifetime: 14d

Synapse получил media_retention в версии 1.61 с разделением времени жизни для локальных и удаленных медиафайлов. Удаленные медиафайлы — это кэш, поэтому, если пользователь снова запросит удаленный файл, Synapse повторно запросит его с сервера-источника. Локальные медиафайлы не являются кэшем, поэтому короткий local_media_lifetime приведет к безвозвратному удалению загрузок ваших собственных пользователей.

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

Как проходят обновления

Zulip — самый простой вариант. Один скрипт, а задокументированное время простоя составляет менее 30 секунд, если не требуется масштабная миграция базы данных. Установка и обновление выглядят следующим образом (вы запускаете их на сервере):

cd $(mktemp -d)
curl -fLO https://download.zulip.com/server/zulip-server-latest.tar.gz
tar -xf zulip-server-latest.tar.gz

Запускайте установщик от имени root. Флаг --push-notifications регистрирует сервер в службе push-уведомлений для мобильных устройств во время установки; в этот момент система попросит вас принять условия использования, поэтому ознакомьтесь с ними до начала процесса.

sudo ./zulip-server-*/scripts/setup/install --push-notifications --certbot \
    --email=YOUR_EMAIL --hostname=YOUR_HOSTNAME

Последующие обновления выполняются с тем же архивом tarball и одной командой:

curl -fLO https://download.zulip.com/server/zulip-server-latest.tar.gz
sudo /home/zulip/deployments/current/scripts/upgrade-zulip zulip-server-latest.tar.gz

Mattermost предсказуем. Замените бинарный файл, перезапустите сервис, и миграции выполнятся при старте. Начиная с релизов августа 2025 года, ветка Extended Support Release (ESR) выпускается каждые 9 месяцев и поддерживается в течение 12 месяцев; обновления между версиями ESR являются протестированным путем. Пропуск нескольких версий ESR поддерживается, но не тестируется, что на практике означает, что тестировать это придется вам.

Rocket.Chat объединяет три обновления в одно. По состоянию на август 2026 года актуальной является ветка 8.x (версия 8.7.0 выпущена 6 августа 2026 года), для которой требуются MongoDB 8.0 и соответствующая версия Node.js. Пропуск мажорной версии — это путь к ситуации, когда приложение откажется открывать базу данных. В руководстве по установке Rocket.Chat через Docker Compose эти зависимости зафиксированы, что является основным аргументом в пользу контейнеризации для данного продукта.

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

Условия лицензирования простыми словами

Mattermost распространяет скомпилированные сборки Team Edition по лицензии MIT, в то время как исходный код предлагается по лицензии AGPLv3 или коммерческой лицензии. Часть репозитория находится под лицензией Mattermost Source Available License, которая требует платной лицензии для использования в промышленной среде. Rocket.Chat распространяется по лицензии MIT, за исключением каталогов ee/, на которые распространяется собственная корпоративная лицензия. Synapse перешел с Apache 2.0 на AGPLv3 начиная с версии 1.99.0, а участники проекта подписывают CLA, позволяющее Element продавать исключения из этой лицензии. Zulip распространяется по лицензии Apache 2.0 и не имеет корпоративного каталога, поэтому его поддержка SSO не содержит ограничений.

Практический вывод: лицензия AGPL важна только в том случае, если вы планируете изменять сервер и предоставлять его другим пользователям как сервис. Для небольшой команды гораздо важнее модель open core, то есть понимание того, какие функции отсутствуют в бесплатной сборке. В Zulip их меньше всего, в Mattermost — больше всего.

Что выбрать

Внутренний инструмент для команды. Mattermost. У него минимальные системные требования, максимально предсказуемые обновления и привычный интерфейс, не требующий обучения. Планируйте покупку платной подписки на тот день, когда потребуется SSO, так как этот момент рано или поздно наступает для большинства команд.

Сервер для сообщества. Zulip. Система тем позволяет сохранять читаемость активного публичного канала даже спустя месяцы, поддержка SAML и LDAP предоставляется бесплатно, а обновление выполняется одной командой. Если ваше сообщество больше ориентировано на публикации и ответы, чем на чат в реальном времени, сначала рассмотрите форумное ПО для self-hosted, так как форумы лучше индексируются поисковиками и не требуют инфраструктуры для push-уведомлений. Выбирайте Rocket.Chat, если вам нужны функции голосовой и видеосвязи, омниканальность, и вы готовы выделить приложению 8 GB оперативной памяти, как того требует документация.

Сеть с необходимостью взаимодействия. Matrix с использованием Synapse и Element. Будьте готовы к росту объема медиафайлов, настройте политику хранения данных с первого дня, выделите PostgreSQL и больше дискового пространства, чем планировали изначально. Вы получите реальную пользу от общения с серверами, которыми вы не управляете. Использование Synapse для команды, которая не планирует федерацию, означает неоправданные затраты ресурсов.

FAQ

Какая self-hosted альтернатива Slack лучше всего подходит для небольшой команды?

Mattermost — для большинства внутренних команд. Его документация подтверждает работу от 1 до 1000 пользователей на одном vCPU и 2 GB RAM с PostgreSQL на той же машине, поэтому он подходит под базовые тарифы VPS большинства провайдеров. Нюанс заключается в едином входе (SSO): бесплатная Team Edition поддерживает только GitLab OAuth, а SAML, AD/LDAP и OpenID Connect требуют платной подписки. Если бесплатный SSO важнее интерфейса в стиле Slack, используйте Zulip.

Можно ли запустить self-hosted чат-сервер на VPS с 2 GB RAM?

Mattermost — да, Zulip — тоже, если добавить swap (документация Zulip рекомендует это при объеме менее 5 GB). Rocket.Chat вас разочарует: движок MongoDB WiredTiger резервирует под кэш либо 50% от (RAM минус 1 GB), либо 256 MB — в зависимости от того, что больше. Таким образом, около 512 MB на сервере с 2 GB RAM будут заняты еще до запуска приложения. Он установится, но по мере накопления истории производительность упадет, что приведет к завершению процесса из-за нехватки памяти (OOM kill). Минимальные системные требования для Rocket.Chat составляют 4 GiB для приложения и 4 GiB для MongoDB.

Нужен ли self-hosted чат-серверам собственный сервер push-уведомлений?

Обычно нет, так как APNs от Apple и FCM от Google принимают уведомления только от того, кто подписал приложение, поэтому официальное приложение использует шлюз разработчика. Условия различаются. Mattermost предлагает бесплатный тестовый сервис без SLA и платный хостинг. Rocket.Chat ограничивает бесплатные рабочие пространства 10 000 push-уведомлений в месяц, после чего доставка прекращается до начала следующего месяца. Zulip включает push бесплатно для 10 пользователей, свыше этого требуется платный тариф. Домашние серверы Matrix отправляют уведомления через шлюз, используемый приложениями Element, бесплатно. Собственный шлюз нужен только в том случае, если вы распространяете собственные сборки приложений.

Стоит ли хостить Matrix и Synapse для команды, которая не общается с другими серверами?

Нет. Федерация — это основное назначение Synapse, и именно она делает его тяжелым в эксплуатации. При вступлении в комнаты на других серверах происходит загрузка их состояния и кэширование медиафайлов на ваш диск, поэтому объем занимаемого места растет независимо от активности ваших пользователей. Настройте media_retention с коротким remote_media_lifetime до того, как это произойдет. Команда, которая общается только внутри себя, получает эксплуатационные расходы без каких-либо преимуществ, а Mattermost или Zulip справятся с той же задачей на менее мощном оборудовании.

Какая self-hosted альтернатива Slack поддерживает бесплатный единый вход (SSO)?

Zulip и Synapse. Zulip включает SAML и LDAP в состав self-hosted сервера бесплатно, а Synapse поддерживает OpenID Connect, SAML и CAS в конфигурации (в новых установках используется отдельный Matrix Authentication Service). Community-версия Rocket.Chat поддерживает базовый вход через LDAP и SAML, но синхронизация атрибутов, сопоставление групп и фоновая синхронизация доступны только в Enterprise-лицензии. Бесплатная Team Edition от Mattermost поддерживает только GitLab OAuth.