Zerta

Открытый исходный код XMPP

Zerta на Go.

XMPP-сервер на Go, сборка v0.1.9. Протестирован набором тестов на соответствие compliance.conversations.im. Apache 2.0. Для команд, которым нужны федерация, мобильные клиенты и операционный контроль без экзотического стека выполнения.

  • Тест на соответствие: compliance.conversations.im
  • Сборка v0.1.9
  • Apache 2.0
  • Единый бинарник на Go

Доверие

Факты, а не витрина.

Zerta — это жёсткий форк Jackal, развивающийся как независимый проект под Apache 2.0. На этой странице остаются только утверждения, подтверждённые репозиторием.

v0.1.9

Тест на соответствие

Проверено набором тестов на compliance.conversations.im, полный отчёт там.

2.0

Лицензия Apache

Разрешительная open-source лицензия ещё до того, как первый прототип превратится в совещание по лицензированию.

Go

Понятный эксплуатационный стек

Сборка, отладка и деплой вписываются в обычный SRE- и Go-инструментарий.

SASL2

Современная аутентификация

SASL2, Bind2 и FAST для актуальной аутентификации клиента.

Почему Zerta

Для тех, кто хочет читать свой стек.

Zerta не конкурирует обещаниями возраста или масштаба. Преимущество — контролируемая технология: Go, понятная лицензия, привычный мониторинг и backend-ы инфраструктуры на выбор.

Go вместо специализированного рантайма

Кодовая база, которую можно собрать, изучить и отладить стандартным Go-инструментарием.

Apache 2.0 вместо лицензионных трений

Подходит для расширений, SaaS-эксплуатации и интеграции в продукт без ранней неопределённости copyleft.

Prometheus и pprof

Никакого отдельного острова дашбордов. Метрики и профили идут в тот же стек, что уже использует эксплуатация.

Пять backend-ов кластера

Redis, PostgreSQL, NATS, Raft или etcd: архитектура следует за вашей инфраструктурой, а не наоборот.

Функции

Текущий объём, сгруппированный по эксплуатационному взгляду.

Список функций намеренно технический. Никаких логотипов клиентов, никаких цифр масштаба, никаких обещаний производительности без измерений.

Аутентификация и безопасность

SASL2, Bind2, FAST, Channel Binding, OMEMO, списки приватности, Guardian и антиспам.

Сообщения и синхронизация

MAM, Message Carbons, Stream Management, CSI, офлайн-сообщения и ростер.

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

Multi-User Chat, постоянные комнаты, модерация, MUC RTBL, HTTP Upload, TURN/STUN и push.

Эксплуатация

PostgreSQL, MySQL, BoltDB, кэш Redis, Admin API, zertactl, Prometheus, health checks и pprof.

Быстрый старт

Один бинарник. Один конфиг. Старт.

Стандартный путь прост: клонировать репозиторий, установить бинарник, настроить YAML, запустить сервер. Docker и Helm тоже доступны в проекте.

git clone https://git.uuxo.net/UUXO/zerta.git
cd zerta
make install installctl
zerta --config=config.yaml

# Создать пользователя
zertactl user add username:password

# Docker
docker-compose -f dockerfiles/docker-compose.yml up

Документация

От установки до эксплуатации.

Размещённая структура документации — следующий шаг. Пока самые важные пути ведут прямо в репозиторий.

Установка и эксплуатация

Сборка, systemd, nginx, TLS, мониторинг, безопасность и кластеризация в руководстве администратора.

Конфигурация

Полный YAML-справочник для listener-ов, хранилища, аутентификации, TLS, модулей и кластеризации.

Соответствие

Документированный путь к XMPP 2024 Compliance Suite с включённым набором модулей.

FAQ

Вопросы перед тем, как решиться.

Короткие ответы, каждый подтверждён репозиторием. Там, где документации ещё не хватает, эта страница так и говорит.

Установка

Что нужно для продакшен-сервера Zerta?

