Установка и настройка сервера Zulip на Ubuntu

Обновлено и опубликовано Опубликовано:

Используемые термины: Zulip, Ubuntu.

В данной инструкции мы установим в выполним основные настройки для корпоративного сервера чата Zulip. В качестве операционной системы будет использоваться Linux Ubuntu 20.04 (на данный момент поддерживаются только Debian и Ubuntu).

Программно-аппаратные требования

Zulip предъявляет к инфраструктуре некоторые принципиальные требования, без удовлетворения которых мы не сможем его установить:

  • Настроенное доменное имя, по которому мы будем подключаться к чату. Для этого в нашей локальной системе DNS должна быть соответствующая А-запись, которая ведет на сервер Zulip. В данной инструкции предполагается, что мы используем имя zulip.dmosk.ru.
  • Наличие почтового сервера, через который мы будем отправлять приглашения новым пользователям.
  • 2GB RAM и 10GB дискового пространства — в противном случае, установщик вернет ошибку.

Ссылки на инструкции по настройке постовой системы и DNS смотрите ниже.

Как показывает практика, первых 2 пункта условные — если залезть в настройки поглубже, то можно их обойти.

Предварительные настройки

Выполним некоторые настройки перед тем, как приступим к установке зулипа.

Время

Для правильного отображения времени сообщения, настроим его синхронизацию.

Сначала выставим часовой пояс:

timedatectl set-timezone Europe/Moscow

Устанавливаем программу для синхронизации времени и разрешаем ее автозапуск:

apt-get install chrony

systemctl enable chrony

Брандмауэр

По умолчанию, в системе Ubuntu фаервол ничего не запрещает и в его настройке нет необходимости. Если же мы его настраивали за запрет, нужно убедиться в том, что порты для работы веб-сервера открыты:

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

iptables -I INPUT -p tcp --dport 443 -j ACCEPT

Для сохранения правил используем iptables-persistent:

apt-get install iptables-persistent

netfilter-persistent save

Мы готовы перейти к установке.

Установка

Процесс развертывания прост — достаточно скачать дистрибутив и запустить скрипт установки, который все сделает за нас.

Загрузку выполним командой:

wget https://www.zulip.org/dist/releases/zulip-server-latest.tar.gz

Распакуем скачанный архив:

tar zxf zulip-server-latest.tar.gz

Запускаем скрипт для установки:

./zulip-server-*/scripts/setup/install --certbot --email=postmaster@dmosk.ru --hostname=zulip.dmosk.ru

* в данном примере мы указали установщику получить бесплатный сертификат от Let's Encrypt (опция certbot).

Однако, если мы предполагаем только внутреннее использование (без публикации в Интернет) или наш сервер будет работать через http-прокси, то получить сертификат от Let's Encrypt мы не сможем, и установщик вернет ошибку. Для этого есть опция self-signed-cert, которая сгенерирует самоподписанный сертификат:

./zulip-server-*/scripts/setup/install --self-signed-cert --email=postmaster@dmosk.ru --hostname=zulip.dmosk.ru

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

Команда будет выполняться некоторое время. Если мы выполнили ее с опцией для получения сертификата от Let's Encrypt, на определенном этапе установщик запросит принять соглашение — отвечаем утвердительно:

(A)gree/(C)ancel: A

В итоге мы получим сообщение:

Please visit the following secure single-use link to register your 
new Zulip organization:

    https://zulip.dmosk.ru/new/5omfct4jpnimufagc66xadbn

Установка, почти, завершена — осталось перейти по ссылке в данном сообщении. В нашем примере, переходим на страницу https://zulip.dmosk.ru/new/5omfct4jpnimufagc66xadbn. Мы должны увидеть форму для создания организации — вводим электронную почту:

Указываем электронную почту для установки Zulip

Кликаем по Создать организацию. На следующей странице заполняем форму создания организации и кликаем Зарегистрироваться:

Создаем организацию при установке Zulip

* в данной форме мы указываем название организации, адрес почты администратора, логин и пароль для первой учетной записи.

Готово. Сервер развернут.

Настройка почты

Как говорилось выше, для zulip важно наличие рабочего почтового сервера для отправки сообщений. В данной инструкции мы не будем рассматривать настройку почтового сервера — ссылку на нужную информацию можно найти ниже.

Выполним настройку Zulip для использования сервера MTA. Для этого открываем файл:

vi /etc/zulip/settings.py

Приводим к виду следующие опции:

EMAIL_HOST = 'smtp.dmosk.ru'
EMAIL_HOST_USER = 'postmaster@dmosk.ru'

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

EMAIL_USE_TLS = True
EMAIL_PORT = 587

* где:

  • EMAIL_HOST — адрес почтового сервера для отправки сообщений.
  • EMAIL_HOST_USER — email, от которого система будет отправлять письма.
  • EMAIL_USE_TLS — использовать или нет защищенное соединение TLS.
  • EMAIL_PORT — порт, к которому нужно подключаться для отправки почты.

Открываем файл:

vi /etc/zulip/zulip-secrets.conf

Добавляем опцию для прохождения аутентификации на почтовом сервере:

email_password = abcd1234

* в данном примере предполагается использование пароля abcd1234 для учетной записи postmaster@dmosk.ru, которую мы указали выше. Обратите внимание, что мы можем настроить почтовую систему таким образом, что аутентификация не потребуется — в этом случае нет необходимости в редактировании данного файла.

Пробуем отправить тестовое сообщение:

su zulip -c "/home/zulip/deployments/current/manage.py send_test_email postmaster@dmosk.ru"

