LINUX.ORG.RU

Не работает веб-панель ejabberd сервера.

 , ,


0

2

Всем здравствуйте. Сразу скажу что я новичок в линуксе, но тут решил для работы создать свой чат ejabberd. Предварительно купил домен и настроил ресурсные записи типа А и SRV. В общем все те что требуются для того чтобы чат работал как с сообщениями так и с голосовой передачей.

Пользовался инструкцией с данного ресурса https://ru.linux-console.net/?p=20703.

Делаю шаг за шагом, но в конечном итоге все остановилось на последнем шаге под номером 5.

В веб-панель по итогу войти не могу.

Уже перегуглил весь интернет, решить не получается, уже и net.ipv4.ip_forward=1 настроил, установил файрвол ufw, там настроил таблицу *nat. Но все мои попытки решить вопрос не увенчались успехом.

Буду признателен если хоть кто-то откликнется на мой крик о помощи.

Ответ на: комментарий от YAR

Подскажите пожалуйста как проверить это обращение на 5280 порт?

ss -tunelp | grep 5280

Вот эта команда в той инструкции по установке типа чтоб убедиться. Ввожу ее и ничего не происходит абсолютно.

pokemon9505
() автор топика
Ответ на: комментарий от pokemon9505

Ок, раз там пусто - ejabberd почему-то не открыл порт.

Открой в одной консоли

tail -f /var/log/ejabberd/ejabberd.log

В другой - перезапусти сервер и смотри, на что ругается. Возможно, где-то ошибка синтаксиса в конфиге или что-то такое.

YAR ★★★★★
()
Ответ на: комментарий от YAR

у меня эта команда вообще не срабатывает. Файл ejabberd.log у меня находится в другой директории, в этой /opt/ejabberd/logs/ejabberd.log.

В общем при введении команды которую вы указали ответ получил такой: tail: cannot open ‘/var/log/ejabberd/ejabberd.log’ for reading: No such file or directory tail: no files remaining

pokemon9505
() автор топика
Ответ на: комментарий от YAR

Я вот еще думаю может сама система которая ставится от провайдера какая - то нестабильная. Быть может попробовать сделать ubuntu 20.04 вместо 22.04, или же вообще debian… не уверен конечно что это поможет, но все же…

pokemon9505
() автор топика
Ответ на: комментарий от YAR

Ввел такую команду tail -f /opt/ejabberd/logs/ejabberd.log

Получил какие то критические ошибки насколько я понял:

2023-11-23 12:53:23.617321+01:00 [info] <0.178.0>@ejabberd_config:load/1:82 Loading configuration from /opt/ejabberd/conf/ejabberd.yml

2023-11-23 12:53:23.720930+01:00 [critical] <0.178.0>@ejabberd_app:start/2:72 Failed to start ejabberd application: Unknown option: admin. Did you mean acme?

2023-11-23 12:53:29.829160+01:00 [info] <0.178.0>@ejabberd_config:load/1:82 Loading configuration from /opt/ejabberd/conf/ejabberd.yml

2023-11-23 12:53:29.926097+01:00 [critical] <0.178.0>@ejabberd_app:start/2:72 Failed to start ejabberd application: Unknown option: admin. Did you mean acme?

2023-11-23 12:53:35.826283+01:00 [info] <0.178.0>@ejabberd_config:load/1:82 Loading configuration from /opt/ejabberd/conf/ejabberd.yml

2023-11-23 12:53:35.934593+01:00 [critical] <0.178.0>@ejabberd_app:start/2:72 Failed to start ejabberd application: Unknown option: admin. Did you mean acme?

2023-11-23 12:53:41.807253+01:00 [info] <0.178.0>@ejabberd_config:load/1:82 Loading configuration from /opt/ejabberd/conf/ejabberd.yml

2023-11-23 12:53:41.909065+01:00 [critical] <0.178.0>@ejabberd_app:start/2:72 Failed to start ejabberd application: Unknown option: admin. Did you mean acme?

