Поделюсь я с Вами опытом настройки openmeetings 5.0.1-M1 на ubuntu 20.04. Данную статью хочу написать как можно понятнее по настройке и установке нужных пакетов для работы Openmeetings. В интернете много статьей по установке и настройке но в каждой статье есть изъяны которые мне пришлось находить и устранять. Сразу скажу, на период написания данной статьи для стабильной работы необходим SSL сертификат, а значит действующий и работающий домен с возможностью управления им и его DNS записями. Так как в данной статье я буду получать SSL сертификат бесплатно на 90 дней через cerboot и проверка будет через DNS запись. (можно сертификат получить и через сайт в данном случае через работающий на порту 80 сайт openmeetings. Так же во вступлении хочу сказать у меня не получилось браузеры заставить принимать самоподписанный сертификат как бы я не старался.
Ну преступим....
Как вы уже догадались нужно установить саму платформу ubuntu 20.04 скаченного с официального сайта ubuntu. Мне удобно было работать с desktop версией так как там уже будет установлен liberyOffice, который будет необходим для работы openmeetings.
После установки обновим всё программное обеспечение ubuntu. С помощью команд
sudo apt update
sudo apt upgrade
После удачного обновления приступим не посредственно к установке необходимых пакетов:
1) Устанавливаем Java.
sudo apt install openjdk-11-jdk openjdk-11-jdk-headless nano
установим использование нужной версии java по умолчанию
sudo update-alternatives --config java
Поглядим какая версия java у нас установлена
java -version
2) Далее можно установить libreoffice, так как мы установили desktop версию ubuntu 20.04 данный пункт можно пропустить.
sudo add-apt-repository ppa:libreoffice/ppa
sudo apt update
sudo apt install libreoffice
3) Устанавливаем ImageMagick and Sox эти библиотеки нужны для работы с файлами png, jpg, gif, и т.п.
sudo apt install -y imagemagick libjpeg62 zlib1g-dev
Далее нужно отредактировать файл policy.xml в данном файле нужно найти строки
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="PDF" />
и закоментировать
<!-- <policy domain="coder" rights="none" pattern="PS" /> -->
<!-- <policy domain="coder" rights="none" pattern="PDF" /> -->
Это можно сделать несколькими способами через редактор nano , командой
sudo nano /etc/ImageMagick-6/policy.xml
как работать в данном редакторе прочитайте самостоятельно в интернете.
Или через редактор mc. Он входим в состав файлового менеджера mc, для его установки нужно запустить
sudo apt install mc
и запустить его командой
sudo mc
для меня он более удобнее в использовании, но не буду я его Вам навязывать.
устанавливаем sox
sudo apt install sox
4) Устанавливаем FFmpeg.
sudo apt install ffmpeg vlc curl
5) Для работы нужна база данных и как по описанию мы будем использовать MariaDB. После установки базы данных обязательно проверяем что она запустилась и работает нормально к данной настройке нужно отнестись внимательно.
Установка базы
sudo apt update
sudo apt install mariadb-server
После установки проведём её настройку командой
sudo mysql_secure_installation
Он задаст несколько вопросов а именно
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
Здесь он спрашивает пароль установить пароль на root пользователя, не в коем случае не вводим ни какой пароль, так как если введёте пароль то база данных у вас не стартует это поле оставляем пустым. Нажимает enter.
Так в Ubuntu учетная запись root для MariaDB тесно связана с автоматизированным обслуживанием системы, так что мы не должны изменять настроенные методы аутентификации для этой учетной записи. На вопрос
Set root password? [Y/n]
отвечаем нет (N).
Далее на все вопросы отвечаем Y (Yes).
Проверяем работает ли база данных в штатном режиме
sudo systemctl status mariadb
Если всё работает ОК и нет ни каких ошибок идём дальше, а именно нам нужно создать базу и пользователя для этой базы... Для этого зайдём через командную строку в mysql.
sudo mariadb
И создадим базу, пользователя и назначим привилегии для данного пользователя.
- CREATE DATABASE open500 DEFAULT CHARACTER SET 'utf8';
- GRANT ALL PRIVILEGES ON open500.* TO 'hola'@'localhost'
IDENTIFIED BY '1a2B3c4D' WITH GRANT OPTION;
- quit
где open500 - имя вашей базы данных
hola'@'localhost - это имя пользователя, в данном случае меняем только hola (это и есть имя пользователя)
1a2B3c4D - Это пароль для пользователя hola (в Вашем случае пароль для вашего пользователя его придумываете сами и запоминаете, далее он ещё пригодится)
Это мы создали базу и пользователя для работы openmeetings, но у данного пользователя нет прав для администрирования MariaBD. Создадим пользователя с правами администратора баз данных.
sudo mariadb
GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEG;
exit
где admin - пользователь с полными правами на администрирование базы данных.
password - пароль для административного пользователя.
Для удобного администрирования базы данных я поставил графическую утилиту MySQL WorkBanch.
Всё с установкой и настройка базы данных мы закончили пошли дальше...
6) Теперь мы подошли к самому главному, зачем мы и здесь собрались установка самой платформы Openmeetings, для это мы должны скачать данную программу с официального сайта и мы её будем ставить в папку opt/. Для скачивания воспользуемся командой
cd /opt
sudo wget https://apache-mirror.rbc.ru/pub/apache/openmeetings/5.1.0/bin/apache-openmeetings-5.1.0.tar.gz
С качается программа дальше её нужно будет распаковать в папку /opt сервера, по умолчанию архив будет лежать в этой папке.
sudo tar xzvf apache-openmeetings-5.1.0.tar.gz
Для более удобного использования переименуем распакованную папку в удобный для нас формат.
sudo mv apache-openmeetings-5.1.0 open500
Далее в ранее созданной папке с программой создадим несколько комнат видео конференций
sudo mkdir -p /opt/open500/webapps/openmeetings/data/streams/{1,2,3,4,5,6,7,8,9,10,11,12,13,14}
sudo mkdir -p /opt/open500/webapps/openmeetings/data/streams/hibernate
Далее установим права на папки
sudo chmod -R 750 /opt/open500/webapps/openmeetings/data/streams
sudo chown -R nobody:nogroup /opt/open500
cd /opt
Для нормальной работы базы данных с нашим приложением в данном случае Java нужно скачать коннектор и скопировать его в папку /opt/open500/webapps/openmeetings/WEB-INF/lib нашего приложения.
sudo wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.22/mysql-connectorjava-8.0.22.jar
далее копируем как говорилось ранее
sudo cp /opt/mysql-connector-java-8.0.20.jar/opt/open500/webapps/openmeetings/WEB-INF/lib
Далее качаем скрипт запуска web сервера tomcat.
cd /opt
sudo wget https://cwiki.apache.org/confluence/download/attachments/27838216/tomcat3
Копируем его в исполнительную директорию ubuntu.
sudo cp tomcat3 /etc/init.d/
И редактируем данный файл в скопированной директории где указываем рабочую папку нашего проекта. Находим в файле строку CATALINA_HOME= /opt/open501 и меняем путь до вашего проекта в нашем случае на /opt/open500. И сохраняем данный файл.
Устанавливаем разрешение на данный файл
- sudo chmod +x /etc/init.d/tomcat3
Промежуточная настройка openmeetings закончена, идем далее...
7) Для корректной работы сервера видео конференций нам необходим медиасервер. И для этих целей мы будем использовать Kurento-Media-Server. Данный сервер мы в данной статье не будем собирать и настраивать, а возьмём его готовый и настроенный из docker контейнера. Для этого нам необходимо установить и проверить работы docker. Приступим к данной процедуре
- sudo apt update
- sudo apt install apt-transport-https ca-certificates curl software-properties-common
добавим докер в наш репозиторий:
- sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
- sudo apt update
Поглядим есть ли docker в нашем кэше репозитория.
- apt-cache policy docker-ce
docker-ce:
Installed: (none)
Candidate: 5:19.03.9~3-0~ubuntu-focal
Version table:
5:19.03.9~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packagesdocker-ce:
Installed: (none)
Candidate: 5:19.03.9~3-0~ubuntu-focal
Version table:
5:19.03.9~3-0~ubuntu-focal 500
500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
Устанавливаем docker.
- sudo apt install docker-ce
- sudo apt install docker-compose
Проверяем работает ли наш docker после установки, командой
- sudo systemctl status docker
Должно быть появиться следующий текст
Output
? docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-05-19 17:00:41 UTC; 17s ago
TriggeredBy: ? docker.socket
Docs: https://docs.docker.com
Main PID: 24321 (dockerd)
Tasks: 8
Memory: 46.4M
CGroup: /system.slice/docker.service
+-24321 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Для нас важна следующая надпись active (running)
Oтвязываем docker от sudo
- sudo usermod -aG docker ${USER}
стартуем сервис докера.
- sudo systemctl start docker.service
Ну вот мы и дошли до установки Kurento-Media-Server.
Стартуем докер сервис.
- sudo systemctl start docker.service
Запускаем образ Kurento-Media-Server под именем kms и говорим ему что нужно использовать наш проект
- sudo docker run -d --name kms -p 8888:8888 --mount type=bind,source=/opt/open500/webapps/openmeetings/data,target=/opt/open500/webapps/ openmeetings/data kurento/kurento-media-server
Запускаем наш созданный контейнер.
- sudo docker start kms
Ну вот и всё, дальше проверяем что все запущено.
- sudo /etc/init.d/mysql start
- sudo /etc/init.d/tomcat3 start
По официальному описанию сайт будет доступен по адресу https://localhost:5443/openmeetings. Можно понять что на данном этапе мы можем что то настроить но работать должным образом работать не будет так как современные браузеры с web камерами и микрофонами работает только по протоколу https. Отсюда становится ясно что без сертификата SSL у нас ничего толком работать не будет. Да и кроме сертификата мы ещё не поставили и не настроили stun server. Чем дальше и займёмся... Начнём с получения сертификата SSL через утилиту cerbot.
8) Устанавливаем cerbot.
- sudo apt install certbot
Далее получаем сертификат на определённый домен
- certbot certonly --manual --preferred-challenges dns -d (имя вашего домена)
Далее он скажет что нужно в вашем домене в dns создать txt запись со значением указанным в результате выполнения предыдушей команды.
Созданные три файла сертификатов будут находиться по пути /etc/letsencrypt/live/(ваш домен)
Так как в нашем проекте используется tomcat, то для дальнейшей настройки сертификата нам понадобится утилита openssl, если её нет то нужно установить следующей командой.
- sudo apt install openssl
Далее преобразуем полученые сертификаты через cerbot в нужный формат для tomcat.
- sudo openssl pkcs12 -export -out /tmp/example.com_fullchain_and_key.p12 -in /etc/letsencrypt/live/example.com/fullchain.pem -inkey /etc/letsencrypt/live/example.com/privkey.pem -name tomcat
где example.com_fullchain_and_key.p12 - имя нового файла ключа
/etc/letsencrypt/live/example.com/fullchain.pem -inkey здесь example.com меняем на ваш домен.
/etc/letsencrypt/live/example.com/privkey.pem -name tomcat - в этой строке example.com меняем на ваш домен.
Выше команда состоящая из трёх строк, но это одна команда. Во время выполнения данной команды попросят ввести пароль на ключ, обязательно его вводим, он далее понадобится. В результате выполнения данной команды в папке /tmp будет файл example.com_fullchain_and_key.p12.
далее создаём сертификат с которым работает tomcat.
- sudo keytool -importkeystore -deststorepass samplePassword -destkeypass samplePassword -destkeystore /tmp/example.com.jks -srckeystore /tmp/example.com_fullchain_and_key.p12 -srcstoretype PKCS12 -srcstorepass samplePassword -alias tomcat
где samplePassword - пароль созданный ранее командой openssl.
example.com_fullchain_and_key.p12 - это ранее созданный файл, если меняли его имя то же его следует поменять.
example.com.jks - имя создаваемого файла сертификата для tomcat, по умолчанию будет находиться папке /tmp.
Далее полученный файл копируем в папку конфигурации нашего проекта:
- sudo cp /tmp/example.com.jks /opt/open500/conf
Далее открываем файл конфигурации сервера для редактирования:
- sudo nano /opt/open500/conf/server.xml
находим в данном файле следующий фрагмент:
<Connector port="5443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost.jks"
certificateKeystorePassword="openmeetings"
certificateKeystoreType="JKS"
certificateVerification="false"
sslProtocol="TLS"
type="RSA" />
</SSLHostConfig>
и изменяем его на
<Connector port="5443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/example.com.jks"
certificateKeystorePassword="samplePassword"
certificateKeystoreType="JKS"
certificateVerification="false"
sslProtocol="TLS"
type="RSA" />
</SSLHostConfig>
где <Certificate certificateKeystoreFile="conf/example.com.jks" - путь до созданного файла сертификата.
certificateKeystorePassword="samplePassword" - здесь указывается пароль ранее введённый при создании сертификатов.
После добавления сертификата следует перезапустить сервер tomcat командой:
- sudo /etc/init.d/tomcat3 restart
9) Установка turn сервера (Coturn server) и его настройка.
устанавливаем сам сервер
- sudo apt install coturn
В файле /etc/default/coturn раскоментируем строку TURNSERVER_ENABLED=1
- sudo nano /etc/default/coturn
Создадим папку для логов coturn servera:
- sudo mkdir -p /var/log/turnserver
Сгенерируем пароль взаимодействия.
sudo openssl rand -hex 32
пароль будет что то вроде такого 751c45cae60a2839711a94c8d6bf0089e78b2149ca602fdXXXXXXXXXXXXXXXXX
Мы его копируем он нам дальше понадобится.
Далее редактируем конфигурационный файл turn servera.
- sudo nano /etc/turnserver.conf
Где находим следующие строки и меняем так как у меня, в полях связанных с паролем вносим свои.
external-ip = (указываете свой внешний ip адрес сервера где крутится openmeetings)
use-auth-secret
static-auth-secret=751c45cae60a2839711a94c8d6bf0089e78b2149ca602fdX (это пароль сгенерированный ранее)
user=nobody:a_new_password (в место a_new_password указываете свой пароль)
realm=your_real_domain (your_real_domain - ваш домен)
stale-nonce=0 (принимает значения от 0 до 600 ставим 0)
log-file=/var/log/turnserver/turnserver.log (расположение лог файла, данного файла в данной папке нет нужно его создать)
Настройка turn сервера закончена, далее настроим наше приложение для работы с turn сервером. Для этого отредактируем файл.
- sudo nano /opt/open500/webapps/openmeetings/WEB-INF/classes/applicationContext.xml
Найдем раздел kurento и отредактируем его так как показано ниже.
<!-- Kurento -->
<bean id="kurentoHandler" class="org.apache.openmeetings.core.remote.KurentoHandler"
p:kurentoWsUrl="ws://127.0.0.1:8888/kurento"
p:checkTimeout="10000"
p:watchThreadCount="10"
p:turnUrl="Public IP of your server:3478"
p:turnUser="nobody:password"
p:turnSecret="751c45cae60a2839711a94c8d6bf0089e78b2149ca602fdXXXXXXXXXXXXX"
p:turnMode="rest"
p:turnTtl="60"
p:objCheckTimeout="200"
p:flowoutTimeout="5"
/>
где меняем выделенные фрагменты на ваши данные созданные ранее.
все перезапускаем все сервисы
- Restart coturn: sudo /etc/init.d/coturn restart
- Restart Kurento: sudo docker restart kms
- Tomcat-OpenMeetings: sudo /etc/init.d/tomcat3 restart
Для нормальной работы сервера нужно чтобы были открыты следующие порты
3478 TCP-UDP IN
5443 TCP IN
8888 TCP IN
49152:65535 UDP IN-OUT
Для этого выполним следующие команды и перезапустим фаервол.
- sudo iptables -A INPUT -p tcp -m tcp --dport 3478 -j ACCEPT
- sudo iptables -A INPUT -p udp -m udp --dport 3478 -j ACCEPT
- sudo iptables -A INPUT -p tcp -m tcp --dport 5443 -j ACCEPT
- sudo iptables -A INPUT -p tcp -m tcp --dport 8888 -j ACCEPT
- sudo iptables -A INPUT -p udp --match multiport --dports 49152:65535 -j ACCEPT
- sudo iptables -A OUT -p udp --match multiport --dports 49152:65535 -j ACCEPT
- sudo service iptables save
- sudo service iptables restart
Данные команды у вас отработают без ошибок если у Вас установлен iptables.
Всё запускаем в браузер https://localhost:5443/openmeetings и дальше его настраиваем согласно инструкции которую я сделаю чуть позже. Как видно после запуска данной ссылки браузер у нас блогополучно увидел установленный сертификат и больше не ругается....