* в данном примере на тот же ящик postmaster@dmosk.ru.

Если письмо отправляется, перезагружаем наш сервис для применения настроек:

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

Push уведомления для мобильных устройств

Мы можем установить приложение для работы с чатом на мобильное устройство. Однако, мы не будем видеть уведомления при получении новых сообщений. Чтобы это исправить, нам нужно настроить PUSH_NOTIFICATION.

Открываем файл:

vi /etc/zulip/settings.py

Снимаем комментарий:

PUSH_NOTIFICATION_BOUNCER_URL = 'https://push.zulipchat.com'

Выполняем регистрацию нашего сервера на сервисе push.zulipchat.com:

su zulip -c '/home/zulip/deployments/current/manage.py register_server'

Система попросит принять соглашение — отвечаем утвердительно:

To register, you must agree to the Zulipchat Terms of Service: https://zulip.com/terms/
Do you agree to the Terms of Service? [Y/n] Y

Готово.

В настройках zulip в веб-интерфейсе нужно убедиться, что у нас выставлена галочка для получения уведомлений на мобильные устройства:

Настройка оповещения для мобильных устройств

Аутентификация через LDAP

Дополнительно рассмотрим возможность входа в систему под учетными записями, хранящимися в LDAP. В нашем примере будет использоваться реализация на базе Microsoft Active Directory.

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

Предположим, что мы создали пользователя zulip с паролем zulip_ldap_password.

2. Переходим на сервер zulip и открываем файл:

vi /etc/zulip/zulip-secrets.conf

Добавим опцию:

auth_ldap_bind_password = zulip_ldap_password

* опция auth_ldap_bind_password позволяет указать пароль для LDAP BIND пользователя (в нашем примере, пароль — zulip_ldap_password).

Теперь открываем файл с настройками zulip:

vi /etc/zulip/settings.py

Приводим к виду следующие основные настройки:

AUTHENTICATION_BACKENDS: Tuple[str, ...] = (
    ...
    'zproject.backends.ZulipLDAPAuthBackend',  # LDAP, setup below
    ..
)

## LDAP integration.
##
## Zulip supports retrieving information about users via LDAP, and
## optionally using LDAP as an authentication mechanism.
...
AUTH_LDAP_SERVER_URI = "ldap://dc1.dmosk.ru"
...
AUTH_LDAP_BIND_DN = "zulip"
...
AUTH_LDAP_USER_SEARCH = LDAPSearch(
    "dc=dmosk,dc=ru", ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)"
)
...
LDAP_APPEND_DOMAIN = "dmosk.ru"
...
LDAP_EMAIL_ATTR = "mail"
...
AUTH_LDAP_REVERSE_EMAIL_SEARCH = LDAPSearch("dc=dmosk,dc=ru",
                    ldap.SCOPE_SUBTREE, "(mail=%(email)s)")
...
AUTH_LDAP_USERNAME_ATTR = "sAMAccountName"

Если мы хотим ограничить доступ по группам, добавим опции:

AUTH_LDAP_REQUIRE_GROUP = "cn=enabled,ou=groups,dc=example,dc=com"
AUTH_LDAP_DENY_GROUP = "cn=disabled,ou=groups,dc=example,dc=com"

* где:

  • AUTHENTICATION_BACKENDS — группа опций, где перечислены методы аутентификации. По умолчанию все, кроме email закомментированы. В нашем случае мы должны снять комментарий с опции zproject.backends.ZulipLDAPAuthBackend.
  • AUTH_LDAP_SERVER_URI — адрес, по которому мы должны подключаться к нашему серверу LDAP.
  • AUTH_LDAP_BIND_DN — учетная запись, под которой мы должны подключаться к LDAP. В нашем примере, под zulip.
  • AUTH_LDAP_USER_SEARCH — область поиска объектов для входа в систему. В данном примере мы указали на корень домена dmosk.ru (при желании, можно ограничить определенным контейнером или организационным юнитом). Тут же мы указали, что в качестве логинов для входа нам нужно использовать атрибут sAMAccountName.
  • LDAP_APPEND_DOMAIN — указываем конкретный домен, для которого будет выполняться аутентификация через LDAP.
  • LDAP_EMAIL_ATTR — указываем атрибут в LDAP, в котором хранятся адреса email пользователей.
  • AUTH_LDAP_REVERSE_EMAIL_SEARCH — область поиска объектов для получения email-адресов.
  • AUTH_LDAP_USERNAME_ATTR — атрибут для имени учетной записи.
  • AUTH_LDAP_REQUIRE_GROUP — группа, в которую должны входить пользователи, чтобы они могли входить в Zulip.
  • AUTH_LDAP_DENY_GROUP — группа, пользователям которой необходимо запретить вход.

Проверяем нашу настройку:

su zulip -c "/home/zulip/deployments/current/manage.py query_ldap ldap_user"

* где ldap_user — имя учетной записи в LDAP.

Мы должны увидеть что-то на подобие:

full_name: ldap_user
email: ldap_user@dmosk.ru

ldap_user — учетная запись; ldap_user@dmosk.ru — адрес электронной почты для учетной записи.

Перезапускаем сервис zulip:

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

Читайте также

В инструкции не говорится о развертывании некоторых сервисов, работа которых нужна для Zulip. Более подробную информацию можно найти в статьях:

1. Установка и настройка bind на Ubuntu.

2. Большой почтовый сервер на Ubuntu Server.

3. Получение бесплатного SSL сертификата Let's Encrypt.

4. Как установить роль контроллера домена на Windows Server.

# Серверы # Ubuntu
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет