Установка и настройка ejabberd Community Server (eCS)

В свете выхода новой версии 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, в окне выбора опций были выбраны опции, необходимые для работы сервера.

  1. # cd /usr/ports/lang/erlang
  2. # make install clean

Из предложенных опций выбраны были следующие:

  • HIPE
  • KQUEUE
  • ODBC
  • OPENSSL
  • SMP
  • THREADS
  • ODBC

По завершении установки Erlang, производится установка XMPP сервера ejabberd Community Server. На момент написания статьи, в портах доступна версия eCS 14.05.

  1. # /usr/ports/net-im/ejabberd
  2. # make install clean

Сервер компилируется со следующими опциями:

  • DOCS
  • ICONV
  • JSON
  • LAGER
  • ODBC
  • PGSQL
  • STUN

В приведенной в данной статье конфигурации сервера используется распространяемый отдельно от дистрибутива eCS модуль mod_webpresence, который позволяет определять статус активности конкретно взятого пользователя посредством Web в виде иконки, обычного текста, xml и т.п. Исходный код модуля webpresence можно получить, например, так:

  1. # cd /usr/local/etc/ejabberd
  2. # git clone https://github.com/processone/ejabberd-contrib modules

А процесс установки следующий:
  1. # cd /usr/local/etc/ejabberd/modules/mod_webpresence
  2. # ./build.sh
  3. # chown root:wheel ebin/mod_webpresence.beam
  4. # chmod 444 ebin/mod_webpresence.beam
  5. # mv ebin/mod_webpresence.beam /usr/local/lib/erlang/lib/ejabberd-14.05/ebin/

Полное описание параметров модуля приведено в файле mod_webpresence/README.txt.

Следующим действием создается база данных, пользователь базы данных (БД) и производится импорт схемы БД, с которой будет работать eCS. Создать базу данных можно любым удобным для вас способом, я сделал это консольным клиентом psql.

  1. CREATE ROLE "ejabberd" WITH LOGIN ENCRYPTED PASSWORD 'your_pass';
  2. CREATE DATABASE "ejabberd" WITH OWNER "ejabberd" ENCODING 'UTF-8';

P.S. В PostgreSQL версии 9.1 и выше по умолчанию включен параметр standard_conforming_strings, из-за которого в ejabberd отваливается сервис MUC с ошибкой: 503 service unavailable. Поэтому для созданной базы данных необходимо отключить данный параметр:

  1. ALTER DATABASE "ejabberd" SET standard_conforming_strings = off;

Делаем импорт схемы базы данных.

  1. # cd /usr/ports/net-im/ejabberd
  2. # make extract
  3. # psql -U ejabberd -W -f work/ejabberd-14.05/sql/pg.sql ejabberd
  4. # make clean

Переходим к правке и отладке конфигурационных файлов сервера. Конфигурационные файлы сервера хранятся в директории — /usr/local/etc/ejabberd. После чистой установки в директории будет три файла с расширением *.exaxmple, переименуйте/скопируйте файлы, убрав расширение. Таким образом, в директории /usr/local/etc/ejabberd должны быть следующие конфигурационные файлы:

  • ejabberd.yml — основной конфигурационный файл в формате YAML;
  • ejabberdctl.cfg — конфигурационный файл утилиты ejabberdctl;
  • inetrc — конфигурационный файл для DNS.

Конфигурационный файл ejabberd.yml у меня выглядит так:

  1. ###
  2. ###               Конфигурационный файл ejabberd
  3. ###
  4. ###
  5.  
  6. ### Параметры, используемые в данном файле подробно описаны
  7. ### в документации "Installation and Operation Guide".
  8. ### Документацию можно найти в сети по такому адресу:
  9. ### http://www.process-one.net/en/ejabberd/docs/
  10.  
  11. ### Конфигурационный файл оформлен в соответствии с синтаксисом YAML.
  12. ### Дополнительные сведения о языке YAML можно получить по ссылке
  13. ###      http://ru.wikipedia.org/wiki/YAML
  14. ### Некоторые сведения по оформлению конфигурационного файла:
  15. ###
  16. ### - не экранированные или заключенные в одинарные кавычки строки.
  17. ###   Так называемые "atoms" (м.б. "атомы").
  18. ###   Например: dog, 'Jupiter', '3.14159', YELLOW
  19. ###
  20. ### - Числовые значения. Например: 3, -45.0, .0
  21. ###
  22. ### - Оформление текста.
  23. ###   например, текст в двойных кавычках: "Lizzard", "orange".
  24. ###   Или даже так:
  25. ###   " Art thou not Romeo,
  26. ###     and a Montague?"
  27.  
  28. ###   =========
  29. ###   Отладка
  30.  
  31. ##
  32. ## loglevel: уровень отладки.
  33. ## 0: не выводить ничего в лог (не рекомендуется)
  34. ## 1: выводить в лог сообщения, только о серьезных ошибках
  35. ## 2: выводить в лог сообщения о ошибках
  36. ## 3: выводить в лог сообщения о предупреждениях
  37. ## 4: выводить в лог информационные сообщения
  38. ## 5: все, что можно выводить в лог файл
  39. ##
  40. loglevel: 3
  41.  
  42. ##
  43. ## watchdog_admins: Полезно только для разработчиков. Если процессы ejabberd
  44. ## потребляют слишком много памяти, то отправить об этом уведомление на
  45. ## указанные здесь адреса.
  46. ##
  47. ## watchdog_admins:
  48. ##   - "bob@example.com"
  49.  
  50.  
  51. ###   ================
  52. ###   Обслуживаемые домены
  53.  
  54. ##
  55. ## hosts: список обслуживаемых доменов.
  56. ## Вы можете определить один или несколько доменов, например:
  57. ## hosts: 
  58. ##   - "example.net"
  59. ##   - "example.com"
  60. ##   - "example.org"
  61. ##
  62. hosts:
  63.   - "info-x.org"
  64.  
  65. ##
  66. ## route_subdomains: Делегировать поддомены на другие XMPP сервера.
  67. ## Например, если ejabberd обслуживает домен example.org и вы хотите,
  68. ## чтоб он взаимодействовал с другим XMPP сервером, обслуживающим
  69. ## домен  im.example.org.
  70. ##
  71. ## route_subdomains: s2s
  72.  
  73. ###   ===============
  74. ###   Сетевые параметры
  75.  
  76. ##
  77. ## listen: указывает, на каких портах принимать подключения каждому
  78. ## из ejabberd сервисов. Так же возможно задать опции отдельно для
  79. ## каждого сервиса.
  80. ##
  81. listen: 
  82.   - 
  83.     port: 5222
  84.     module: ejabberd_c2s
  85.     ##
  86.     ## Для поддержки шифрованных подключений,
  87.     ## раскомментируйте строку и укажите полный
  88.     ## путь до сертификата:
  89.     ##
  90.     certfile: "/usr/local/etc/ejabberd/ssl.pem"
  91.     starttls: true
  92.     ##
  93.     ## Опции для OpenSSL
  94.     ##
  95.     ## protocol_options:
  96.     ##   - "no_sslv3"
  97.     ##   - "no_tlsv1"
  98.     max_stanza_size: 65536
  99.     shaper: c2s_shaper
  100.     access: c2s
  101.     stream_management: true
  102.     zlib: true
  103.  
  104.   ##
  105.   ## Сервис для работы с другими XMPP серверами
  106.   ##
  107.   - 
  108.     port: 5269
  109.     module: ejabberd_s2s_in
  110.     transport: tcp
  111.   ##
  112.   ## ejabberd_service: взаимодействует с внешними компонентами (транспорты и т.п.)
  113.   ##
  114.   ## - 
  115.   ##   port: 8888
  116.   ##   module: ejabberd_service
  117.   ##   access: all
  118.   ##   shaper_rule: fast
  119.   ##   ip: "127.0.0.1"
  120.   ##   hosts:
  121.   ##     "icq.example.org":
  122.   ##       password: "secret"
  123.   ##     "sms.example.org":
  124.   ##       password: "secret"
  125.  
  126.   ##
  127.   ## ejabberd_stun: обрабатывает запросы STUN
  128.   ##
  129.   - 
  130.     port: 3478
  131.     module: ejabberd_stun
  132.     transport: udp
  133.  
  134.   ##
  135.   ## To handle XML-RPC requests that provide admin credentials:
  136.   ##
  137.   ## - 
  138.   ##   port: 4560
  139.   ##   module: ejabberd_xmlrpc
  140.  
  141.   ##
  142.   ## HTTP сервис (описание отдельных опций доступно в документации)
  143.   ##
  144.   - 
  145.     port: 5280
  146.     module: ejabberd_http
  147.     request_handlers:
  148.       "presence": mod_webpresence
  149.     ##   "/pub/archive": mod_http_fileserver
  150.     web_admin: false
  151.     http_poll: true
  152.     http_bind: true
  153.     register: false
  154.     captcha: true
  155.  
  156. ##
  157. ## s2s_use_starttls: Включить STARTTLS + Dialback для S2S подключений.
  158. ## Возможные значения: false optional required required_trusted
  159. ## При включении, необходимо указать сертификат в опции ниже.
  160. ##
  161. s2s_use_starttls: required
  162.  
  163. ##
  164. ## s2s_certfile: путь до сертификата.
  165. ##
  166. s2s_certfile: "/usr/local/etc/ejabberd/ssl.pem"
  167.  
  168. ## Опции OpenSSL
  169. ##
  170. ## s2s_protocol_options:
  171. ##   - "no_sslv3"
  172. ##   - "no_tlsv1"
  173.  
  174. ##
  175. ## domain_certfile: использовать различные сертификаты для обслуживаемых доменов.
  176. ##
  177. ## host_config:
  178. ##   "example.org":
  179. ##     domain_certfile: "/path/to/example_org.pem"
  180. ##   "example.com":
  181. ##     domain_certfile: "/path/to/example_com.pem"
  182.  
  183. ##
  184. ## S2S белый или черный список
  185. ##
  186. ## Политика s2s по умолчанию для неизвестных хостов.
  187. ##
  188. ## s2s_policy: s2s_access
  189.  
  190. ##
  191. ## Опции для исходящих S2S подключений
  192. ##
  193. ## Желаемые протоколы (будет использоваться первый доступный) 
  194. ##
  195. outgoing_s2s_families:
  196.   - ipv4
  197. ##  - ipv6
  198.  
  199. ## и таймаут в миллисекундах.
  200. ##
  201. outgoing_s2s_timeout: 10000
  202.  
  203. ###   ==============
  204. ###   Аутентификация
  205.  
  206. ##
  207. ## auth_method: метод аутентификации пользователей.
  208. ## По умолчанию используется внутренний метод аутентификации.
  209. ## Если вы хотите использовать другой метод аутентификации,
  210. ## то закомментируйте терм ниже и раскомментируйте нужный вам.
  211. ##
  212. ## auth_method: internal
  213.  
  214. ##
  215. ## Хранить пароли в открытом или хешированном виде:
  216. ## auth_password_format: plain
  217. ## auth_password_format: scram
  218. ##
  219. ## Задание вручную FQDN,  если ejabberd не смог корректно
  220. ## его определить:
  221. fqdn: "xmpp.info-x.org"
  222.  
  223. ##
  224. ## Аутентификация через внешний скрипт.
  225. ## Скрипт должен быть доступным для запуска сервером ejabberd.
  226. ##
  227. ## auth_method: external
  228. ## extauth_program: "/path/to/authentication/script"
  229.  
  230. ##
  231. ## Аутентификация через ODBC
  232. ## Не забудьте задать параметры подключения к СУБД в секции ниже.
  233. ##
  234. auth_method: odbc
  235.  
  236. ##
  237. ## Аутентификация через PAM
  238. ##
  239. ## auth_method: pam
  240. ## pam_service: "pamservicename"
  241.  
  242. ##
  243. ## Аутентификация через LDAP
  244. ##
  245. ## auth_method: ldap
  246. ##
  247. ## Список серверов LDAP:
  248. ## ldap_servers:
  249. ##   - "localhost"
  250. ##
  251. ## Использовать шифрованное подключение к LDAP:
  252. ## ldap_encrypt: none
  253. ## ldap_encrypt: tls
  254. ##
  255. ## Порт для подключение к LDAP:
  256. ## ldap_port: 389
  257. ## ldap_port: 636
  258. ##
  259. ## Пользователь для поиска по LDAP:
  260. ## ldap_rootdn: "dc=example,dc=com"
  261. ##
  262. ## Пароль для пользователя LDAP:
  263. ## ldap_password: "******"
  264. ##
  265. ## Корень для поиска в LDAP:
  266. ## ldap_base: "dc=example,dc=com"
  267. ##
  268. ## Атрибут в LDAP, содержащий ID пользователя:
  269. ## ldap_uids:
  270. ##   - "mail": "%u@mail.example.org"
  271. ##
  272. ## Фильтр для поиска в LDAP:
  273. ## ldap_filter: "(objectClass=shadowAccount)"
  274.  
  275. ##
  276. ## Anonymous login support:
  277. ##   auth_method: anonymous
  278. ##   anonymous_protocol: sasl_anon | login_anon | both
  279. ##   allow_multiple_connections: true | false
  280. ##
  281. ## host_config:
  282. ##   "public.example.org":
  283. ##     auth_method: anonymous
  284. ##     allow_multiple_connections: false
  285. ##     anonymous_protocol: sasl_anon
  286. ##
  287. ## To use both anonymous and internal authentication:
  288. ##
  289. ## host_config:
  290. ##   "public.example.org":
  291. ##     auth_method:
  292. ##       - internal
  293. ##       - anonymous
  294.  
  295. ###   ==============
  296. ###   Параметры БД
  297.  
  298. ### По умолчанию ejabberd использует внутреннюю БД Mnesia,
  299. ### поэтому настройка данной секции для вас может быть не обязательна.
  300. ### Если же у вас есть необходимость использовать внешнее хранилище,
  301. ### то в данной секции приведены примеры конфигурации ejabberd
  302. ### для работы с внешними хранилищами.
  303. ### За деталями обращайтесь в документацию ejabberd.
  304.  
  305. ##
  306. ## MySQL server:
  307. ##
  308. ## odbc_type: mysql
  309. ## odbc_server: "server"
  310. ## odbc_database: "database"
  311. ## odbc_username: "username"
  312. ## odbc_password: "password"
  313. ##
  314. ## При необходимости можно указать порт для подключения:
  315. ## odbc_port: 1234
  316.  
  317. ##
  318. ## PostgreSQL server:
  319. ##
  320. odbc_type: pgsql
  321. odbc_server: "localhost"
  322. odbc_database: "ejabberd"
  323. odbc_username: "ejabberd"
  324. odbc_password: "123456"
  325. ##
  326. ## При необходимости можно указать порт для подключения:
  327. ## odbc_port: 1234
  328. ##
  329. ## Если вы используете PostgreSQL и у вас очень большая БД (по размеру)
  330. ## и нужен быстрая, но менее точная замена для "select count(*) from users",
  331. ## то включите данную опцию.
  332. ##
  333. ## pgsql_users_number_estimate: true
  334.  
  335. ##
  336. ## ODBC совместимый или MSSQL сервер:
  337. ##
  338. ## odbc_type: odbc
  339. ## odbc_server: "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"
  340.  
  341. ##
  342. ## Максимальное количество открытых подключений к СУБД для каждого
  343. ## виртуального хоста:
  344. ##
  345. odbc_pool_size: 3
  346.  
  347. ##
  348. ## Выполнять с определенным интервалом бесполезный SQL запрос,
  349. ## для поддерживания подключения к базе данных (keep alive).
  350. ## интервал задается в секундах: например, 28800 значит 8 часов
  351. ##
  352. ## odbc_keepalive_interval: undefined
  353.  
  354. ###   ===============
  355. ###   Шейперы (ограничение скорости)
  356.  
  357. shaper:
  358.   ##
  359.   ## Шейпер "normal" с лимитом скорости в 1000 B/s
  360.   ##
  361.   normal: 1000
  362.  
  363.   ##
  364.   ## Шейпер "fast" с лимитом скорости в 50000 B/s
  365.   ##
  366.   fast: 50000
  367.  
  368.   ##
  369.   ## Шейпер "proxy65" с лимитом скорости в 64Kb/s
  370.   ##
  371.   proxy65: 65536
  372.  
  373. ##
  374. ## Максимальное количество элементов в очереди FSM.
  375. ## В документации подробно расписано значение данного параметра.
  376. ##
  377. max_fsm_queue: 1000
  378.  
  379. ###.   ====================
  380. ###'   Списки контроля доступа
  381. acl:
  382.   ##
  383.   ## ACL 'admin'  дает права администратора конкретным XMPP аккаунтам.
  384.   ## При необходимости вы можете указать здесь несколько записей.
  385.   ##
  386.   admin:
  387.     user:
  388.       - "nekit": "info-x.org"
  389.   ##    - "ermine": "example.org"
  390.   ##
  391.   ## Заблокированные пользователи
  392.   ##
  393.   ## blocked:
  394.   ##   user:
  395.   ##     - "baduser": "example.org"
  396.   ##     - "test"
  397.  
  398.   ## Локальные пользователи: не изменяйте данную ACL.
  399.   ##
  400.   local: 
  401.     user_regexp: ""
  402.  
  403.   ##
  404.   ## Еще примеры ACL
  405.   ##
  406.   ## jabberorg:
  407.   ##   server:
  408.   ##     - "jabber.org"
  409.   ## aleksey:
  410.   ##   user:
  411.   ##     - "aleksey": "jabber.ru"
  412.   ## test:
  413.   ##   user_regexp: "^test"
  414.   ##   user_glob: "test*"
  415.  
  416.   ##
  417.   ## Loopback network
  418.   ##
  419.   loopback:
  420.     ip:
  421.       - "127.0.0.0/8"
  422.  
  423.   ##
  424.   ## Bad XMPP servers
  425.   ##
  426.   ## bad_servers:
  427.   ##   server:
  428.   ##     - "xmpp.zombie.org"
  429.   ##     - "xmpp.spam.com"
  430.  
  431. ##
  432. ## Определение ACL для виртуального хоста.
  433. ##
  434. ## host_config:
  435. ##   "localhost":
  436. ##     acl:
  437. ##       admin:
  438. ##         user:
  439. ##           - "bob-local": "localhost"
  440.  
  441. ###   ============
  442. ###   Правила доступа
  443. access:
  444.   ## Максимальное количество одновременных подключений к серверу для одного пользователя:
  445.   max_user_sessions: 
  446.     all: 10
  447.  
  448.   ## Максимальное количество offline сообщений для пользователя:
  449.   max_user_offline_messages: 
  450.     admin: 5000
  451.     all: 300
  452.  
  453.   ##Правило доступа для локальных пользователей (This rule allows access only for local users):
  454.   local: 
  455.     local: allow
  456.  
  457.   ## Только не заблокированные пользователи могут подключаться к серверу:
  458.   c2s: 
  459.     blocked: deny
  460.     all: allow
  461.  
  462.   ## Ограничение скорости для пользователей, кроме админов:
  463.   c2s_shaper: 
  464.     admin: none
  465.     all: normal
  466.  
  467.   ## Все S2S соединения пропускаются через шейпер "fast"
  468.   s2s_shaper: 
  469.     all: fast
  470.  
  471.   ## Только админы могут отправлять объявления (announcement messages) пользователям:
  472.   announce: 
  473.     admin: allow
  474.  
  475.   ## Только админы могут использовать интерфейс конфигурирования:
  476.   configure: 
  477.     admin: allow
  478.  
  479.   ## Админам сервера разрешено админить сервис MUC:
  480.   muc_admin: 
  481.     admin: allow
  482.  
  483.   ## Локальные пользователи могут создавать комнаты:
  484.   muc_create: 
  485.     local: allow
  486.  
  487.   ## Всем пользователям разрешено использовать сервис MUC:
  488.   muc: 
  489.     all: allow
  490.  
  491.   ## Только локальные пользователи могут создавать узлы Pubsub:
  492.   pubsub_createnode: 
  493.     local: allow
  494.  
  495.   ## Регистрация по требованию позволяет любому зарегистрироваться на сервере.
  496.   ## Чтобы запретить, замените 'allow' на 'deny'.
  497.   register: 
  498.     all: deny
  499.  
  500.   ## All local users may access to proxy65
  501.   proxy65:
  502.     local: allow
  503.     all: deny
  504.  
  505.   ## Only allow to register from localhost
  506.   trusted_network: 
  507.     loopback: allow
  508.  
  509.   ## Do not establish S2S connections with bad servers
  510.   ## s2s_access:
  511.   ##   bad_servers: deny
  512.   ##   all: allow
  513.  
  514. ## Частота регистрации аккаунтов с конкретного IP, то есть можно создать
  515. ## один аккаунт в течении определенного времени. Задается в секундах.
  516. ## Чтобы выключить, укажите infinity .
  517. ## registration_timeout: 600
  518.  
  519. ##
  520. ## Права доступа для виртуального хоста.
  521. ##
  522. ## host_config:
  523. ##   "localhost":
  524. ##     access:
  525. ##       c2s:
  526. ##         admin: allow
  527. ##         all: deny
  528. ##       register:
  529. ##         all: deny
  530.  
  531. ###   ================
  532. ###   Язык по умолчанию
  533.  
  534. ##
  535. ## language: Язык по умолчанию для сообщений от сервера.
  536. ##
  537. language: "ru"
  538.  
  539. ##
  540. ## Различные языки для каждого из виртуальных хостов.
  541. ##
  542. ## host_config:
  543. ##   "localhost":
  544. ##     language: "ru"
  545.  
  546. ###   =======
  547. ###   Капча
  548.  
  549. ##
  550. ## Полный путь до скрипта, генерирующего изображение капчи.
  551. ## С дистрибутивом ejabberd для генерации изображения капчи поставляется
  552. ## скрипт, который использует утилиту convert из пакета ImageMagick.
  553. ## В ОС FreeBSD скрипт лежит тут:
  554. ## /usr/local/lib/erlang/lib/ejabberd-14.05/priv/bin/captcha.sh
  555. ##
  556. ## Устанавливать ImageMagick для такой мелкой цели мне не захотелось.
  557. ## У меня в системе была установлена библиотека gd, поэтому я пошел
  558. ## другим путем: установил для perl модуль /usr/ports/graphics/p5-GD
  559. ## для работы с библиотекой gd и написал скрипт для генерации капчи на perl.
  560. ## Если кому нужно, то в конце статьи я прикрепил его.
  561. ##
  562. captcha_cmd: "/usr/local/etc/ejabberd/captcha/captcha.pl"
  563.  
  564. ##
  565. ## URL и порт, на который будут направлены пользователи для проверки капчей.
  566. ## У меня HTTP сервис ejabberd спрятан за апачем. Если делать напрямую, то
  567. ## параметр может иметь вид: {captcha_host, "http:/hostname:5280"}.
  568. ##
  569. captcha_host: "http://www.fastbsd.ru/ejabberd"
  570.  
  571. ##
  572. ## Ограничение запросов к капче в минуту для JID/IP (защита от DoS).
  573. ##
  574. captcha_limit: 5
  575.  
  576. ###   =======
  577. ###   Конфигурация модулей
  578.  
  579. ##
  580. ## Указанные здесь модули будут доступны на всех виртуальных хостах.
  581. ## Описание всех опций, которые здесь использованы, приведено в документации.
  582. ## Так же хочу отметить, что некоторые модули имеют параметр:
  583. ##         db_type: odbc
  584. ## он необходим для работы данных модулей с БД.
  585. ##
  586. modules: 
  587.   mod_adhoc: {}
  588.   mod_announce: # recommends mod_adhoc
  589.     db_type: odbc
  590.     access: announce
  591.   mod_blocking: # requires mod_privacy
  592.     db_type: odbc
  593.   mod_caps: {}
  594.   mod_carboncopy: {}
  595.   mod_configure: {} # requires mod_adhoc
  596.   mod_disco:
  597.     server_info:
  598.       modules: all
  599.       name: "admin-addresses"
  600.       urls:
  601.         - "mailto:nekit@info-x.org"
  602.         - "xmpp:nekit@info-x.org"
  603.   ## mod_echo: {}
  604.   mod_irc:
  605.     db_type: odbc
  606.     access: irc_users
  607.     host: "irc.@HOST@"
  608.   mod_http_bind: {}
  609.   ## mod_http_fileserver:
  610.   ##   docroot: "/var/www"
  611.   ##   accesslog: "/var/log/ejabberd/access.log"
  612.   mod_last:
  613.     db_type: odbc
  614.   mod_muc: 
  615.     host: "conference.@HOST@"
  616.     db_type: odbc
  617.     access: muc
  618.     access_create: muc_create
  619.     access_persistent: muc_create
  620.     access_admin: muc_admin
  621.     history_size: 30
  622.     max_users: 300
  623.     max_user_conferences: 10
  624.     min_presence_interval: 4
  625.     default_room_options:
  626.       allow_change_subj: false
  627.       allow_private_messages: true
  628.       allow_private_messages_from_visitors: moderators
  629.       allow_query_users: true
  630.       allow_user_invites: false
  631.       allow_visitor_nickchange: false
  632.       anonymous: true
  633.       captcha_protected: true
  634.       logging: true
  635.       members_by_default: false
  636.       members_only: false
  637.       moderated: true
  638.       password_protected: false
  639.       persistent: true
  640.       public: true
  641.       public_list: false
  642.   mod_muc_log:
  643.     cssfile: false
  644.     dirtype: plain
  645.     file_format: html
  646.     outdir: "/var/log/ejabberd/muc"
  647.     spam_prevention: true
  648.     timezone: local
  649.     top_link:
  650.       "http://www.info-x.org/": "www.info-x.org"
  651.   mod_offline: 
  652.     db_type: odbc
  653.     access_max_user_messages: max_user_offline_messages
  654.   mod_ping:
  655.     send_pings: true
  656.     ping_interval: 600
  657.     timeout_action: kill
  658.   ## mod_pres_counter:
  659.   ##   count: 5
  660.   ##   interval: 60
  661.   mod_privacy:
  662.     db_type: odbc
  663.   mod_private:
  664.     db_type: odbc
  665.   mod_proxy65:
  666.     host: "proxy.@HOST@"
  667.     name: "Proxy for File Transfers"
  668.     ip: "192.168.7.253"
  669.     port: 7777
  670.     auth_type: anonymous
  671.     access: proxy65
  672.     shaper: proxy65
  673.   mod_pubsub_odbc:
  674.     host: "pubsub.@HOST@"
  675.     access_createnode: pubsub_createnode
  676.     ## reduces resource comsumption, but XEP incompliant
  677.     ignore_pep_from_offline: true
  678.     ## XEP compliant, but increases resource comsumption
  679.     ## ignore_pep_from_offline: false
  680.     last_item_cache: false
  681.     plugins: 
  682.       - "flat_odbc"
  683.       - "hometree_odbc"
  684.       - "pep_odbc" # pep requires mod_caps
  685.   mod_register: 
  686.     ##
  687.     ## Защитить процесс регистрации капчей.
  688.     ##
  689.     ## captcha_protected: true
  690.  
  691.     ##
  692.     ## Минимальная энтропия для пароля.
  693.     ##
  694.     ## password_strength: 32
  695.  
  696.     ##
  697.     ## После успешной регистрации пользователь получит
  698.     ## сообщение, заданное здесь.
  699.     ##
  700.     welcome_message: 
  701.       subject: "Welcome!"
  702.       body: |-
  703.         Hi.
  704.         Welcome to this XMPP server.
  705.  
  706.     ##
  707.     ## Отправлять уведомление на указанные здесь аккаунты
  708.     ## о регистрации нового пользователя на сервере.
  709.     ##
  710.     ## registration_watchers:
  711.     ##   - "admin1@example.org"
  712.  
  713.     ##
  714.     ## Ограничение доступа к регистрации по подсетям
  715.     ##
  716.     ip_access: trusted_network
  717.  
  718.     ##
  719.     ## Локальные c2s или удаленные s2s пользователи не могут
  720. 		## регистрировать аккаунты (см. в документацию)
  721.     ##
  722.     ## access_from: deny
  723.  
  724.     access: register
  725.   mod_roster:
  726.     db_type: odbc
  727.     versioning: true
  728.     store_current_id: true  # Не включайте параметр совместно с mod_shared_roster или mod_shared_roster_ldap modules
  729.   ## mod_shared_roster: {}
  730.   mod_stats: {}
  731.   mod_time: {}
  732.   mod_vcard:
  733.     host: "vjud.@HOST@"
  734.     db_type: odbc
  735.     search: false
  736.     matches: 50
  737.     allow_return_all: false
  738.   mod_vcard_xupdate:
  739.     db_type: odbc
  740.   mod_version:
  741.     show_os: true
  742.   mod_webpresence:
  743.     host: "webstatus.@HOST@"
  744.     access: local
  745.     pixmaps_path: "/usr/local/etc/ejabberd/modules/mod_webpresence/data/pixmaps"
  746.     path: presence
  747.     baseurl: "http://www.fastbsd.ru/ejabberd/presence/"
  748.  
  749. ##
  750. ## Параметры модулей отдельно для каждого виртуального хоста.
  751. ##
  752. ## append_host_config:
  753. ##   "localhost":
  754. ##     modules:
  755. ##       mod_echo:
  756. ##         host: "mirror.localhost"
  757.  
  758. ### Local Variables:
  759. ### mode: yaml
  760. ### End:
  761. ### vim: set filetype=yaml tabstop=8

