Установка сервера Ejabberd 23.10 со звонками в «2 клика» Ubuntu 22.04

Долго искал и собирал хорошую инструкцию, пока не собрался с духом и не создал ее сам. В сети предлагают использовать субдомены, честно я пробовал, получился какой-то кавардак, так что возьмем просто домен example.com.(вы берете свой). Разобрался, можно и субдомены, ничего сложного просто добавляем например jabber.exampl.com, conference.jabber.exampl.com и так делее.

Создаем записи DNS:

А и АААА(если есть IPv6) на example.com

Создаем субдомены conference.example.com, proxy.example.com, pubsub.example.com, upload.example.com , прописываем А и АААА

Создаем ряд SRV-записей для нашего основного домена:

_xmpp-client._tcp.EXAMPLE.COM (порт 5222) Weight (required) 14400, приоритет 100 — чтобы указать, куда подключаться jabber-клиенту

_xmpps-client._tcp.example.com (порт 5223) приоритет 100 — аналогичная запись для TLS-подключений клиентов

_xmpp-server._tcp.example.com (порт 5269) приоритет 100 — чтобы указать, куда подключаться jabber-серверу

_xmpps-server._tcp.example.com(порт 5270) приоритет 100 — аналогичная запись для TLS-подключений серверов.

Записи ниже служат для работы сервиса аудио/видеозвонков через jabber:

_stun._tcp.example.com (порт 3478) — STUN через TCP приоритет 0

_stun._udp.example.com (порт 3478) — STUN через UDP приоритет 0

_stuns._tcp.example.com (порт 5349) — шифрованный STUN через TCP приоритет 0

_turn._tcp.example.com (порт 3478) — TURN через TCP приоритет 0

_turn._udp.example.com(порт 3478) — TURN через UDP приоритет 0

_turns._tcp.example.com(порт 5349) — шифрованный TURN через TCP приоритет 0

Ждем пока обновится DNS 2-8 часов, до 3х суток. Когда будете добавлять DNS SRV смотрите чтобы все было корректно, у разных хостеров панели DNS разные. Если что посмотрите таблицу от сюда

Удаляем Snapd и прописываем IPv6(если нет). Необязательные действия.

Поехали, если у вас хостер TimeWeb как у меня дает IPv6, но прописывать его на сервер вам стоит самим, а так же я удаляю Snapd, то делаем:

sudo systemctl stop snapd && sudo systemctl disable snapd && sudo apt purge snapd && rm -rf ~/snap && sudo rm -rf /snap /var/snap /var/lib/snapd /var/cache/snapd /usr/lib/snapd /root/snap && ip -f inet6 a add 2a03:6f00:4::3dda/64 dev eth0 && ip -f inet6 r add default via 2a03:6f00:4::1 dev eth0 && nano /etc/netplan/00-installer-config.yaml

Удалится Snapd, и пропишется Ipv6 ip -f inet6 a add 2a03:6f00:4::3dda/64(меняете на свои) dev eth0 && ip -f inet6 r add default via 2a03:6f00:4::1 (меняете на свои) dev eth0. Вот эта подсеть 2a03:6f00:4::1 делается так, если у вас Ipv6 2a03:6f00:4 заканчивается до :: на 4, оставляете как в примере, на 5 меняете и т.д. хвост ::1, 2a03:6f01:1:2::1 и т.д. будет одинаков для всех меняется только цифра. После запуска кода откроется файл 00-installer-config.yaml. Если у вас он пустой, то стоит определить какой он у вас в системе запустив:

ls /etc/netplan
вывод будет примерно таким 
00-installer-config.yaml

После получения, запускаете его отдельно(если мой не подошел сразу), и прописывайте в него:

network:
   version: 2
   renderer: networkd
   ethernets:
      eth0:
         dhcp4: yes
         addresses: ["2a03:6f00:4::1808/64"]
         gateway6: "2a03:6f00:4::1"

Применяете с помощью команды ниже, и лучше после всего этого перезапустить сервак.

netplan --debug apply

Устанавливаем и настраиваем файл подкачки для Ubuntu 22.04 в один клик(необязательно)

