В свете выхода новой версии XMPP сервера ejabberd Community Server с достаточно значительными изменениями, появилась необходимость переработки ранее написанной статьи про установку и настройку сервера ejabberd. ejabberd Community Server является многофункциональным и гибким в конфигурировании сервером, в котором достаточно полно реализован протокол мгновенного обмена сообщениями XMPP (Extensible Messaging and Presence Protocol) со всеми его расширениями. XMPP базируется на XML, он открытый, свободный для использования протокол для мгновенного обмена сообщениями. Спроектирован легко расширяемым, поэтому помимо возможности передачи текстовых сообщений, имеется возможность передачи голоса, видео и файлов по сети. Как было сказано ранее, к релизу новой версии ejabberd Community Server разработчиками были произведены достаточно значимые изменения, из которых следует выделить следующее:
- переезд на другую систему управления версиями (Git).
- разделение проекта ejabberd на ejabberd Community Server (eCS) и ejabberd Commercial Edition.
- изменение формата основного конфигурационного файла.
- переработан код, в целях уменьшения потребления ресурсов системы.
О ключевых отличиях между версиями ejabberd Community Server (eCS) и ejabberd Commercial Edition можно прочитать в новостях на официальном сайте (ссылка приведена в конце статьи).
Установка и настройка новой версии сервера eCS, описываемая в данной статье, происходит на базе операционной системы FreeBSD версии 9.3, а хранение всей служебной информации возлагается на СУБД PostgreSQL 9.1. В данной статье не освящен процесс установки PostgreSQL, поскольку на сайте уже есть соответствующий материал. Предполагается, что дерево портов в системе находится в актуальном состоянии.
В первую очередь устанавливаем Erlang. Поскольку Erlang нужен только для работы ejabberd, в окне выбора опций были выбраны опции, необходимые для работы сервера.
cd /usr/ports/lang/erlang
make install clean
Из предложенных опций выбраны были следующие:
- HIPE
- KQUEUE
- ODBC
- OPENSSL
- SMP
- THREADS
- ODBC
По завершении установки Erlang, производится установка XMPP сервера ejabberd Community Server. На момент написания статьи, в портах доступна версия eCS 14.05.
cd /usr/ports/net-im/ejabberd
make install clean
Сервер компилируется со следующими опциями:
- DOCS
- ICONV
- JSON
- LAGER
- ODBC
- PGSQL
- STUN
В приведенной в данной статье конфигурации сервера используется распространяемый отдельно от дистрибутива eCS модуль mod_webpresence, который позволяет определять статус активности конкретно взятого пользователя посредством Web в виде иконки, обычного текста, xml и т.п. Исходный код модуля webpresence можно получить, например, так:
cd /usr/local/etc/ejabberd
git clone https://github.com/processone/ejabberd-contrib modules
А процесс установки следующий:
cd /usr/local/etc/ejabberd/modules/mod_webpresence
./build.sh
chown root:wheel ebin/mod_webpresence.beam
chmod 444 ebin/mod_webpresence.beam
mv ebin/mod_webpresence.beam /usr/local/lib/erlang/lib/ejabberd-14.05/ebin/
Полное описание параметров модуля приведено в файле mod_webpresence/README.txt.
Следующим действием создается база данных, пользователь базы данных (БД) и производится импорт схемы БД, с которой будет работать eCS. Создать базу данных можно любым удобным для вас способом, я сделал это консольным клиентом psql.
CREATE ROLE "ejabberd" WITH LOGIN ENCRYPTED PASSWORD 'your_pass';
CREATE DATABASE "ejabberd" WITH OWNER "ejabberd" ENCODING 'UTF-8';
P.S. В PostgreSQL версии 9.1 и выше по умолчанию включен параметр standard_conforming_strings, из-за которого в ejabberd отваливается сервис MUC с ошибкой: 503 service unavailable. Поэтому для созданной базы данных необходимо отключить данный параметр:
ALTER DATABASE "ejabberd" SET standard_conforming_strings = off;
Делаем импорт схемы базы данных.
cd /usr/ports/net-im/ejabberd
make extract
psql -U ejabberd -W -f work/ejabberd-14.05/sql/pg.sql ejabberd
make clean
Переходим к правке и отладке конфигурационных файлов сервера. Конфигурационные файлы сервера хранятся в директории /usr/local/etc/ejabberd. После чистой установки в директории будет три файла с расширением *.exaxmple, переименуйте/скопируйте файлы, убрав расширение. Таким образом, в директории /usr/local/etc/ejabberd должны быть следующие конфигурационные файлы:
- ejabberd.yml — основной конфигурационный файл в формате YAML;
- ejabberdctl.cfg — конфигурационный файл утилиты ejabberdctl;
- inetrc — конфигурационный файл для DNS.
Конфигурационный файл ejabberd.yml у меня выглядит так:
###
### Конфигурационный файл ejabberd
###
###
### Параметры, используемые в данном файле подробно описаны
### в документации "Installation and Operation Guide".
### Документацию можно найти в сети по такому адресу:
### http://www.process-one.net/en/ejabberd/docs/
### Конфигурационный файл оформлен в соответствии с синтаксисом YAML.
### Дополнительные сведения о языке YAML можно получить по ссылке
### http://ru.wikipedia.org/wiki/YAML
### Некоторые сведения по оформлению конфигурационного файла:
###
### - не экранированные или заключенные в одинарные кавычки строки.
### Так называемые "atoms" (м.б. "атомы").
### Например: dog, 'Jupiter', '3.14159', YELLOW
###
### - Числовые значения. Например: 3, -45.0, .0
###
### - Оформление текста.
### например, текст в двойных кавычках: "Lizzard", "orange".
### Или даже так:
### " Art thou not Romeo,
### and a Montague?"
### =========
### Отладка
##
## loglevel: уровень отладки.
## 0: не выводить ничего в лог (не рекомендуется)
## 1: выводить в лог сообщения, только о серьезных ошибках
## 2: выводить в лог сообщения о ошибках
## 3: выводить в лог сообщения о предупреждениях
## 4: выводить в лог информационные сообщения
## 5: все, что можно выводить в лог файл
##
loglevel: 3
##
## watchdog_admins: Полезно только для разработчиков. Если процессы ejabberd
## потребляют слишком много памяти, то отправить об этом уведомление на
## указанные здесь адреса.
##
## watchdog_admins:
## - "bob@example.com"
### ================
### Обслуживаемые домены
##
## hosts: список обслуживаемых доменов.
## Вы можете определить один или несколько доменов, например:
## hosts:
## - "example.net"
## - "example.com"
## - "example.org"
##
hosts:
- "info-x.org"
##
## route_subdomains: Делегировать поддомены на другие XMPP сервера.
## Например, если ejabberd обслуживает домен example.org и вы хотите,
## чтоб он взаимодействовал с другим XMPP сервером, обслуживающим
## домен im.example.org.
##
## route_subdomains: s2s
### ===============
### Сетевые параметры
##
## listen: указывает, на каких портах принимать подключения каждому
## из ejabberd сервисов. Так же возможно задать опции отдельно для
## каждого сервиса.
##
listen:
-
port: 5222
module: ejabberd_c2s
##
## Для поддержки шифрованных подключений,
## раскомментируйте строку и укажите полный
## путь до сертификата:
##
certfile: "/usr/local/etc/ejabberd/ssl.pem"
starttls: true
##
## Опции для OpenSSL
##
## protocol_options:
## - "no_sslv3"
## - "no_tlsv1"
max_stanza_size: 65536
shaper: c2s_shaper
access: c2s
stream_management: true
zlib: true
##
## Сервис для работы с другими XMPP серверами
##
-
port: 5269
module: ejabberd_s2s_in
transport: tcp
##
## ejabberd_service: взаимодействует с внешними компонентами (транспорты и т.п.)
##
## -
## port: 8888
## module: ejabberd_service
## access: all
## shaper_rule: fast
## ip: "127.0.0.1"
## hosts:
## "icq.example.org":
## password: "secret"
## "sms.example.org":
## password: "secret"
##
## ejabberd_stun: обрабатывает запросы STUN
##
-
port: 3478
module: ejabberd_stun
transport: udp
##
## To handle XML-RPC requests that provide admin credentials:
##
## -
## port: 4560
## module: ejabberd_xmlrpc
##
## HTTP сервис (описание отдельных опций доступно в документации)
##
-
port: 5280
module: ejabberd_http
request_handlers:
"presence": mod_webpresence
## "/pub/archive": mod_http_fileserver
web_admin: false
http_poll: true
http_bind: true
register: false
captcha: true
##
## s2s_use_starttls: Включить STARTTLS + Dialback для S2S подключений.
## Возможные значения: false optional required required_trusted
## При включении, необходимо указать сертификат в опции ниже.
##
s2s_use_starttls: required
##
## s2s_certfile: путь до сертификата.
##
s2s_certfile: "/usr/local/etc/ejabberd/ssl.pem"
## Опции OpenSSL
##
## s2s_protocol_options:
## - "no_sslv3"
## - "no_tlsv1"
##
## domain_certfile: использовать различные сертификаты для обслуживаемых доменов.
##
## host_config:
## "example.org":
## domain_certfile: "/path/to/example_org.pem"
## "example.com":
## domain_certfile: "/path/to/example_com.pem"
##
## S2S белый или черный список
##
## Политика s2s по умолчанию для неизвестных хостов.
##
## s2s_policy: s2s_access
##
## Опции для исходящих S2S подключений
##
## Желаемые протоколы (будет использоваться первый доступный)
##
outgoing_s2s_families:
- ipv4
## - ipv6
## и таймаут в миллисекундах.
##
outgoing_s2s_timeout: 10000
### ==============
### Аутентификация
##
## auth_method: метод аутентификации пользователей.
## По умолчанию используется внутренний метод аутентификации.
## Если вы хотите использовать другой метод аутентификации,
## то закомментируйте терм ниже и раскомментируйте нужный вам.
##
## auth_method: internal
##
## Хранить пароли в открытом или хешированном виде:
## auth_password_format: plain
## auth_password_format: scram
##
## Задание вручную FQDN, если ejabberd не смог корректно
## его определить:
fqdn: "xmpp.info-x.org"
##
## Аутентификация через внешний скрипт.
## Скрипт должен быть доступным для запуска сервером ejabberd.
##
## auth_method: external
## extauth_program: "/path/to/authentication/script"
##
## Аутентификация через ODBC
## Не забудьте задать параметры подключения к СУБД в секции ниже.
##
auth_method: odbc
##
## Аутентификация через PAM
##
## auth_method: pam
## pam_service: "pamservicename"
##
## Аутентификация через LDAP
##
## auth_method: ldap
##
## Список серверов LDAP:
## ldap_servers:
## - "localhost"
##
## Использовать шифрованное подключение к LDAP:
## ldap_encrypt: none
## ldap_encrypt: tls
##
## Порт для подключение к LDAP:
## ldap_port: 389
## ldap_port: 636
##
## Пользователь для поиска по LDAP:
## ldap_rootdn: "dc=example,dc=com"
##
## Пароль для пользователя LDAP:
## ldap_password: "******"
##
## Корень для поиска в LDAP:
## ldap_base: "dc=example,dc=com"
##
## Атрибут в LDAP, содержащий ID пользователя:
## ldap_uids:
## - "mail": "%u@mail.example.org"
##
## Фильтр для поиска в LDAP:
## ldap_filter: "(objectClass=shadowAccount)"
##
## Anonymous login support:
## auth_method: anonymous
## anonymous_protocol: sasl_anon | login_anon | both
## allow_multiple_connections: true | false
##
## host_config:
## "public.example.org":
## auth_method: anonymous
## allow_multiple_connections: false
## anonymous_protocol: sasl_anon
##
## To use both anonymous and internal authentication:
##
## host_config:
## "public.example.org":
## auth_method:
## - internal
## - anonymous
### ==============
### Параметры БД
### По умолчанию ejabberd использует внутреннюю БД Mnesia,
### поэтому настройка данной секции для вас может быть не обязательна.
### Если же у вас есть необходимость использовать внешнее хранилище,
### то в данной секции приведены примеры конфигурации ejabberd
### для работы с внешними хранилищами.
### За деталями обращайтесь в документацию ejabberd.
##
## MySQL server:
##
## odbc_type: mysql
## odbc_server: "server"
## odbc_database: "database"
## odbc_username: "username"
## odbc_password: "password"
##
## При необходимости можно указать порт для подключения:
## odbc_port: 1234
##
## PostgreSQL server:
##
odbc_type: pgsql
odbc_server: "localhost"
odbc_database: "ejabberd"
odbc_username: "ejabberd"
odbc_password: "123456"
##
## При необходимости можно указать порт для подключения:
## odbc_port: 1234
##
## Если вы используете PostgreSQL и у вас очень большая БД (по размеру)
## и нужен быстрая, но менее точная замена для "select count(*) from users",
## то включите данную опцию.
##
## pgsql_users_number_estimate: true
##
## ODBC совместимый или MSSQL сервер:
##
## odbc_type: odbc
## odbc_server: "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"
##
## Максимальное количество открытых подключений к СУБД для каждого
## виртуального хоста:
##
odbc_pool_size: 3
##
## Выполнять с определенным интервалом бесполезный SQL запрос,
## для поддерживания подключения к базе данных (keep alive).
## интервал задается в секундах: например, 28800 значит 8 часов
##
## odbc_keepalive_interval: undefined
### ===============
### Шейперы (ограничение скорости)
shaper:
##
## Шейпер "normal" с лимитом скорости в 1000 B/s
##
normal: 1000
##
## Шейпер "fast" с лимитом скорости в 50000 B/s
##
fast: 50000
##
## Шейпер "proxy65" с лимитом скорости в 64Kb/s
##
proxy65: 65536
##
## Максимальное количество элементов в очереди FSM.
## В документации подробно расписано значение данного параметра.
##
max_fsm_queue: 1000
###. ====================
###' Списки контроля доступа
acl:
##
## ACL 'admin' дает права администратора конкретным XMPP аккаунтам.
## При необходимости вы можете указать здесь несколько записей.
##
admin:
user:
- "nekit": "info-x.org"
## - "ermine": "example.org"
##
## Заблокированные пользователи
##
## blocked:
## user:
## - "baduser": "example.org"
## - "test"
## Локальные пользователи: не изменяйте данную ACL.
##
local:
user_regexp: ""
##
## Еще примеры ACL
##
## jabberorg:
## server:
## - "jabber.org"
## aleksey:
## user:
## - "aleksey": "jabber.ru"
## test:
## user_regexp: "^test"
## user_glob: "test*"
##
## Loopback network
##
loopback:
ip:
- "127.0.0.0/8"
##
## Bad XMPP servers
##
## bad_servers:
## server:
## - "xmpp.zombie.org"
## - "xmpp.spam.com"
##
## Определение ACL для виртуального хоста.
##
## host_config:
## "localhost":
## acl:
## admin:
## user:
## - "bob-local": "localhost"
### ============
### Правила доступа
access:
## Максимальное количество одновременных подключений к серверу для одного пользователя:
max_user_sessions:
all: 10
## Максимальное количество offline сообщений для пользователя:
max_user_offline_messages:
admin: 5000
all: 300
##Правило доступа для локальных пользователей (This rule allows access only for local users):
local:
local: allow
## Только не заблокированные пользователи могут подключаться к серверу:
c2s:
blocked: deny
all: allow
## Ограничение скорости для пользователей, кроме админов:
c2s_shaper:
admin: none
all: normal
## Все S2S соединения пропускаются через шейпер "fast"
s2s_shaper:
all: fast
## Только админы могут отправлять объявления (announcement messages) пользователям:
announce:
admin: allow
## Только админы могут использовать интерфейс конфигурирования:
configure:
admin: allow
## Админам сервера разрешено админить сервис MUC:
muc_admin:
admin: allow
## Локальные пользователи могут создавать комнаты:
muc_create:
local: allow
## Всем пользователям разрешено использовать сервис MUC:
muc:
all: allow
## Только локальные пользователи могут создавать узлы Pubsub:
pubsub_createnode:
local: allow
## Регистрация по требованию позволяет любому зарегистрироваться на сервере.
## Чтобы запретить, замените 'allow' на 'deny'.
register:
all: deny
## All local users may access to proxy65
proxy65:
local: allow
all: deny
## Only allow to register from localhost
trusted_network:
loopback: allow
## Do not establish S2S connections with bad servers
## s2s_access:
## bad_servers: deny
## all: allow
## Частота регистрации аккаунтов с конкретного IP, то есть можно создать
## один аккаунт в течении определенного времени. Задается в секундах.
## Чтобы выключить, укажите infinity .
## registration_timeout: 600
##
## Права доступа для виртуального хоста.
##
## host_config:
## "localhost":
## access:
## c2s:
## admin: allow
## all: deny
## register:
## all: deny
### ================
### Язык по умолчанию
##
## language: Язык по умолчанию для сообщений от сервера.
##
language: "ru"
##
## Различные языки для каждого из виртуальных хостов.
##
## host_config:
## "localhost":
## language: "ru"
### =======
### Капча
##
## Полный путь до скрипта, генерирующего изображение капчи.
## С дистрибутивом ejabberd для генерации изображения капчи поставляется
## скрипт, который использует утилиту convert из пакета ImageMagick.
## В ОС FreeBSD скрипт лежит тут:
## /usr/local/lib/erlang/lib/ejabberd-14.05/priv/bin/captcha.sh
##
## Устанавливать ImageMagick для такой мелкой цели мне не захотелось.
## У меня в системе была установлена библиотека gd, поэтому я пошел
## другим путем: установил для perl модуль /usr/ports/graphics/p5-GD
## для работы с библиотекой gd и написал скрипт для генерации капчи на perl.
## Если кому нужно, то в конце статьи я прикрепил его.
##
captcha_cmd: "/usr/local/etc/ejabberd/captcha/captcha.pl"
##
## URL и порт, на который будут направлены пользователи для проверки капчей.
## У меня HTTP сервис ejabberd спрятан за апачем. Если делать напрямую, то
## параметр может иметь вид: {captcha_host, "http:/hostname:5280"}.
##
captcha_host: "http://www.fastbsd.ru/ejabberd"
##
## Ограничение запросов к капче в минуту для JID/IP (защита от DoS).
##
captcha_limit: 5
### =======
### Конфигурация модулей
##
## Указанные здесь модули будут доступны на всех виртуальных хостах.
## Описание всех опций, которые здесь использованы, приведено в документации.
## Так же хочу отметить, что некоторые модули имеют параметр:
## db_type: odbc
## он необходим для работы данных модулей с БД.
##
modules:
mod_adhoc: {}
mod_announce: # recommends mod_adhoc
db_type: odbc
access: announce
mod_blocking: # requires mod_privacy
db_type: odbc
mod_caps: {}
mod_carboncopy: {}
mod_configure: {} # requires mod_adhoc
mod_disco:
server_info:
modules: all
name: "admin-addresses"
urls:
- "mailto:nekit@info-x.org"
- "xmpp:nekit@info-x.org"
## mod_echo: {}
mod_irc:
db_type: odbc
access: irc_users
host: "irc.@HOST@"
mod_http_bind: {}
## mod_http_fileserver:
## docroot: "/var/www"
## accesslog: "/var/log/ejabberd/access.log"
mod_last:
db_type: odbc
mod_muc:
host: "conference.@HOST@"
db_type: odbc
access: muc
access_create: muc_create
access_persistent: muc_create
access_admin: muc_admin
history_size: 30
max_users: 300
max_user_conferences: 10
min_presence_interval: 4
default_room_options:
allow_change_subj: false
allow_private_messages: true
allow_private_messages_from_visitors: moderators
allow_query_users: true
allow_user_invites: false
allow_visitor_nickchange: false
anonymous: true
captcha_protected: true
logging: true
members_by_default: false
members_only: false
moderated: true
password_protected: false
persistent: true
public: true
public_list: false
mod_muc_log:
cssfile: false
dirtype: plain
file_format: html
outdir: "/var/log/ejabberd/muc"
spam_prevention: true
timezone: local
top_link:
"http://www.info-x.org/": "www.info-x.org"
mod_offline:
db_type: odbc
access_max_user_messages: max_user_offline_messages
mod_ping:
send_pings: true
ping_interval: 600
timeout_action: kill
## mod_pres_counter:
## count: 5
## interval: 60
mod_privacy:
db_type: odbc
mod_private:
db_type: odbc
mod_proxy65:
host: "proxy.@HOST@"
name: "Proxy for File Transfers"
ip: "192.168.7.253"
port: 7777
auth_type: anonymous
access: proxy65
shaper: proxy65
mod_pubsub_odbc:
host: "pubsub.@HOST@"
access_createnode: pubsub_createnode
## reduces resource comsumption, but XEP incompliant
ignore_pep_from_offline: true
## XEP compliant, but increases resource comsumption
## ignore_pep_from_offline: false
last_item_cache: false
plugins:
- "flat_odbc"
- "hometree_odbc"
- "pep_odbc" # pep requires mod_caps
mod_register:
##
## Защитить процесс регистрации капчей.
##
## captcha_protected: true
##
## Минимальная энтропия для пароля.
##
## password_strength: 32
##
## После успешной регистрации пользователь получит
## сообщение, заданное здесь.
##
welcome_message:
subject: "Welcome!"
body: |-
Hi.
Welcome to this XMPP server.
##
## Отправлять уведомление на указанные здесь аккаунты
## о регистрации нового пользователя на сервере.
##
## registration_watchers:
## - "admin1@example.org"
##
## Ограничение доступа к регистрации по подсетям
##
ip_access: trusted_network
##
## Локальные c2s или удаленные s2s пользователи не могут
## регистрировать аккаунты (см. в документацию)
##
## access_from: deny
access: register
mod_roster:
db_type: odbc
versioning: true
store_current_id: true # Не включайте параметр совместно с mod_shared_roster или mod_shared_roster_ldap modules
## mod_shared_roster: {}
mod_stats: {}
mod_time: {}
mod_vcard:
host: "vjud.@HOST@"
db_type: odbc
search: false
matches: 50
allow_return_all: false
mod_vcard_xupdate:
db_type: odbc
mod_version:
show_os: true
mod_webpresence:
host: "webstatus.@HOST@"
access: local
pixmaps_path: "/usr/local/etc/ejabberd/modules/mod_webpresence/data/pixmaps"
path: presence
baseurl: "http://www.fastbsd.ru/ejabberd/presence/"
##
## Параметры модулей отдельно для каждого виртуального хоста.
##
## append_host_config:
## "localhost":
## modules:
## mod_echo:
## host: "mirror.localhost"
### Local Variables:
### mode: yaml
### End:
### vim: set filetype=yaml tabstop=8
Файл ejabberdctl.cfg у меня выглядит так:
#
# В данном файле вы можете изменить опции, которые передает
# утилита ejabberdctl в переменные окружение для erlang,а.
#
#' POLL: Kernel polling ([true|false])
#
# Для использования данной фичи необходимо, чтобы ядро и erlang
# были скомпилированы с поддержкой polling,а .
#
# По умолчанию: true
#
POLL=true
#.
#' SMP: поддержка SMP ([enable|auto|disable])
#
# В документации Erlang/OTP сказано:
# enable: запуск Erlang с поддержкой SMP. Может произойти сбой
# при запуске, если SMP не поддерживается.
# auto: запуск Erlang с поддержкой SMP только, если оно доступно
# и в системе имеется более одного логического/физического
# процессора.
# disable: запуск Erlang без поддержки SMP.
#
# По умолчанию: auto
#
SMP=auto
#.
#' ERL_MAX_PORTS: Максимальное количество одновременно открытых портов Erlang,ом
#
# На каждое подключение ejabberd использует два или три порта:
# для клиента или для другого Jabber сервера.
# Примите это во внимание, устанавливая данный предел.
#
# По умолчанию: 32000
# Maximum: 268435456
#
#ERL_MAX_PORTS=32000
#.
#' FIREWALL_WINDOW: Диапазон допустимых портов (полезно при использовании фаервола)
#
# Если ejabberd работает в кластере и в системе включен фаервол,
# то возможно задать статический диапазон портов, используемых
# для взаимодействия узлов (node).
#
# По умолчанию: not defined
# Пример: 4200-4210
#
#FIREWALL_WINDOW=
#.
#' INET_DIST_INTERFACE: IP на котором принимаются соединения с других узлов (node)
#
# Соединение, например, может устанавливать ejabberdctl или
# другие узлы (node) из кластера.
#
# Default: 127.0.0.1
#
INET_DIST_INTERFACE=127.0.0.1
#.
#' ERL_EPMD_ADDRESS: IP на котором сервис epmd принимает подключения
#
# ВАЖНО: Данная опция работает только с Erlang/OTP R14B03 и новее.
#
# Параметр может принимать список IP адресов, разделенных
# запятыми. Следует отметить, что демон epmd будет принимать
# подключения на 127.0.0.1, даже если он не указан в списке.
# По умолчанию соединения принимаются отовсюду.
#
# По умолчанию: 0.0.0.0
#
ERL_EPMD_ADDRESS=127.0.0.1
#.
#' ERL_PROCESSES: Максимальное количество процессов Erlang
#
# Для работы ejabberd, Erlang порождает необходимое количество процессов
# (которые сами по себе потребляют очень мало ресурсов). При большой
# нагрузке на ejabberd данный лимит может быть исчерпан, что повлечен
# за собой увеличение задержек при работе с клиентами. Так как слово
# "процесс" употребляется в контексте Erlang (а не операционной системы),
# то не стоит волноваться о том, что тут указано довольно большое значение.
#
# По умолчанию: 250000
# Максимум: 268435456
#
#ERL_PROCESSES=250000
#.
#' ERL_MAX_ETS_TABLES: Максимальное количество ETS и таблиц Mnesia
#
# Количество конкурирующих (одновременных) ETS и таблиц Mnesia ограничено.
# Когда достигается лимит, то в логах можно увидеть такое сообщение:
# ** Too many db tables **
# Вы можете без опаски увеличивать значение данного параметра, что хоть
# и повлечет увеличение использования памяти, но оно все же будет невелико.
#
# По умолчанию: 1400
#
#ERL_MAX_ETS_TABLES=1400
#.
#' ERL_OPTIONS: Дополнительные параметры Erlang
#
# В данном параметре возможно указать дополнительные опции, которые
# будут переданы в процесс(ы) erlang при запуске ejabberd. Некоторыми
# полезными опциями являются -noshell, -detached, -heart. Когда ejabberd
# запускается системным скриптом rc.d, то опции -noshell, -detached
# применяются автоматически. За подробностями в ман erl(1).
#
# It might be useful to add "-pa /usr/local/lib/ejabberd/ebin" if you
# want to add local modules in this path.
#
# По умолчанию: ""
#
#ERL_OPTIONS=""
#.
#' ERLANG_NODE: Имя узла (node) Erlang
#
# В данном параметре возможно указать имя узла erlang для ejabberd.
# Возможны различные форматы:
# ERLANG_NODE=ejabberd
# Lets erlang add hostname to the node (ejabberd uses short name in this case)
# ERLANG_NODE=ejabberd@hostname
# Erlang uses node name as is (so make sure that hostname is a real
# machine hostname or you'll not be able to control ejabberd)
# ERLANG_NODE=ejabberd@hostname.domainname
# The same as previous, but erlang will use long hostname
# (За подробностями в ман erl(1))
#
# По умолчанию: ejabberd@localhost
#
ERLANG_NODE=ejabberd@localhost
#.
#' EJABBERD_PID_PATH: Путь до PID файла
#
# В данном параметре задаются полный путь до PID (Process identifier) файла.
# Если параметр задан, то ejabberd запишет полученный при старте
# от системы идентификатор в указанный файл. При остановке сервиса
# файл автоматически будет удален.
# Учтите, что ejabberd должен иметь права записи в директорию, иначе
# процесс не запустится.
#
# По умолчанию: пусто, то есть не записывать PID файл
#
EJABBERD_PID_PATH=/var/run/ejabberd/ejabberd.pid
#.
#'
# vim: foldmarker=#',#. foldmethod=marker:
Файл inetrc я не изменял и оставил так, как есть. Конфигурационные файлы достаточно хорошо прокомментированы, поэтому дополнительно по ним сказать нечего. Описание параметров, используемых для конфигурации модулей можно посмотреть в документации на официальном сайте разработчиков. После подготовки конфигурационных файлов сервера добавляем сервис в автозагрузку и пробуем его запустить.
echo 'ejabberd_enable="YES"' >> /etc/rc.conf
service ejabberd start
Если при редактировании конфигурационных файлов ошибок допущено не было, то проблем возникнуть не должно и вы сможете увидеть на экране примерно следующее:
sockstat -4 -l | grep ejabberd
ejabberd beam.smp 15934 8 tcp4 127.0.0.1:38487 *:*
ejabberd beam.smp 15934 15 tcp4 *:5222 *:*
ejabberd beam.smp 15934 17 tcp4 *:5269 *:*
ejabberd beam.smp 15934 18 tcp4 127.0.0.1:5280 *:*
ejabberd beam.smp 15934 23 udp4 *:3478 *:*
ejabberd epmd 15932 3 tcp4 127.0.0.1:4369 *:*
Если же сервис не стартовал, то смотрите логи в /var/log/ejabberd. К сожалению, формат выплевываемых ошибок сервером дико неудобный, но разобраться все же можно. Обычно проблемы возникают из-за некорректных прав доступа или опечаток в конфигурационном файле. Для отладки будет полезна команда ejabberdctl live, которая запускает сервер не отсоединяя его от терминала и все сообщения выводятся на консоль. Только учтите, что сервер будет запущен с правами пользователя выполнившего эту команду и все создаваемые сервером файлы будут иметь соответствующие права (я первый раз долго возился с проблемой запуска сервера командой service ejabberd start после отладки). Поэтому полезно использовать такую команду для отладки:
su ejabberd -c 'ejabberdctl live'
После запуска сервера нужно создать первый аккаунт, который будет иметь права администратора (права настраивались в секции ACL).
ejabberdctl register nekit info-x.org 1234
Теперь можно пробовать подключаться к серверу, используя созданный аккаунт. Администрировать сервер проще всего через админку (если вы ее включили при конфигурировании) или через Jabber клиент (особенно удобно это делать через Gajim или Psi+). На этом настройку XMPP сервера ejabberd Community Server можно считать завершенной. Если возникнут замечания, то прошу в комменты, а с вопросами обращайтесь в форум.
вт, 02/12/2014 - 04:01
Спасибо за статью, просто все сам как бы настроил. а вот PubSub не хотел заполнять таблиццы, оказалось что для него как и раньше все, а не db_type: odbc
вт, 16/08/2016 - 15:50
Было бы не плохо, если бы Вы добавили ман по аутентификации ejabberd + dovecot
вт, 16/08/2016 - 20:28
пн, 12/09/2016 - 17:15
Спасибо большое за статью. :-)
Но, и вопросиков кучка есть... ;-)
Можно тут поподробнее? а то у меня, похоже, ситуация аналогичная...
Ставил и настраивал из-под рута. Из под него же из консоли через ejabberdctl start запускается и работает, а вот при прописывании в /usr/local/etc/rc.conf параметра ejabberd_enable="YES" и попытке запуска ejsbber-а, получаем х... по всей морде. :-( Причем, в логах ejsbber-а ругани нет.
пн, 12/09/2016 - 19:06
Предыдущий вопрос (про "поподробнее") был мой.
Как приятно "побеседовать" с умным человеком"! :-) Задал тут вопрос и буквально в течении 5 минут сам понял, в чем дело - права на файлы в /var/spool/ejabberd. У меня владельцем файлов был root, а группа - ejabberd. Само-собой, когда запускал из консоли от рута (ejabberdctl start), то все работало, а при запуске демона "по взрослому" - запуск шел от пользователя ejabberd... вот и облом выходил.
Заменил права на все файлы в упомянутой директории на ejabberd/ejabberd и получил удовольствие от работающего ежа. :-)
PS. Фря 10.3, ёж - 16.04
ср, 15/03/2017 - 20:10
В дополнение (сам мучался):
> su - ejabberd
> ejabberdctl register nekit info-x.org 1234
Если от root, то "Failed RPC connection to the node ejabberd@localhost: nodedown"
Добавить комментарий