Файл ejabberdctl.cfg у меня выглядит так:
  1. #
  2. # В данном файле вы можете изменить опции, которые передает
  3. # утилита ejabberdctl в переменные окружение для erlang,а.
  4. #
  5.  
  6. #' POLL: Kernel polling ([true|false])
  7. #
  8. # Для использования данной фичи необходимо, чтобы ядро и erlang
  9. # были скомпилированы с поддержкой polling,а .
  10. #
  11. # По умолчанию: true
  12. #
  13. POLL=true
  14.  
  15. #.
  16. #' SMP: поддержка SMP ([enable|auto|disable])
  17. #
  18. # В документации Erlang/OTP сказано:
  19. # enable: запуск Erlang с поддержкой SMP. Может произойти сбой
  20. #   при запуске, если SMP не поддерживается.
  21. # auto: запуск Erlang с поддержкой SMP только, если оно доступно
  22. #   и в системе имеется более одного логического/физического
  23. #   процессора.
  24. # disable: запуск Erlang без поддержки SMP.
  25. #
  26. # По умолчанию: auto
  27. #
  28. SMP=auto
  29.  
  30. #.
  31. #' ERL_MAX_PORTS: Максимальное количество одновременно открытых портов Erlang,ом
  32. #
  33. # На каждое подключение ejabberd использует два или три порта:
  34. #   для клиента или для другого Jabber сервера.
  35. # Примите это во внимание, устанавливая данный предел.
  36. #
  37. # По умолчанию: 32000
  38. # Maximum: 268435456
  39. #
  40. #ERL_MAX_PORTS=32000
  41.  
  42. #.
  43. #' FIREWALL_WINDOW: Диапазон допустимых портов (полезно при использовании фаервола)
  44. #
  45. # Если ejabberd работает в кластере и в системе включен фаервол,
  46. # то возможно задать статический диапазон портов, используемых
  47. # для взаимодействия узлов (node).
  48. #
  49. # По умолчанию: not defined
  50. # Пример: 4200-4210
  51. #
  52. #FIREWALL_WINDOW=
  53.  
  54. #.
  55. #' INET_DIST_INTERFACE: IP на котором принимаются соединения с других узлов (node)
  56. #
  57. # Соединение, например, может устанавливать ejabberdctl или 
  58. # другие узлы (node) из кластера.
  59. #
  60. # Default: 127.0.0.1
  61. #
  62. INET_DIST_INTERFACE=127.0.0.1
  63.  
  64. #.
  65. #' ERL_EPMD_ADDRESS: IP на котором сервис epmd принимает подключения
  66. #
  67. # ВАЖНО: Данная опция работает только с Erlang/OTP R14B03 и новее.
  68. #
  69. # Параметр может принимать список IP адресов, разделенных
  70. # запятыми. Следует отметить, что демон epmd будет принимать
  71. # подключения на 127.0.0.1, даже если он не указан в списке.
  72. # По умолчанию соединения принимаются отовсюду.
  73. #
  74. # По умолчанию: 0.0.0.0
  75. #
  76. ERL_EPMD_ADDRESS=127.0.0.1
  77.  
  78. #.
  79. #' ERL_PROCESSES: Максимальное количество процессов Erlang
  80. #
  81. # Для работы ejabberd, Erlang порождает необходимое количество процессов
  82. # (которые сами по себе потребляют очень мало ресурсов). При большой
  83. # нагрузке на ejabberd данный лимит может быть исчерпан, что повлечен
  84. # за собой увеличение задержек при работе с клиентами. Так как слово
  85. # "процесс" употребляется в контексте Erlang (а не операционной системы),
  86. # то не стоит волноваться о том, что тут указано довольно большое значение.
  87. #
  88. # По умолчанию: 250000
  89. # Максимум: 268435456
  90. #
  91. #ERL_PROCESSES=250000
  92.  
  93. #.
  94. #' ERL_MAX_ETS_TABLES: Максимальное количество ETS и таблиц Mnesia
  95. #
  96. # Количество конкурирующих (одновременных) ETS и таблиц Mnesia ограничено.
  97. # Когда достигается лимит, то в логах можно увидеть такое сообщение:
  98. #   ** Too many db tables **
  99. # Вы можете без опаски увеличивать значение данного параметра, что хоть
  100. # и повлечет увеличение использования памяти, но оно все же будет невелико.
  101. #
  102. # По умолчанию: 1400
  103. #
  104. #ERL_MAX_ETS_TABLES=1400
  105.  
  106. #.
  107. #' ERL_OPTIONS: Дополнительные параметры Erlang
  108. #
  109. # В данном параметре возможно указать дополнительные опции, которые
  110. # будут переданы в процесс(ы) erlang при запуске ejabberd. Некоторыми
  111. # полезными опциями являются -noshell, -detached, -heart. Когда ejabberd
  112. # запускается системным скриптом rc.d, то опции -noshell, -detached
  113. # применяются автоматически. За подробностями в ман erl(1).
  114. #
  115. # It might be useful to add "-pa /usr/local/lib/ejabberd/ebin" if you
  116. # want to add local modules in this path.
  117. #
  118. # По умолчанию: ""
  119. #
  120. #ERL_OPTIONS=""
  121.  
  122. #.
  123. #' ERLANG_NODE: Имя узла (node) Erlang
  124. #
  125. # В данном параметре возможно указать имя узла erlang для ejabberd.
  126. # Возможны различные форматы:
  127. # ERLANG_NODE=ejabberd
  128. #   Lets erlang add hostname to the node (ejabberd uses short name in this case)
  129. # ERLANG_NODE=ejabberd@hostname
  130. #   Erlang uses node name as is (so make sure that hostname is a real
  131. #   machine hostname or you'll not be able to control ejabberd)
  132. # ERLANG_NODE=ejabberd@hostname.domainname
  133. #   The same as previous, but erlang will use long hostname
  134. #   (За подробностями в ман erl(1))
  135. #
  136. # По умолчанию: ejabberd@localhost
  137. #
  138. ERLANG_NODE=ejabberd@localhost
  139.  
  140. #.
  141. #' EJABBERD_PID_PATH: Путь до PID файла
  142. #
  143. # В данном параметре задаются полный путь до PID (Process identifier) файла.
  144. # Если параметр задан, то ejabberd запишет полученный при старте
  145. # от системы идентификатор в указанный файл. При остановке сервиса
  146. # файл автоматически будет удален.
  147. # Учтите, что ejabberd должен иметь права записи в директорию, иначе
  148. # процесс не запустится.
  149. #
  150. # По умолчанию: пусто, то есть не записывать PID файл
  151. #
  152. EJABBERD_PID_PATH=/var/run/ejabberd/ejabberd.pid
  153.  
  154. #.
  155. #'
  156. # vim: foldmarker=#',#. foldmethod=marker:

Файл inetrc я не изменял и оставил так, как есть. Конфигурационные файлы достаточно хорошо прокомментированы, поэтому дополнительно по ним сказать нечего. Описание параметров, используемых для конфигурации модулей можно посмотреть в документации на официальном сайте разработчиков. После подготовки конфигурационных файлов сервера добавляем сервис в автозагрузку и пробуем его запустить.
  1. # echo 'ejabberd_enable="YES"' >> /etc/rc.conf
  2. # service ejabberd start

Если при редактировании конфигурационных файлов ошибок допущено не было, то проблем возникнуть не должно и вы сможете увидеть на экране примерно следующее:
  1. # sockstat -4 -l | grep ejabberd
  2. ejabberd beam.smp   15934 8  tcp4   127.0.0.1:38487       *:*
  3. ejabberd beam.smp   15934 15 tcp4   *:5222                *:*
  4. ejabberd beam.smp   15934 17 tcp4   *:5269                *:*
  5. ejabberd beam.smp   15934 18 tcp4   127.0.0.1:5280        *:*
  6. ejabberd beam.smp   15934 23 udp4   *:3478                *:*
  7. ejabberd epmd       15932 3  tcp4   127.0.0.1:4369        *:*

Если же сервис не стартовал, то смотрите логи в /var/log/ejabberd. К сожалению, формат выплевываемых ошибок сервером дико неудобный, но разобраться все же можно. Обычно проблемы возникают из-за некорректных прав доступа или опечаток в конфигурационном файле. Для отладки будет полезна команда ejabberdctl live, которая запускает сервер не отсоединяя его от терминала и все сообщения выводятся на консоль. Только учтите, что сервер будет запущен с правами пользователя выполнившего эту команду и все создаваемые сервером файлы будут иметь соответствующие права (я первый раз долго возился с проблемой запуска сервера командой service ejabberd start после отладки). Поэтому полезно использовать такую команду для отладки:
  1. # su ejabberd -c 'ejabberdctl live'