sudo fallocate -l 1G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile && echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab && sudo sysctl vm.swappiness=10 && sudo sysctl vm.vfs_cache_pressure=50 && sudo nano /etc/sysctl.conf

Откроется файл /etc/sysctl.conf , пропишите в самый низ(зачем именно так почитайте в сети, но поверьте так лучше, мне лень писать читайте здесь)

vm.swappiness=10
vm.vfs_cache_pressure=50

Самая простая и быстрая установка

  1. curl -o /etc/apt/sources.list.d/ejabberd.list https://repo.process-one.net/ejabberd.list && curl -o /etc/apt/trusted.gpg.d/ejabberd.gpg https://repo.process-one.net/ejabberd.gpg && apt update && apt upgrade && apt install ejabberd
  2. После установки сервера, загрузите ejabberd.yml по FTP в папку /opt/ejabberd/conf с уже заполненной базой и всеми параметрами, перезагрузите сервер.
  3. iptables -t nat -A PREROUTING -p tcp —dport 80 -j REDIRECT —to-port 5280 && ejabberdctl request-certificate all && ejabberdctl list-certificates && iptables -t nat -D PREROUTING -p tcp —dport 80 -j REDIRECT —to-port 5280 && ejabberdctl register kU%n@ANJ%x$&ZR8zd jabber.angelka.ru kU%n@ANJ%x$&ZR8zd#rcHSbg9$&vFuaWxGqoH7rH
  4. Авто продление сертификатов здесь

Создание базы данных MariaDB(рекомендуется)

Приступим к установке, а конфиге просто поправите потом внеся свои данные:

sudo apt update && sudo apt upgrade && apt install mariadb-server && mysql_secure_installation

Установится база, говорите нет, нет, да, да и по моему еще раз да). Дальше все что что стоит делать, это скопировать этот перечень команд, (можно изменить название базы например с ejabberd на другую), и придумать пароль для базы который вы будете вводить по мере запроса. Его вы пропишите в конфиге

echo "CREATE DATABASE ejabberd;" | mysql -h localhost -u root -p && echo "GRANT ALL ON ejabberd.* TO 'ejabberd'@'localhost' IDENTIFIED BY 'sDo46v7UwXZqaMUqpwmZzsSN3TovcV';" | mysql -h localhost -u root -p && wget https://raw.githubusercontent.com/processone/ejabberd/master/sql/mysql.sql && mysql -h localhost -D ejabberd -u ejabberd -p < mysql.sql && echo "SHOW TABLES;" | mysql -h localhost -D ejabberd -u ejabberd -p --table

Теперь добавьте в конфиг ejabberd.yml:

#MariaDB with ejabberd
default_db: sql
auth_method: sql

sql_type: mysql
sql_server: localhost
sql_database: ejabberd
sql_username: ejabberd
sql_password: sDo46v7UwXZqaMUqpwmZzsSN3TovcV
## If you want to specify the port:
sql_port: 3306
#Для обновления схемы, при обновлении до новой версии ejabberd
update_sql_schema: true

Теперь для корректного обновления базы при обновлении ejabberd, добавьте в конфиг ejabberd.yml:

update_sql_schema: true

Установка сервера Ejabberd в один клик.

Вот здесь hostnamectl set-hostname example.com замените на свой домен, это автоматически пропишет его к серверу. Так же сразу регистрируем нового пользователя ejabberdctl register aHpFNvP4doRgNu7 stihiduhi.ru 8kXe8quM7gCrHV746pFoAGqDJr2Bng, поменяйте ниже на свои логин и пароль, а так же свой домен.

hostnamectl set-hostname example.com && curl -o /etc/apt/sources.list.d/ejabberd.list https://repo.process-one.net/ejabberd.list && curl -o /etc/apt/trusted.gpg.d/ejabberd.gpg https://repo.process-one.net/ejabberd.gpg && apt update && apt upgrade && apt install ejabberd  

#После установки сервера, загрузите ejabberd.yml по FTP в папку /opt/ejabberd/conf с уже заполненной базой и всеми параметрами, перезагрузите сервер. И только после этого, когда база уже подхватится, выполните команды ниже. Это зарегистрирует вашего пользователя в новой базе, и второе,спокойно создаст сертификаты Acme без ошибок.

