Найти в Дзене
Sovenok IT hard soft ware

Начало знакомства с docker на примере мессенджера Matrix Synapse Element (Часть 5)

В любой момент могут запретить Telegram, WhatsApp и Microsoft Teams. Но для работы обычной электронной почты уже недостаточно, так как общение через неё медленнее, а видеозвонки могут быть затруднительными. Необходима альтернатива, которая удовлетворяла бы следующим критериям: 1. Отсутствие доступа во внешний интернет. 2. Возможность совершать видео- и аудиозвонки. 3. Создание групповых чатов. 4. Удалённые филиалы могут общаться в своих чатах и, при необходимости, подключаться к чатам главного офиса. В сети Matrix это называется «Федерация». Федерация — это механизм, который позволяет пользователям с разных серверов участвовать в одной и той же комнате. Чтобы это работало, другим серверам необходимо иметь возможность связываться с вашим и отправлять сообщения. Поэтому выбор пал на сеть Matrix Synapse. Element– web-версия клиента. 1) Создаем конфигурацию mkdir -p ~/matrix-data создадим папку Теперь нужно сгенерировать базовый конфиг docker run -it --rm -v ~/matrix-data:/data -e SYNA
Оглавление

Введение

В любой момент могут запретить Telegram, WhatsApp и Microsoft Teams. Но для работы обычной электронной почты уже недостаточно, так как общение через неё медленнее, а видеозвонки могут быть затруднительными.

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

1. Отсутствие доступа во внешний интернет.

2. Возможность совершать видео- и аудиозвонки.

3. Создание групповых чатов.

4. Удалённые филиалы могут общаться в своих чатах и, при необходимости, подключаться к чатам главного офиса. В сети Matrix это называется «Федерация».

Федерация — это механизм, который позволяет пользователям с разных серверов участвовать в одной и той же комнате. Чтобы это работало, другим серверам необходимо иметь возможность связываться с вашим и отправлять сообщения. Поэтому выбор пал на сеть Matrix Synapse. Element– web-версия клиента.

Начало

1) Создаем конфигурацию

mkdir -p ~/matrix-data создадим папку

Теперь нужно сгенерировать базовый конфиг

docker run -it --rm -v ~/matrix-data:/data -e SYNAPSE_SERVER_NAME=localhost -e SYNAPSE_REPORT_STATS=no matrixdotorg/synapse:latest generate

2) запуск контейнера

docker run -d --name matrix -p 8008:8008 -v ~/matrix-data:/data --network bridge matrixdotorg/synapse:latest

docker exec -it matrix register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008

Система запросит у вас ввод логина (можно оставить root), пароля и информацию о том, является ли данный пользователь администратором.

Создаем автоматическую установку Matrix Synapse

В выбранной вами папке создайте файл docker-compose.yml со следующим содержимым (используйте форматирование в VS Code или веб-редакторе):

version: '3.8'

services:

matrix-gen: (Создаем контейнер с первичной генерацией)

image: matrixdotorg/synapse:latest

container_name: matrix-gen

volumes:

- ./matrix-data:/data

environment:

SYNAPSE_SERVER_NAME: "localhost"

SYNAPSE_REPORT_STATS: "no"

command: ["generate"]

networks:

- matrix-net

restart: "no" (убираем контейнер после запуска)

matrix-register: (создаем контейнер на регистрацию)

build:

context: .

dockerfile: Dockerfile.register

container_name: matrix-register

depends_on:

matrix-gen:

condition: service_completed_successfully

volumes:

- ./matrix-data:/data

networks:

- matrix-net

restart: "no" (убираем его после первого запуска)

environment:

- SYNAPSE_SERVER_NAME=localhost

- SYNAPSE_REPORT_STATS=no

matrix: (создаем главный контейнер , который будет работать в будущем)

image: matrixdotorg/synapse:latest

container_name: matrix

hostname: matrix

depends_on:

matrix-register:

condition: service_completed_successfully

ports:

- "8008:8008"

volumes:

- ./matrix-data:/data

environment:

SYNAPSE_SERVER_NAME: "localhost"

SYNAPSE_REPORT_STATS: "no"

SYNAPSE_CONFIG_PATH: "/data/homeserver.yaml"

networks:

- matrix-net

healthcheck:

test: ["CMD", "curl", "-f", "http://localhost:8008/health"]

interval: 30s

timeout: 10s

retries: 3

networks:

matrix-net:

driver: bridge

ipam:

config:

- subnet: 172.20.0.0/16

контейнеры генерации регестрации скрыты
контейнеры генерации регестрации скрыты

В той же папке создадим файл dockerfile.register, в котором укажем путь к скрипту register.sh и его содержимое.

FROM matrixdotorg/synapse:latest

RUN apt-get update && \

apt-get install -y --no-install-recommends bash && \

rm -rf /var/lib/apt/lists/*

COPY register.sh /register.sh

RUN chmod +x /register.sh

ENTRYPOINT ["/register.sh"]

-2

сам файл скрипта register.sh

#!/bin/bash

# Сохраняем PID сервера

/start.py &

SYNAPSE_PID=$!

# Ждем инициализации

sleep 15

# Регистрируем пользователя (с повторной попыткой)

register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008 \

-u admin -p admin -a || \

sleep 5 && \

register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008 \

-u admin -p admin -a

# Останавливаем сервер через kill

kill $SYNAPSE_PID

Файл для регистрации пользователя register_user.py

#!/usr/bin/env python

import os

import time

import subprocess

from subprocess import Popen

# Запускаем synapse в фоне

synapse = Popen(["/start.py"])

# Ждем инициализации

time.sleep(10)

# Регистрируем пользователя

subprocess.call([

"register_new_matrix_user",

"-c", "/data/homeserver.yaml",

"http://localhost:8008",

"-u", "admin",

"-p", "admin",

"-a"

])

# Останавливаем synapse

synapse.terminate()

В этом файле вы можете указать нужного пользователя.

-3

Порядок запуска приложений в контейнере

# Пересобираем образ

docker-compose build matrix-register

# Запускаем

docker-compose up matrix-gen matrix-register

# Если регистрация прошла успешно, запускаем основной сервер

docker-compose up -d matrix

Открываем matrix и проверяем

-4

Наша структура файлов.

your-project-folder/

├── docker-compose.yml

├── Dockerfile.register

├── register.sh

└── matrix-data/ (автоматически создастся)

Давайте установим клиент Element.

-5

sudo apt install -y wget (обновим wget) если надо.

wget https://packages.element.io/debian/pool/main/e/element-desktop/element-desktop_1.11.50_amd64.deb
sudo dpkg -i element-desktop_*.deb

Открываем его (в приложениях) и вводим адрес контейнера с нужным портом. Затем вводим логин и пароль, указанные в файле скрипта.

сам клиент Element
сам клиент Element

Добавление нового пользователя docker exec -it matrix register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008

Заключение

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

Другие части

Часть 1

Часть 2

Часть 3

Часть 4