2023-11-23 12:53:47.827097+01:00 [info] <0.178.0>@ejabberd_config:load/1:82 Loading configuration from /opt/ejabberd/conf/ejabberd.yml

2023-11-23 12:53:47.926630+01:00 [critical] <0.178.0>@ejabberd_app:start/2:72 Failed to start ejabberd application: Unknown option: admin. Did you mean acme?

pokemon9505
() автор топика
Ответ на: комментарий от pokemon9505

1. Конфиг jabber-сервера, а не логи. То, что у тебя там 100500 ошибок про админа - я уже понял. Теперь я пытаюсь понять, почему и где ты еще накосячил.
2. Используй доступные для всех paste-сервисы, а не только из Чебурнета.

YAR ★★★★★
()

Выложите /opt/ejabberd/conf/ejabberd.yml на https://paste.debian.net/ с опцией Create this paste as a non-public (hidden) paste? и Expiration: 3d или 90d. Также после публикации можете сохранить ссылку для удаления пасты, но она отображается только один раз сразу после публикации. Не переходите по ней раньше времени, потому что после перехода паста удаляется сразу без подтверждения.

Если в конфиге есть какие-либо пароли, ключи или другие данные, которыми не хотите делиться чтобы их никто не узнал (имя домена, доступные извне IP-адреса, JID админов и т.д.), то не просто сотрите их, а замените на какой-то текст типа redacted / deleted, так мы поймём что это не ошибка с пропущенным значением, а что на самом деле там что-то есть, .

xenith
()
Ответ на: комментарий от pokemon9505

Ну, для начала - у тебя ejabberd_web_admin на двух портах сразу объявлен. Оставь какой-то один вариант - пусть будет 5443. ejabberd_acme ты не используешь, можешь блок с 5280 вообще убрать. MQTT тебе точно нужен? :). Убирай.

YAR ★★★★★
()
Ответ на: комментарий от pokemon9505

На строках 99-101 надо добавить два пробела в начало каждой строки, так, чтобы блок admin: и его потомки оказались на одном уровне с local: и loopback:. Именно про это была ошибка Unknown option: admin. Did you mean acme?.

xenith
()
Ответ на: комментарий от YAR

Ну, для начала - у тебя ejabberd_web_admin на двух портах сразу объявлен.

Почему-то так оно у них в примере дефолтного конфига.

MQTT тебе точно нужен? :). Убирай.

Это тоже из дефолтного конфига. Надо закомментировать блок mqtt на строках 84-88 и mod_mqtt: {} на строке 194.

ejabberd_acme ты не используешь

Похоже на то. Если на сервере стоит отдельный certbot или его аналог для получения сертификатов от Let’s Encrypt, или если сертификат куплен за деньги, то ejabberd_acme действительно стоит отключить вместе с лишним /admin, закомментировав или удалив строки 67-73.

К слову, в случае с Let’s Encrypt надо сделать deploy hook, чтобы после обновления сертификатов он записывал их в нужное место и говорил ejabberd’у их перечитать. Без этого каждые три месяца сертификаты будут отваливаться, и надо будет лезть на сервер и чинить их руками. Это сделать очень просто, но десятки, даже сотни, если не тысячи администраторов про это забывают, или им лень разбираться, и оно у них постоянно отваливается. Если нужно, могу расписать как это сделать,

В дефолтном конфиге ejabberd предлагают как альтернативу встроенного acme-клиента читать сертификаты прямо из /etc/letsencrypt/live/, но так делать категорически не рекомендую, ведь тогда надо либо запускать ejabberd от рута, либо менять пермишены на пути к сертификатам на менее безопасные. Лучше держать отдельные копии, как это и сделал автор, и как делает вышеупомянутый deploy hook.

@pokemon9505, надеюсь, понятно расписал.

xenith
()
Ответ на: комментарий от xenith

Посмотрел на различия конфига с дефолтным – это полностью дефолт, изменён только hosts:, добавлены admin:, certificates: и ca_file:.