После запуска сервера нужно создать первый аккаунт, который будет иметь права администратора (права настраивались в секции ACL).
  1. # ejabberdctl register nekit info-x.org 1234

Теперь можно пробовать подключаться к серверу, используя созданный аккаунт. Администрировать сервер проще всего через админку (если вы ее включили при конфигурировании) или через Jabber клиент (особенно удобно это делать через Gajim или Psi+). На этом настройку XMPP сервера ejabberd Community Server можно считать завершенной. Если возникнут замечания, то прошу в комменты, а с вопросами обращайтесь в форум.

Комментарии

Аватар пользователя Гость

Спасибо за статью, просто все сам как бы настроил. а вот PubSub не хотел заполнять таблиццы, оказалось что для него как и раньше все, а не db_type: odbc

Аватар пользователя Гость

Было бы не плохо, если бы Вы добавили ман по аутентификации ejabberd + dovecot

Аватар пользователя nekit

Писать ради этого отдельную статью не очень хочется, поскольку настройка dovecot будет отличаться только изменением запросов к базе данных, где хранится вся информация о пользователях. То есть тут все просто, например, если вся информация о пользователях хранится в бд типа sql, то пишете соответствующий запрос в настройках dovecot, в котором указываете таблицу, в которой хранятся данные о пользователях (таблица auth вроде). С LDAP также все просто.

