8.2.18 Розгортання корпоративного чат-серверу Zulip

The Host Banner Zulip Installation

Zulip — сучасна система командної комунікації з відкритим кодом, що поєднує переваги потокового обговорення з асинхронними темами повідомлень. Розгортання в Docker забезпечує швидку та відтворювану інсталяцію без необхідності налаштовувати залежності вручну (PostgreSQL, RabbitMQ, Redis, memcached тощо).

Підготовка сервера

Вимоги

Змінні, які потрібно замінити

  • DOMAIN_NAME — ваше доменне ім’я (наприклад, chat.example.com);
  • ADMIN_EMAIL — email адміністратора Zulip;
  • POSTGRES_PASSWORD, RABBITMQ_PASSWORD, REDIS_PASSWORD, MEMCACHED_PASSWORD — паролі сервісів;
  • SECRET_KEY — випадковий рядок із 50 символів (Django SECRET_KEY);

Безпека

Обмежимо доступ до непризначених для публіки портів, дозволивши лише необхідні.

UFW:

sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable

iptables:

sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -P INPUT DROP

Установка

Створимо директорію проєкту:

mkdir ~/zulip && cd ~/zulip

Клонуємо репозиторій docker-zulip:

git clone https://github.com/zulip/docker-zulip.git
cd docker-zulip

gitclone

Файл docker-compose.yml містить конфігурацію для 5 контейнерів: Zulip, PostgreSQL, Redis, RabbitMQ, memcached.

Порада: згенерувати секретні ключі можна так:

openssl rand -base64 40 | tr -d '/+=' | head -c 50

Відредагуйте файл docker-compose.yml, знайдіть секцію environment у блоці zulip і заповніть змінні:

services:
  zulip:
    image: zulip/docker-zulip:10.4-0  # актуальний тег
    environment:
      - SETTING_EXTERNAL_HOST=DOMAIN_NAME
      - SETTING_ZULIP_ADMINISTRATOR=ADMIN_EMAIL
      - POSTGRES_PASSWORD=POSTGRES_PASSWORD
      - SECRETS_postgres_password=POSTGRES_PASSWORD
      - RABBITMQ_DEFAULT_PASS=RABBITMQ_PASSWORD
      - SECRETS_rabbitmq_password=RABBITMQ_PASSWORD
      - REDIS_PASSWORD=REDIS_PASSWORD
      - SECRETS_redis_password=REDIS_PASSWORD
      - SECRETS_secret_key=SECRET_KEY
      - SSL_CERTIFICATE_GENERATION=certbot

Увага: після першого запуску змінити паролі сервісів можна лише вручну або при пересозданні томів.

Завантаження образів та запуск Zulip

Виконайте команди для завантаження образів і запуску сервісу у фоновому режимі:

sudo docker compose pull
sudo docker compose up -d

dockercomposeup-d

Створення організації

Запустіть команду для отримання посилання на реєстрацію:

sudo docker compose exec -u zulip zulip \
  "/home/zulip/deployments/current/manage.py generate_realm_creation_link"

dockercomposeexec

Відкрийте згенероване посилання у браузері та створіть обліковий запис:

webinterfacecreateorg

Перевірка роботи

  1. Перевірте статус контейнерів:
docker compose ps

dockercomposeps

  1. Відкрийте https://<DOMAIN_NAME>/ і увійдіть під обліковим записом адміністратора.

web_interface_welcome

  1. Перевірте логи в меню Administration → Server logs.
Поширені помилки
Помилка Причина Рішення
port 5432 is already allocated Локально запущений PostgreSQL Зупиніть службу postgresql або змініть порт у docker-compose.yml.
502 Bad Gateway / self‑signed cert Сертифікат Let’s Encrypt ще не згенеровано Дочекайтесь завершення Certbot або тимчасово використовуйте HTTP.
django.core.exceptions.ImproperlyConfigured: SECRET_KEY Не задано SECRETS_secret_key Згенеруйте ключ, додайте у docker-compose.yml, перезапустіть сервіс.
Нестача RAM, черга “worker not running” Недостатньо памʼяті для мультипроцесорних workerів Встановіть QUEUE_WORKERS_MULTIPROCESS=false або збільшіть RAM.