По поводу ca_file: – если вдруг на сервере используется самодельный самоподписанный сертификат, то всё, что я писал про Let’s Encrypt, можно забыть. Если же нет, и тут Let’s Encrypt или платный сертификат, то эта опция не должна быть нужна и от неё можно избавиться.

xenith
()
Ответ на: комментарий от xenith

Сертификат не покупал, если честно пока не понимаю как это делать правильно. И он обязателен вообще?

Изменения на которые указали вы и человек с ником YAR попробовал выполнить. Выкладываю конфиг после поправок https://paste.debian.net/hidden/73ef1355/

pokemon9505
() автор топика
Ответ на: комментарий от pokemon9505

Сертификат не покупал, если честно пока не понимаю как это делать правильно. И он обязателен вообще?

От платного certification authority (CA, удостоверяющий центр) не обязателен, поскольку CA Let’s Encrypt выдаёт бесплатные. Если правильно настроить его получение, то всё будет работать надёжно и обновляться автоматически.

Нужен он вообще для того, чтобы соединение с сервером было шифрованным. Отличие выданного удостоверяющим центром от самоподписанного (самодельного) в том, что на самоподписанный будут ругаться все клиенты, а некоторые не дадут соединиться, плюс почти все другие сервера в сети откажутся общаться с вашим.

А вообще, откуда вы взяли то, что у вас лежит по пути /opt/ejabberd/conf/server.pem и /opt/ejabberd/conf/cacert.pem? Только показывать их содержимое не надо, просто скажите откуда они.

xenith
()
Последнее исправление: xenith (всего исправлений: 1)
Ответ на: комментарий от pokemon9505

Понял. Сейчас установил на убунте и проверил, что он автоматически генерирует самоподписанный server.pem из того hostname, который вы прописали перед первым шагом в вашей инструкции, а cacert.pem взят отсюда – он нормальный, но со временем устаревает, и лучше использовать системный вместо него.

Иными словами, они туда кладут заглушку просто чтобы сервер запустился. Вам надо будет настроить получение своего сертификата. Если вы не планируете держать на вашем сервере какие-либо другие доступные извне сервисы, кроме ssh, то ejabberd может справиться с этим сам. Если планируете, то следует пойти по иному пути и настроить certbot. Я бы пошёл по второму пути даже если бы сейчас мне нужен был только ejabberd, просто потому что так будет проще когда понадобится установить и настроить что-нибудь ещё.

Но давайте сначала запустим сервер, а потом будем разбираться с сертификатами.

xenith
()
Последнее исправление: xenith (всего исправлений: 1)
Ответ на: комментарий от pokemon9505

К слову, об инструкции:

Добавьте расположение команды ejabberdctl в свой PATH.

Этот шаг необязательный, ejabberdctl всегда можно запускать по полному пути вида /opt/ejabberd-23.10/bin/ejabberdctl. Если же для удобства хочется запускать его просто как ejabberdctl, то шаг можно выполнить, только вместо vim для редактирования файла лучше использовать более дружелюбный редактор nano, так как с vim может быть трудно справиться. Строку с PATH следует добавить в конце файла.

По поводу следующей команды:

sudo cp $(sudo find / -name ejabberd.service) /etc/systemd/system

Вот этот шаг скорее вредный. Вероятно, раньше он был нужен, но на свежих версиях ejabberd стал лишним.

Сервис уже лежит в /usr/lib/systemd/system/ejabberd.service и systemd уже его видит, делать свою копию в /etc/systemd/system/ не следует, ведь тогда при обновлениях исходного файла systemd не увидит в нём изменений, а будет видеть только вашу устаревшую копию. Рекомендую его удалить:

rm /etc/systemd/system/ejabberd.service
systemctl daemon-reload

Тот, что в /usr/lib/systemd/system/ejabberd.service, продолжит работать вместо него.

xenith
()
Последнее исправление: xenith (всего исправлений: 2)
Ответ на: комментарий от pokemon9505

Ещё могу добавить кое-что про инструкцию:

Шаг 1. Загрузите двоичный файл ejabberd.