Аватар пользователя Гость

Спасибо большое за статью. :-)
Но, и вопросиков кучка есть... ;-)

я первый раз долго возился с проблемой запуска сервера командой service ejabberd start после отладки

Можно тут поподробнее? а то у меня, похоже, ситуация аналогичная...
Ставил и настраивал из-под рута. Из под него же из консоли через ejabberdctl start запускается и работает, а вот при прописывании в /usr/local/etc/rc.conf параметра ejabberd_enable="YES" и попытке запуска ejsbber-а, получаем х... по всей морде. :-( Причем, в логах ejsbber-а ругани нет.

Аватар пользователя Гость

Предыдущий вопрос (про "поподробнее") был мой.

Как приятно "побеседовать" с умным человеком"! :-) Задал тут вопрос и буквально в течении 5 минут сам понял, в чем дело - права на файлы в /var/spool/ejabberd. У меня владельцем файлов был root, а группа - ejabberd. Само-собой, когда запускал из консоли от рута (ejabberdctl start), то все работало, а при запуске демона "по взрослому" - запуск шел от пользователя ejabberd... вот и облом выходил.
Заменил права на все файлы в упомянутой директории на ejabberd/ejabberd и получил удовольствие от работающего ежа. :-)

PS. Фря 10.3, ёж - 16.04

Аватар пользователя Гость

В дополнение (сам мучался):

> su - ejabberd
> ejabberdctl register nekit info-x.org 1234

Если от root, то "Failed RPC connection to the node ejabberd@localhost: nodedown"

Добавить комментарий

Filtered text

CAPTCHA
Этот вопрос предназначен для предотвращения автоматической отправки форм спам-ботами.
Fill in the blank.