MySQL 8+ или PostgreSQL 12+ в качестве базы данных, действующий TLS-сертификат (например, Let's Encrypt) и nginx перед сервером для терминации TLS, WebSocket и BOSH. HTTP Upload (XEP-0363) и TURN/STUN (RFC 5766, XEP-0215) встроены. Полный список, включая цепочку сборки, — в руководстве администратора в разделе «Requirements».

HTTP Upload: встроенный модуль XEP-0363. Для HMAC, дедупликации или собственного backend-а хранения — опционально hmac-file-server.

Можно ли попробовать Zerta без внешней базы данных?

Да. BoltDB встроена и не требует отдельного сервера базы данных — но только для одного узла, без репликации и без кластеризации. Для продакшена предполагаются MySQL или PostgreSQL. Zerta создаёт свою схему при запуске, поэтому ручной импорт не требуется.

Эксплуатация

Как запустить Zerta на нескольких узлах?

Кластеризация работает через общее KV-хранилище (cluster.type: kv). В коде реализовано пять backend-ов: Redis, PostgreSQL, NATS, Raft и etcd. Руководство администратора сейчас подробно описывает четыре из них — etcd существует, но пока не задокументирован. BoltDB кластеризацию не поддерживает.

Какие интерфейсы мониторинга доступны?

Встроенный HTTP-сервер отдаёт метрики Prometheus на /metrics (с поддержкой OpenMetrics) и Go-профилирование на /debug/pprof/. Дашборд Grafana поставляется в репозитории в каталоге monitoring/. Метрики хранилища включаются через storage.repository.type: measured. Отдельный раздел документации по мониторингу пока не опубликован.

Как защитить сервер от брутфорса и спама?

Guardian ограничивает число неудачных попыток входа на C2S-listener (max_auth_failures), банит адреса на настраиваемый срок (ban_duration) и ограничивает скорость новых подключений (connect_rate_limit). Для сообщений есть модуль antispam с лимитом скорости на пользователя, плюс muc_rtbl для списков блокировки в реальном времени в комнатах.

Есть ли гайды по бэкапу, восстановлению и обновлениям?

Нет. Эти гайды для операторов запланированы, но не опубликованы. Что задокументировано сегодня: Zerta автоматически выполняет миграции схемы при запуске. Бэкап и восстановление сейчас опираются на инструментарий вашей базы данных, плюс конфигурацию и каталог загрузок. Тем, кто эксплуатирует Zerta в продакшене, пока приходится самостоятельно определять и тестировать эту процедуру.

Протокол

Что означает статус теста на соответствие?

Протестировано набором тестов на compliance.conversations.im, последний прогон 2026-04-15 на 0ea1.net с тем же результатом, что и uuxo.net. Сейчас на uuxo.net работает сборка v0.1.9. Полный отчёт на compliance.conversations.im, каталога XEP здесь нет.

Что дают SASL2, Bind2 и FAST?

SASL2 (XEP-0388) вместе с Bind2 (XEP-0386) обрабатывает вход и привязку ресурса за один round trip, что сокращает число обменов при установлении соединения. FAST (XEP-0484) добавляет аутентификацию по токену, дополненную channel binding (XEP-0440) и обновлением хэша SCRAM (XEP-0480).

Токены FAST выдаются как HT-SHA-256-NONE и поэтому не привязаны к каналу. Относитесь к ним как к полноценным учётным данным доступа.

Миграция

Можно ли перейти на Zerta с ejabberd или Prosody?

Гайда по миграции со сторонних серверов нет — он запланирован, но не опубликован. Zerta поставляется с собственной схемой базы данных и создаёт её при запуске; импорт существующих баз ejabberd или Prosody этим не покрывается. Реалистичный путь сегодня — новая установка с переносом пользователей и данных вручную.

Чем Zerta отличается от Jackal?

Zerta — форк ortuman/jackal, развивается как независимый проект под Apache 2.0. Текущие направления: соответствие XMPP 2024, современная аутентификация (SASL2/Bind2/FAST), кластеризация через KV-backend-ы, плюс Guardian и антиспам.

Файл конфигурации, бинарники и префикс переменных окружения — собственные у Zerta (zerta.yml, ZERTA_*). Поэтому конфигурацию Jackal нельзя перенести без проверки.

Репозиторий

Код — это и есть доказательство.

Сервер, документация, примеры конфигов, файлы Docker и скрипты Helm лежат на git.uuxo.net. Managed-хостинг — отдельно на uuxo.net.

git.uuxo.net/UUXO/zerta