Долго искал и собирал хорошую инструкцию, пока не собрался с духом и не создал ее сам. В сети предлагают использовать субдомены, честно я пробовал, получился какой-то кавардак, так что возьмем просто домен 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
Самая простая и быстрая установка
- 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 с уже заполненной базой и всеми параметрами, перезагрузите сервер.
- 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
- Авто продление сертификатов здесь
Создание базы данных 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
Таким образом группа останется когда даже из нее выйдут все участники, а вся переписка сохранится. Адрес группы конечно стоит записать)