Mattermost +
Jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi + k8s
Mattermost + Jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi + k8s
Уровень сложности
Средний
Время на прочтение
7 мин
Количество просмотров
112
DevOps * Kubernetes *
Туториал
В данной статье будет показан процесс установки мессенджера• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями Mattermost в
связке с Jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi для ВКС в самой простой, на мой взгляд, конфигурации в
Kubernetes кластер.
Почему выбор пал именно на эти приложения:
- При необходимости все можно запустить в закрытом контуре
- Нет привязки к облачным провайдерам
Ну и главная причина, почему я начал все это настраивать:
- В моем конкретном случае связка Яндекс• Объект организация » Организации по алфавиту » Организации на Ya » Яндекс (Yandex)-Телемост/Мессенджер• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями не позволяет
аккаунтам из разных организаций Яндекс• Объект организация » Организации по алфавиту » Организации на Ya » Яндекс (Yandex) 360 работать в одном рабочем
пространстве.
Обязательно уберу этот пункт, когда они исправятся :-)
- И пока что я не нашел подобной статьи на Хабре даже по отдельности :-)
Исходные данные:
- Kubernetes кластер (например yandex), c worker-нодами имеющими белый ip
адрес (необходимо при работе в открытой сети Интернет• Телекоммуникации и связь » Компьютерная сеть » Интернет).
- В кластере установлен nginx ingress controller, в статье класс определен как
nginx-external
- В кластере установлен cert-manager для ssl
- Есть возможность настроить DNS• Телекоммуникации и связь » Компьютерная сеть » Интернет » DNS записи для вашего домена
- Установлен helm 3
- Есть доступ к S3 бакету (или его аналогу), известны accesskey и secretkey
- Установлена БД Postgresql, известны данные для подключения к БД c правами
администратора. Связь между БД и Mattermost в данном примере без SSL.
- Есть доступ к кластеру через kubectl с правами администратора
Установка Jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi
Скачать helm чарт
helm repo add jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi https://jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-contrib.github.io/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-helm/ helm pull
jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-meet
Скопировать values.yaml из чарта и переопределить параметры:
values-work.yaml:
enableAuth: true enableGuests: true # Where Jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi Web UI is made available #
such as jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi.example.com publicURL: "meet.app-code.ru" tz: Europe/Moscow
websockets: ## Colibri (JVB signalling): colibri: enabled: true ## XMPP
(Prosody signalling): xmpp: enabled: true web: extraEnvs: RESOLUTION: "720"
RESOLUTION_MIN: "720" RESOLUTION_WIDTH: "1280" RESOLUTION_WIDTH_MIN: "1280"
VIDEOQUALITY_PREFERRED_CODEC: VP9
#https://jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi.github.io/handbook/docs/dev-guide/dev-guide-configuration/#videoquality
VIDEOQUALITY_ENFORCE_PREFERRED_CODEC: "0" # 0 = fallback if some endpoints
dont support, 1 = breaks receiving video for any endpoint that doesn't support
preferred codec TART_BITRATE: "8000000" # 8000kbps # START_AUDIO_MUTED #
value: "0" # if nth joiner, automute (user can toggle unmute) [moderator will
only be muted AFTER first participant joins] # START_VIDEO_MUTED # value: "0"
# if nth joiner, automute (user can toggle unmute) [moderator will only be
muted AFTER first participant joins] # 0 = automute on join, user can toggle
unmute #https://github.com/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-meet/issues/8144 (2021-Q1: pre-join
page overrides start muted) START_WITH_AUDIO_MUTED: "1" # 0 = automute on
join, user can toggle unmute #https://github.com/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-meet/issues/8144
(2021-Q1: pre-join page overrides start muted) # START_WITH_VIDEO_MUTED: "1" #
'distracting' ENABLE_NOISY_MIC_DETECTION: "false" ENABLE_NO_AUDIO_DETECTION:
"true" TOOLBAR_BUTTONS:
"microphone,camera,desktop,fullscreen,chat,recording,localrecording,settings,raisehand,filmstrip,invite,shortcuts,tileview,videobackgroundblur,download,help,hangup,select-background"
ingress: enabled: true ingressClassName: "nginx-external" annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod" hosts: - host• Телекоммуникации и связь » Сети передачи данных » Сетевое оборудование » Хост:
meet.app-code.ru paths: ['/'] tls: - secretName: jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-web-certificate hosts:
- meet.app-code.ru jicofo: xmpp: password:
y7d75Aj2FSocL98V9wb6PXF5NzWw47ncscmYbwjgnEBYj9r7mP jvb: xmpp: user: jvb
password: upEH3JFsBHeFzQPirREWdT8c5CAHgzcma3ck5RpXg useNodeIP: true ## UDP
transport port• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт: UDPPort: 30000 ## Use a pre-defined external port• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт for NodePort
or LoadBalancer service, # if needed. Will allocate a random port• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт from allowed
range if unset. # (Default NodePort range for K8s is 30000-32767) nodePort:
30000 service: enabled: true type: NodePort externalTrafficPolicy: ~
nodeSelector: node-group: public extraCommonEnvs: XMPP_CROSS_DOMAIN: "true"
AUTH_TYPE: "jwt" JWT_APP_ID: "jitsimeet" JWT_ALLOW_EMPTY: "false" prosody:
enabled: true persistence: enabled: true size: 4Gi storageClassName:
yc-network• Телекоммуникации и связь » Сети передачи данных » Сетевое оборудование » Хост-ssd extraEnvs: - name: JWT_APP_SECRET value:
"e8pFe6QQYdwuVh6tEdxeFkMR9aFnTkCuWSfVurrQz"
Некоторые пояснения к содержимому:
publicURL - Урл по которому будет доступен Jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi
web.extraEnvs - Параметры, которые на мой взгляд оптимальны для первого
запуска
web.ingress.annotations - Необходимо указать параметры вашего cert-manager для
запроса сертификата
В блоке jvb необходимые параметры, чтобы заработал UDP трафик при звонках.
Важно так же понимать, что необходимо открыть указанные порты• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт в Группах
безопасности (фаервол), если это применимо к вашей инфраструктуре. Также
указать nodeSelector если у вас отдельная группа нод с белыми IP адресами:
jvb: useNodeIP: true ## UDP transport port• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт: UDPPort: 30000 ## Use a
pre-defined external port• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт for NodePort or LoadBalancer service, # if needed.
Will allocate a random port• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт from allowed range if unset. # (Default NodePort
range for K8s is 30000-32767) nodePort: 30000 service: enabled: true type:
NodePort externalTrafficPolicy: ~ nodeSelector: node-group: public
Блок extraCommonEnvs включает авторизацию по JWT токену и задает App ID:
extraCommonEnvs: XMPP_CROSS_DOMAIN: "true" AUTH_TYPE: "jwt" JWT_APP_ID:
"jitsimeet" JWT_ALLOW_EMPTY: "false"
В блоке prosody задается JWT токен:
prosody: enabled: true persistence: enabled: true size: 4Gi storageClassName:
yc-network• Телекоммуникации и связь » Сети передачи данных » Сетевое оборудование » Хост-ssd extraEnvs: - name: JWT_APP_SECRET value:
"e8pFe6QQYdwuVh6tEdxeFkMR9aFnTkCuWSfVurrQz"
Параметры publicURL , extraCommonEnvs.JWT_APP_ID ,
prosody.extraEnvs.JWT_APP_SECRET будут ипользованы при настройке интеграции с
mattermost
Все пароли и токены замените на свои!.
Установить jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi:
helm -n jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-ext upgrade --install --create-namespace \ jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi \ -f
values-work.yaml \ jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-meet
Проверить, что все запущено, должно быть примерно такое состояние:
$ kubectl -n jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-ext get pods,service,ingress NAME READY STATUS RESTARTS AGE
pod/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-meet-jicofo-86cb554b75-dnn6k 1/1 Running 0 49s
pod/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-meet-jvb-675db788db-2svt2 1/1 Running 0 49s
pod/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-meet-web-b677f9f88-wkszq 1/1 Running 0 49s pod/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-prosody-0
1/1 Running 0 49s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт(S) AGE
service/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-meet-jvb NodePort 10.21.90.27 <none> 30000:30000/UDP 5d22h
service/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-meet-web ClusterIP 10.21.189.115 <none> 80/TCP• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт 5d22h
service/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-prosody ClusterIP 10.21.84.50 <none>
5280/TCP• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт,5281/TCP• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт,5347/TCP• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт,5222/TCP• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт,5269/TCP• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт 5d22h NAME CLASS HOSTS ADDRESS
PORTS AGE ingress.networking.k8s.io/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-meet-web nginx-external
meet.app-code.ru 80, 443 25h
Установка Mattermost
Самый простой вариант, на мой взгляд, при установке Mattermost это
использовать operator.
Добавить helm репозиторий:
helm repo add mattermost https://helm.mattermost.com
Установить оператор:
helm -n mattermost-operator upgrade --install --create-namespace \
mattermost-operator \ mattermost/mattermost-operator
Данные для подключения к БД нужно сформировать в определенном формате, так же
нужны данные для подключения к S3, для этого можно использовать небольшой
скрипт• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки
• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки
• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки:
#!/bin/bash• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки » Bash
• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки » Bash
• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки » Bash ### БД username="mostuser" password="password"
database="mattermost" db_url="postgres.host• Телекоммуникации и связь » Сети передачи данных » Сетевое оборудование » Хост"
url="postgres://${username}:${password}@${db_url}:5432/${database}?connect_timeout=10&sslmode=disable"
pg_url_base64=$(echo -n "${url}" | base64 -w0) echo "pg_url_base64:
${pg_url_base64}" ### S3 accesskey="accesskey" secretkey="secretkey"
accesskey_base64=$(echo -n "${accesskey}" | base64 -w0)
secretkey_base64=$(echo -n "${secretkey}" | base64 -w0) echo
"accesskey_base64: ${accesskey_base64}" echo "secretkey_base64:
${secretkey_base64}"
Создать secret с данными для подключения к БД most-postgres-connection.yaml:
apiVersion: v1 kind: Secret metadata: name: most-postgres-connection type:
Opaque data: DB_CONNECTION_CHECK_URL: <pg_url_base64> DB_CONNECTION_STRING:
<pg_url_base64> MM_SQLSETTINGS_DATASOURCEREPLICAS: <pg_url_base64>
Создать secret с данными для подключения к S3
mattermost-filestore-secret.yaml:
apiVersion: v1 kind: Secret metadata: name: most-s3-sa-key type: Opaque data:
accesskey: <accesskey_base64> secretkey: <accesskey_base64>
Создать yaml фаил с описанием mattermost.yaml:
apiVersion: installation.mattermost.com/v1beta1 kind: Mattermost metadata:
name: mattermost spec: image: mattermost/mattermost-team-edition version:
10.1.2 imagePullPolicy: Always licenseSecret: "" replicas: 1 ingress: enabled:
true host• Телекоммуникации и связь » Сети передачи данных » Сетевое оборудование » Хост: most.app-code.ru annotations: kubernetes.io/ingress.class:
nginx-external cert-manager.io/cluster-issuer: "letsencrypt-prod"
nginx.ingress.kubernetes.io/proxy-body-size: 500m tlsSecret:
most.app-code.ru-tls database: external: secret: most-postgres-connection
fileStore: external: url: s3.yandexcloud.net bucket: most-s3-bucket-test
secret: most-s3-sa-key scheduling: nodeSelector: node-group: public
Установить все в кластер:
kubectl create ns mattermost kubectl -n mattermost apply -f
mattermost-filestore-secret.yaml kubectl -n mattermost apply -f
postgresql_conn_secret.yaml kubectl -n mattermost apply -f mattermost.yaml
Проверить, что все запустилось:
$ kubectl -n mattermost get pods,ingress NAME READY STATUS RESTARTS AGE
pod/mattermost-6788fb845-frmfl 1/1 Running 0 8m7s NAME CLASS HOSTS ADDRESS
PORTS AGE ingress.networking.k8s.io/mattermost <none> most.app-code.ru 80, 443
8m7s
Зайти через веб интерфейс• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Веб-приложение, сделать начальные настройки.
Скачать архив с плагином Jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi :
wget
https://github.com/mattermost-community/mattermost-plugin-jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi/releases/download/v2.0.1/jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi-2.0.1.tar.gz
В системных настройках: System Console -> Plugin Managment загрузить скачанный
архив:
Включить плагин и перейти в его настройки:
Внести настройки для связи с Jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi, которые указывали ранее, это App ID и JWT
токен:
Перейти в любой канал или персональный чат, справа на панели появится кнопка
Jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi:
Либо в любом диалоге вызвать командой /jitsi• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Jitsi
Перейти по созданной ссылке, присоединиться к видео встрече:
Важно, при переходе по этой ссылке все получают права Модератора. Если
считаете, что так не надо делать - не публикуйте эту ссылку, а приглашайте к
конференции через кнопку приглашения:
Удачного пользования! :-)