Этот шаг установит ejabberd, но ваша система не будет видеть обновлений для него, и их придётся каждый раз скачивать и устанавливать вручную, и следить за их выходом тоже надо будет вручную. Вместо этого лучше настроить систему так, чтобы она следила за этим сама, добавив репозиторий с пакетами ejabberd для Debian и Ubuntu:

sudo wget -O /etc/apt/sources.list.d/ejabberd.list https://repo.process-one.net/ejabberd.list
sudo wget -O /etc/apt/trusted.gpg.d/ejabberd.gpg https://repo.process-one.net/ejabberd.gpg
sudo apt update

С этого момента установка и обновление ejabberd может производиться привычными командами apt install и apt upgrade.

xenith
()
Ответ на: комментарий от pokemon9505

Возможно, нашёл ошибку в вашем конфиге, но не уверен, влияет ли она на что-либо.

На строке 77, сразу над port: 1883, есть знак - (минус) – его тоже надо закомментировать.

Поправьте и попробуйте запустить сервер (systemctl restart ejabberd).

Если не запустится, выложите повторно /opt/ejabberd/logs/ejabberd.log. Нужны только строки начиная с сегодняшнего дня (посмотрите по датам), весь лог целиком не нужен.

xenith
()
Последнее исправление: xenith (всего исправлений: 1)
Ответ на: комментарий от pokemon9505

Рекомендую с логом выкладывать сразу и конфиг, с которым этот лог был получен. Как видишь, отсутствие (или наличие) лишнего пробела может создавать ошибки в конфиге.

YAR ★★★★★
()
Ответ на: комментарий от pokemon9505

В логе пишет что заработало, и даже видно, что кто-то 15 раз пробовал посетить админку. Попробовал посетить вашу админку через Tor – открывается на https://ваш_хостнейм:5443/admin, но ругается на самоподписанный сертификат. Поздравлять вас пока рано, но успех уже близко.

Как я уже писал,

Вам надо будет настроить получение своего сертификата. Если вы не планируете держать на вашем сервере какие-либо другие доступные извне сервисы, кроме ssh, то ejabberd может справиться с этим сам. Если планируете, то следует пойти по иному пути и настроить certbot. Я бы пошёл по второму пути даже если бы сейчас мне нужен был только ejabberd, просто потому что так будет проще когда понадобится установить и настроить что-нибудь ещё.

Надо учесть что для получения бесплатного сертификата вам так или иначе придётся вывесить что-то на порту 80 (http), потому что удостоверяющий центр этого требует.

Там может висеть либо полноценный веб-сервер, отдающий заглушку вместо сайта, и через который будет работать certbot, либо сам ejabberd – за это в нём отвечает тот самый блок с ejabberd_acme и портом 5280, который вы ранее удалили за ненадобностью.

Вам надо определиться какой путь вы выберете – более универсальный с заделом на будущее (certbot + http-сервер, например, nginx) или более простой (только ejabberd и ничего больше).

xenith
()
Ответ на: комментарий от xenith
  1. Если взять первый путь, то одним ответом не опишешь, тут лучше найти отдельный гайд по nginx+certbot, добавив к нему донастройку для ejabberd.

  2. Если взять второй путь, то недостаточно просто вернуть удалённый блок, сменив при этом 5280 на 80 – ejabberd тогда не запустится. Вместо этого в ufw надо будет добавить перенаправление (DNAT forwarding) с 80 на 5280.

  3. Есть ещё третий путь, в котором не нужно ничего вывешивать на порту 80, позволяющий получить wildcard-сертификат. Для этого нужно будет зарегистрироваться у однго из поддерживаемых certbot’ом сервисов, предоставляющих управление DNS (есть бесплатные сервисы), потом у регистратора вашего домена перевести домен с текущего NS на новый NS, а затем настроить certbot таким образом, чтобы он производил проверку владения доменом через этот новый NS.

Знаю, звучит заморочено, но тут есть преимущество:

Wildcard-сертификат покроет не только ваш домен mydomain.tld, а и все его субдомены *.mydomain.tld сразу.