ejabberdctl register aHpFNvP4doRgNu7 example.com 8kXe8quM7gCrHV746pFoAGqDJr2Bng && iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 5280

# Теперь выпустите сертификаты, и проверьте их список если захотите

ejabberdctl request-certificate all
ejabberdctl list-certificates

Система обновится, установится репозиторий последней версии Ejabberd, установит последнюю версию. После чего откроется вывод состояния сервера, после просмотра нажмите q и выйдите.

После чего скачиваем файл ejabberd.yml и меняем host example.com на свой, а

acl:
  admin:
      - user: [email protected]
  local:
    user_regexp: ""
  loopback:
    ip:
      - 127.0.0.0/8
      - ::1/128

На свои user что вы придумали. Перезапускаем и заходим в интерфейс, меняя example.com на свой.

systemctl restart ejabberd
http://example.com:5280/admin
#либо по безопасному
https://example.com:5443/admin

Всё!) Вот файл ejabberd.yml , в котором уже все прописано. 1. Имя хоста. 2. Пользователь как показано выше. 3. Замените IP адреса на свои. 4. Если нет Ipv6 просто удалите все блоки с ним связанные. 5. Отличие от оригинального файла, это наличие звонков(можете сравнить их оба). 6. Сертификаты выпустятся сами, благодаря прописанному acme и переадресации портов в команде установки iptables -t nat -A PREROUTING -p tcp —dport 80 -j REDIRECT —to-port 5280. Замените его например через FileZilla, в папке /opt/ejabberd/conf/ejabberd.yml , или можете например заменить через nano /opt/ejabberd/conf/ejabberd.yml, но это долго). Замените в файле так же IP адреса на свои.

Правила UFW

ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 5280/tcp
ufw allow 5443/tcp
ufw allow 5222/tcp
ufw allow 5223/tcp
ufw allow 5269/tcp
ufw allow 4369/tcp
ufw allow 3478/udp
ufw allow 5349/tcp
ufw allow 49152:65535/tcp
ufw allow 49152:65535/udp
ufw enable

*Если вы не заходите(или доступ по HTTP на порт 5280 отключен), то в UFW не открывайте или закройте 5280. Отключить можно вот так, применимо и к порту 5443

    port: 5280
    ip: "::"
    module: ejabberd_http
    tls: false
    request_handlers:
#      /admin: ejabberd_web_admin
      /.well-known/acme-challenge: ejabberd_acme

Авто продление сертификатов Раз в два месяца

Так как у нас создание и продление сертификатов не стоит делать ejabberd от root, то создаем в любом удобном месте скрипт, например в /root

nano /root/prodlenie.sh

Пишем туда

#!/bin/bash
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 5280
ejabberdctl request-certificate all
ejabberdctl list-certificates
iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 5280

Делаем скрипт исполняемым

cd /root
chmod +x prodlenie.sh

Создаем задачу в cron. Пишем crontab -e, и выбираем 1 nano, ну или другой редактор. Открывается файл в самый низ вносим 0 0 1 */2 * /root/prodlenie.sh. Время можете настроить любое, сертификат действует 3 месяца, по мне оптимально продлевать через 2. Создать любое время и не запутаться можно здесь.

crontab -e
0 0 1 */2 * /root/prodlenie.sh

Создание постоянной группы

Введите название группы вместо «Open Discussion» и свой домен вместо marekfoss.org

cd /opt/ejabberd-20.03/bin
./ejabberdctl create_room open conference.marekfoss.org marekfoss.org # creates a public chat room [email protected]
./ejabberdctl change_room_option open conference.marekfoss.org persistent true # makes chat room persistent
./ejabberdctl change_room_option open conference.marekfoss.org title "Open Discussion" # assigns a room title

Таким образом группа останется когда даже из нее выйдут все участники, а вся переписка сохранится. Адрес группы конечно стоит записать)

Install Ejabberd server 23.01 with calls in "2 clicks" Ubuntu 22.04 without nginx certbot 5 minutes