Как запустить TrueConf Server в Docker-контейнере
Сервер видеоконференцсвязи TrueConf Server доступен для установки как на Windows, так и на различные ОС семейства Linux. При этом для удобства развёртывания вы можете использовать подготовленный нами Docker-контейнер с ВКС-сервером, доступный в публичном репозитории по следующему адресу:
https://hub.docker.com/r/trueconf/trueconf-server
Что же такое Docker?
Docker – это пакет программного обеспечения для доставки приложений на физические или виртуальные машины и их запуска в изолированном окружении (т.н. контейнере). В свою очередь, контейнер запускается из образа, который содержит в упакованном виде программу и необходимые для её работы зависимости. Среда, в которой работают контейнеры, называется хост (например, ваш компьютер).
Многие популярные образы содержатся в публичных репозиториях на официальном портале Docker Hub.
Такой метод развёртывания ПО активно используется благодаря его универсальности, минимизации потребления системных ресурсов, простоте и скорости запуска, удобству дальнейшей поддержки, обширной базе общедоступных образов, а также обеспечении независимости различных контейнеров друг от друга.
Для примера рассмотрим, как установить Docker на Debian 10 и запустить контейнер с TrueConf Server.
Как установить Docker на Windows и macOS, смотрите в официальной документации.
Для выполнения перечисленных далее команд в ОС должна присутствовать программа sudo и пользователь, под которым они запускаются, должен быть в соответствующей группе. В Debian по умолчанию sudo может отсутствовать, проверьте её наличие командой sudo -V
и установите при необходимости с помощью команды apt install sudo
(выполняется под учётной записью root). А для добавления пользователя с логином user в группу sudo выполните sudo usermod -a -G sudo user
. Также требуется добавить этого пользователя в группу docker как показано в документации.
Шаг 1. Установка Docker
Чтобы установить Docker на Debian из официального репозитория, откройте терминал и выполните следующую последовательность команд:
- Установите пакеты, которые необходимы для работы с репозиторием по HTTPS:
1sudo apt update && sudo apt install -yq apt-transport-https ca-certificates curl gnupg lsb-release - Импортируйте официальный GPG-ключ Docker:
1curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg - Добавьте ссылку на репозиторий со стабильной версией:
123echo \"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - Установите Docker и сопутствующие пакеты:
1sudo apt update && sudo apt install -yq docker-ce docker-ce-cli containerd.io - Проверьте корректность установки:
1sudo docker run hello-world
Данная команда скачает тестовый образ, откроет его в изолированном контейнере, отобразит сопутствующую информацию в терминале и затем автоматически завершит работу контейнера.
Шаг 2. Скачивание и запуск контейнера с TrueConf Server
Для создания и автоматического запуска контейнера ВКС-сервера из образа используется команда docker run, при этом если образ отсутствует в системе, он автоматически будет скачан из публичного репозитория:
1 |
sudo docker run [OPTIONS] trueconf/trueconf-server:stable |
где [OPTIONS]
– дополнительные параметры. Например, выполняемая в первый раз команда:
1 |
sudo docker run -d -p 80:80 -p 443:443 -p 4307:4307 -e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=12345 -v /home/$USER/trueconf/server/lib:/opt/trueconf/server/var/lib trueconf/trueconf-server:stable |
скачает образ TrueConf Server, на его основе создаст и запустит в фоне контейнер, вернув управление в терминал. При этом будут проброшены необходимые для работы ВКС-сервера порты, дан доступ к панели управления администратору с логином tc_admin
и паролем 12345
, а рабочий каталог сервера будет примонтирован к каталогу хоста по пути /home/$USER/trueconf/server
.
Ниже подробно рассмотрены некоторые из используемых параметров. Их можно комбинировать со стандартными опциями Docker, описанными в его официальной документации. Например, вы можете указать ключ --name
, чтобы присвоить имя контейнеру для удобства его дальнейшего использования.
$USER
– переменная окружения ОС семейства Linux, при использовании в командах она автоматически заменяется на логин текущего пользователя в системе.Использование сетевого подключения хоста (—network=host)
Чтобы предоставить доступ из контейнера к сети, используйте параметр --network=host
. Данная настройка позволит использовать сетевое подключение хоста.
Если вы указали данный параметр, то проброс портов, который показан ниже, настраивать не надо. Но тогда следует убедиться, что на хостовой машине открыты необходимые порты, как минимум: 80, 443, 4307.
Проброс портов (-p [host_port]:[container_port]/[protocol])
Привязка порта [host_port]
хостовой машины к порту [container_port]
контейнера, используя протокол [protocol]
(если он не указан, то по умолчанию используется tcp). Аналогично указываются и диапазоны портов, например -p 53000-55000:53000-55000/udp
.
Если нужно обеспечить доступ к TrueConf Server по дополнительным портам, например, для работы WebRTC, то их также следует указать:
1 |
sudo docker run -d -p 80:80 -p 443:443 -p 4307:4307 -p 53000-55000:53000-55000/udp -e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=12345 -v /home/$USER/trueconf/server/lib:/opt/trueconf/server/var/lib trueconf/trueconf-server:release |
Указание значений переменных окружения (-e [variable]=[value])
Задание переменных окружения для контейнера. Доступны такие значения:
-e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=password
– создание администратора TrueConf Server с логином tc_admin и паролем password внутри контейнера. Учтите, что данный пользователь никак не связан с пользователями хостовой ОС и потому его авторизационные данные могут быть любыми;-e INIT_DB=true
– принудительное создание чистого кластера базы данных в примонтированном на хосте томе. Это приведёт к удалению всех предыдущих настроек TrueConf Server (сведений о регистрации, списков пользователей и групп, созданных конференций и пр.), останутся только файлы записей сеансов видеосвязи, но в панели управления они отображаться не будут;-e ServerID=xxxx -e Serial=xxxx -e ServerName=xxxx
– запуск автоматической регистрации сервера после запуска контейнера, если вы ранее уже получали регистрационный ключ сервера. Здесь:ServerID
– ID сервера;Serial
– регистрационный ключ без первого блока (то есть без ID), например,BBBB-CCCC-DDDD
если ваш ключAAAAA-BBBB-CCCC-DDDD
;ServerName
– доменное имя (FQDN) для доступа к серверу, например,video.company.name
.
При этом для регистрации обязательно указывать все 3 параметра сразу.
-e ServiceAddress
– указание внешнего адреса ВКС-сервера для доступа снаружи корпоративной сети, если не указан – принимается равным адресуServerName
.
Монтирование каталогов (-v [host_path]:[container_path])
Монтирование каталога [host_path]
на хосте в каталог контейнера [container_path]
. Это обеспечит сохранение по пути [host_path]
логов и данных, генерируемых при работе сервера (настройки сервера, учётные записи, список конференций, файлы записей и пр.), а также подключение SSL-сертификатов и пользовательских скриптов. После остановки контейнера все данные сохранятся и будут доступны снова при его последующих запусках. Если каталог [host_path]
отсутствует на хосте, он будет создан автоматически.
Доступные для монтирования пути и примеры их использования:
-v /home/$USER/trueconf/server/lib:/opt/trueconf/server/var/lib
– сохранение в каталоге хоста/home/$USER/trueconf/server
всего содержимого рабочего каталога сервера, кроме лог-файлов;-v /home/$USER/trueconf/server/log:/opt/trueconf/server/var/log
– сохранение в каталоге хоста/home/$USER/trueconf/server/log
только генерируемых при работе сервера лог-файлов;-v /path/to/custom/certs:/ssl
– указание каталога/path/to/custom/certs
на хосте с файлами SSL-сертификатов для их использования сервером в контейнере. Для применения сертификатов после монтирования перейдите в раздел Веб → HTTPS панели управления сервером и в выпадающем списке Режим работы HTTPS: выберите Использовать загруженный сертификат. Нажмите последовательно кнопки Проверить конфигурацию и Применить для сохранения изменений.-v /path/to/custom/scripts:/setup.d
– монтирование тома/path/to/custom/scripts
с файлами дополнительных sh-скриптов для их запуска при старте контейнера.
- TrueConf Server работает только с форматом .crt. Таким образом, папка должна содержать два файла с расширениями: .crt для файла сертификата и .key для файла ключа. Если ваш сертификат имеет другой формат, его надо предварительно сконвертировать в .crt как показано в нашей статье о настройке HTTPS.
- Файлы должны иметь следующие название: сертификат tls.crt и ключ tls.key.
Имя и ID контейнера
Для использования ряда команд требуется знать имя и идентификатор (ID) контейнера. Чтобы узнать эти данные, выполните команду:
1 |
sudo docker ps -a |
Вы получите список всех контейнеров и их статус.
Чтобы вывести список только запущенных контейнеров, выполните:
1 |
sudo docker ps |
В документации Docker вы можете найти больше примеров работы с командой ps.
Остановка и повторный запуск контейнера
Для остановки контейнера используйте команду:
1 |
sudo docker stop vcs_server |
где vcs_server
– имя или идентификатор вашего контейнера.
Для запуска созданного и остановленного ранее контейнера используйте команду:
1 |
sudo docker start vcs_server |
Одноразовый запуск
В некоторых случаях в целях тестирования может потребоваться запуск одноразового контейнера, который будет автоматически удалён после завершения его работы. Это делается с помощью параметра --rm
.
Например, команда старта одноразового контейнера с указанием логина и пароля администратора будет выглядеть следующим образом:
1 |
sudo docker run --rm --network=host -e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=12345 trueconf/trueconf-server:stable |
Шаг 3. Активация TrueConf Server
Перейдите в панель управления сервером через браузер на любом компьютере из вашей локальной сети, указав IP адрес машины с запущенным контейнером.
Теперь вы можете активировать сервер (если вы не сделали этого ранее с помощью ключа -e) и добавить учётные записи пользователей.
Шаг 4. Добавление администраторов TrueConf Server
Перед добавлением новых пользователей с административным доступом к панели управления сервером убедитесь, что контейнер был запущен с монтированием его каталога /opt/trueconf/server/var/lib
к каталогу /home/$USER/trueconf/server/lib
на хосте как показано выше.
Данные для авторизации хранятся в трёх файлах:
- passwd – логин и в зашифрованном виде пароль;
- tcadmins – список логинов администраторов сервера с полным доступом;
- tcsecadmins – список логинов администраторов с уровнем доступа Security Admin.
Поэтому сначала надо создать их с помощью команды:
1 |
sudo touch /home/$USER/trueconf/server/docker/passwd /home/$USER/trueconf/server/docker/tcadmins /home/$USER/trueconf/server/docker/tcsecadmins |
После этого:
- Установите пакет утилит apache2-utils, который содержит программу htpasswd для управления паролями в зашифрованном виде:
1sudo apt install -yq apache2-utils - Сгенерируйте пароль для нового логина, при этом он будет сохранён в файл passwd в каталоге, из которого запущен терминал:
1htpasswd -c -d -b passwd new_admin password
где:
new_admin
– логин нового администратора;password
– пароль для него.
- Добавьте содержимое из сгенерированного файла passwd в файл
/home/$USER/trueconf/server/docker/passwd
на примонтированном томе на хосте. Вы можете воспользоваться для этого текстовым редактором (например, vim или nano, обязательно запустив их под root или через sudo) или же выполнить команду:
1sudo bash -c 'cat passwd >> /home/$USER/trueconf/server/docker/passwd' - Добавьте логин созданного администратора в файл tcadmins или tcsecadmins в зависимости от того, какой уровень доступа вы хотите ему предоставить:
1sudo bash -c 'echo new_admin >> /home/$USER/trueconf/server/docker/tcadmins' - Для проверки, что вы всё сделали правильно, войдите на гостевую страницу TrueConf Server и с помощью кнопки Вход для администратора авторизуйтесь с новыми учётными данными.
Шаг 5. Добавление контейнера в автозапуск
Чтобы контейнер с ВКС-сервером запускался автоматически (например, после перезагрузки хостовой машины), используйте ключ --restart
. Вы можете указать его с помощью команды update
(в том числе и для уже запущенного контейнера):
1 |
sudo docker container update --restart always vcs_server |
где vcs_server
– имя или идентификатор вашего контейнера.
Узнать информацию о работающем контейнере вы можете, выполнив команду sudo docker ps
.
Обновление TrueConf Server в контейнере
Для версии TrueConf Server 5.2.9 и новее
Если в контейнере запущена версия TrueConf Server 5.2.9 и новее, то для обновления требуется просто скачать новый образ (например, с тегом stable для скачивания релизной версии).
- Скачайте образ командой:
1sudo docker pull trueconf/trueconf-server:stable - Остановите имеющийся контейнер с TrueConf Server как было показано ранее:
1sudo docker stop vcs_server - Запустите новый контейнер из скачанного в п.1 образа (в примере с тегом stable), указав те же пути монтирования каталогов, которые использовались ранее:
1sudo docker run -d --network=host -e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=12345 -v /home/$USER/trueconf/server/lib:/opt/trueconf/server/var/lib trueconf/trueconf-server:stable
Если всё запустилось успешно, то предыдущие контейнер и образ можно удалить как показано ниже.
Для версии TrueConf Server 5.2.8 и старше
Если в контейнере запущена версия TrueConf Server 5.2.8 и старше, то для обновления на 5.2.9 и новее предварительно потребуется перенести информацию из базы данных:
- Скачайте образ с новой версией (например, с тегом stable для скачивания релизной версии):
1sudo docker pull trueconf/trueconf-server:stable - Перейдите в командную оболочку (терминал) контейнера с TrueConf Server:
1sudo docker exec -it vcs_server bash
гдеvcs_server
– имя или идентификатор вашего контейнера. - Создайте резервную копию (бекап) базы данных TrueConf Server:
1su -s /bin/sh postgres --command='PGCLUSTER=11/trueconf pg_dumpall -p 5433 -U postgres > /opt/trueconf/server/var/lib/database/11/trueconf/tcs_db.dump' - В результате будет сохранён бекап в примонтированном каталоге по пути
где/database/11/trueconf/tcs_db.dump
– путь, указанный при запуске контейнера. Пример пути к файлу бекапа:
1/home/$USER/trueconf/server/lib/database/11/trueconf/tcs_db.dump - Выйдите из терминала контейнера:
1exit - Скопируйте файл бекапа БД в любое удобное место, например
/home/$USER/backup
:
1sudo cp /home/$USER/trueconf/server/lib/database/11/trueconf/tcs_db.dump /home/$USER/backup - Создайте и запустите контейнер с новой версией TrueConf Server командой:
1sudo docker run -d --network=host -e ADMIN_USER=tc_admin -e ADMIN_PASSWORD=12345 -v /home/$USER/trueconf/server:/opt/trueconf/server/var/lib -e INIT_DB=TRUE -e DUMP_PATH=/opt/backup -v /home/$USER/backup:/opt/backup trueconf/trueconf-server:stable
где/home/$USER/backup
– каталог с файлом бекапа БД.Также помимо пути к бекапу БД укажите в ключе
-v
те же пути монтирования каталогов, которые использовались ранее. - Перейдите на гостевую страницу сервера по IP адресу машины с запущенным контейнером и убедитесь, что настройки перенеслись. Если всё запустилось успешно, то предыдущие контейнер и образ можно удалить как показано ниже.
Удаление контейнера и образа
Если вам больше не требуется контейнер, то вы можете удалить его с помощью команды rm
:
1 |
sudo docker rm vcs_server |
где vcs_server
– имя или идентификатор вашего контейнера. При этом соответствующий образ останется даже если удалить все контейнеры. Также в ОС останется каталог, который использовался при монтировании.
Для удаления работающего контейнера следует добавить ключ --force
:
1 |
sudo docker rm --force vcs_server |
Для удаления образа (например, если вы скачали более новый и вам не требуется больше предыдущий):
- Узнайте список всех образов вместе с тегами и идентификаторами:
1sudo docker images - Для удаления нужного образа используйте команду
rmi
, например:
1sudo docker rmi trueconf/trueconf-server:5.2.8.10213В этом примере удаляется образ с репозиторием и тегом
trueconf/trueconf-server:5.2.8.10213
. При этом если у данного образа больше нет тегов – то удалится и он сам. Подробнее о работе команды читайте в официальной документации Docker. - Т.к. команда
rmi
не освобождает место на хранилище в ОС, то для удаления с диска ненужных образов и контейнеров требуется выполнить другую командуsystem prune
:
1sudo docker system prune -a