Для сравнения, в обычном не-wildcard-режиме (первый и второй пути) вам нужно будет дозапрашивать их каждый раз, когда вы захотите покрыть ещё один домен в придачу к тем, которые уже запрашивали ранее (это бесплатно, но есть ограничение по количеству запросов за день/час), а дальше они уже будут сами обновляться.

  1. Самый простой четвёртый путь – купить wildcard-сертификат за деньги, положить его на диск и радоваться тому, что ничего настраивать не нужно.
xenith
()
Ответ на: комментарий от xenith

Для ejabberd субдомены точно понадобятся. Как минимум upload.mydomain.tld (HTTP Upload, сервис для обмена небольшими файлами – это то, чем сейчас пользуются все клиенты), желательно с ним proxy.mydomain.tld (прокси для передачи больших файлов), и опционально conference.mydomain.tld (MUC, т.е. multi-user chat, т.е. многопользовательские чаты, они же групповые чаты, они же группы, они же каналы, они же конференции и т.д.). Есть и другие сервисы, но вряд ли они вам понадобятся.

Сервис MUC понадобится если вы хотите иметь возможность общаться не только в разговорах 1-на-1, а и держать у себя MUC, но не понадобится чтобы просто присоединиться к существующим MUC на других серверах.

Для работы звонков не нужен отдельный субдомен и не надо генерировать сертификаты для него, но нужно создать DNS SRV записи, как описано в конце раздела здесь.

xenith
()
Ответ на: комментарий от xenith

Ещё в вашем конфиге используется дефолтная база данных Mnesia. Если вы будете активно пользоваться сервером и при этом не отключите MAM (сохранение истории переписки), то рано или поздно база разрастётся до двух ГБ, а Mnesia не умеет держать более чем 2 ГБ данных. Если вы не собираетесь отключать MAM, то вам следует изменить используемую базу на PostgreSQL (лучше) или SQLite (проще).

Можно оставить всё как есть и перенести данные уже потом, когда (если?) Mnesia разрастётся, но, ИМХО, проще сразу сделать нормально, пока никаких данных в базе ещё нет, и переносить ничего не нужно.

xenith
()
Последнее исправление: xenith (всего исправлений: 1)
Ответ на: комментарий от xenith

Огромное спасибо, очень много для меня информации. Кое-что понял. но пока как четко все донастроить конечно у меня голова кругом. Буду пробовать, если вопросы появятся буду писать сюда. Сегодня зашел почитать ответы. Ваши. доргие форумчане. Очень благодарен что помогаете разобраться в этом темном лесу для меня. На выходных попробую хоть что то из вышеуказанного сделать и отпишу сюда)

pokemon9505
() автор топика
Ответ на: комментарий от YAR

Может быть и стоило, но почему то я наткнулся первым делом именно на ejabberd. Только насколько я понял что клиент для виндоуса отсутствует.

pokemon9505
() автор топика
Последнее исправление: pokemon9505 (всего исправлений: 1)
Ответ на: комментарий от pokemon9505

Snikket-сервер - это связка «Prosody+nginx+certbot+coturn», преднастроенная и завернутая в Docker. Для старта настроек минимум. Это тот же jabber. Соответственно, клиенты используешь любые, которые тебе подходят.

Но, так или иначе, добей уже тему с ejabberd'ом, просто активнее как-то действуй. Вникай в то, что тебе пишется на экране.

YAR ★★★★★
()
Ответ на: комментарий от YAR

Поддерживаю Snikket. Его проще настроить. Но с (суб)доменами повозиться всё равно придётся.

Но да, если ejabberd уже почти почти работает, то лучше его добить.

xenith
()
Ответ на: комментарий от pokemon9505

Из современных клиентов с поддержкой наибольшего количества функций под Windows есть Gajim, но звонки там пока не шифруются. Тут есть подробности, если интересует: Bounty: поддержка шифрованных звонков (DTLS-SRTP) в Gajim

Также можно использовать браузерные клиенты Converse.js и Movim, в обоих есть шифрованная переписка (OMEMO), а в последнем есть и шифрованные звонки.

xenith
()