Редактирование: Свой сервер: подробное руководство по установке Prosody
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки | В этой статье приводится пример настройки [[Prosody]] - одного из самых популярных и легковесных jabber-серверов. Для сервера написано просто-таки огромное число модулей на все случаи жизни, поэтому в руководстве, основанном на версии 0.12.4, будет показано подключение актуальных и популярных функций. В качестве сертификатов будем использовать Let's Encrypt - и все это на Debian GNU/Linux. | ||
Рассмотрим особенности данной конфигурации. | Рассмотрим особенности данной конфигурации. | ||
Строка 90: | Строка 90: | ||
}} | }} | ||
В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/ | В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер<ref name="http_upload">В таком случае ему нужно обеспечить доступ к каталогу '''/var/lib/prosody/http_upload/''' - а лучше указать опцию '''http_upload_path''' с путем за пределами домашнего каталога Prosody, плюс обеспечить нужные права веб-серверу, чтобы он мог читать файлы, загруженные через jabber-сервер. Такое решение имеет еще одно преимущество: разнообразные клиенты (не только Jabber) будут гораздо охотнее показывать превью для обычных HTTP/HTTPS-ссылок (т.е., на 80 или 443-м порту), а не тех, где контент отдается на "необычном" порту - вроде 5281 в данном примере.</ref>. | ||
После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''): | После всех приготовлений<ref>Более подробно можно почитать тут: [[Свой сервер: подготовка веб-сервера и сертификатов]]</ref> создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''): | ||
Строка 104: | Строка 104: | ||
После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца. | После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца. | ||
Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить | Так как Prosody работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Самым простым и корректным вариантом на сейчас является выполнение следующей команды от рута<ref>https://prosody.im/doc/letsencrypt</ref>: | ||
prosodyctl --root cert import /etc/letsencrypt/live | prosodyctl --root cert import /etc/letsencrypt/live | ||
Строка 112: | Строка 112: | ||
== Установка и настройка Prosody == | == Установка и настройка Prosody == | ||
Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL | Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. Для поддержки звонков потребуется еще STUN/TURN-сервер - в качестве него будем использовать Coturn. В Debian установить Prosody с поддержкой MySQL и Coturn можно командой | ||
apt-get install prosody coturn lua-dbi-mysql | apt-get install prosody coturn lua-dbi-mysql | ||
Строка 151: | Строка 151: | ||
Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю). | Да, так как Coturn не может напрямую прочитать сертификаты из каталога Let's Encrypt - для правильной работы можно создать отдельный каталог, куда копировать сертификаты с нужными правами. В примере выше это '''/etc/turncerts'''. Команду копирования и изменения прав можно объединить в одном скрипте с командой копирования сертификатов для Prosody и вызывать этот скрипт в качестве deploy hook для Let's Encrypt (или просто по Cron'у, например, раз в неделю). | ||
Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты: | Теперь переходим к настройке Prosody. Как уже говорилось, под него есть множество разнообразных модулей. Для удобства добавления модулей добавьте следующие пакеты: | ||
Строка 164: | Строка 160: | ||
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером | prosodyctl install --server=https://modules.prosody.im/rocks/ mod_admin_web # Поддержка WEB-интерфейса для управления сервером | ||
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций | prosodyctl install --server=https://modules.prosody.im/rocks/ mod_vcard_muc # Поддержка vCard для конференций | ||
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций | prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_moderation # Модерирование конференций - возможность удалять спам-сообщения | ||
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений | prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify # Поддержка PUSH-уведомлений | ||
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH | prosodyctl install --server=https://modules.prosody.im/rocks/ mod_cloud_notify_extensions # Дополнительные модули для PUSH | ||
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_http_upload # Поддержка файлообмена через HTTP Upload | |||
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу | prosodyctl install --server=https://modules.prosody.im/rocks/ mod_register_web # Поддержка регистрации через веб-страницу | ||
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_adhoc # Указание дополнительных ролей в конференциях | |||
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_hats_api # См. выше | |||
prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента | prosodyctl install --server=https://modules.prosody.im/rocks/ mod_mam_adhoc # Возможность управлять настройками MAM-архива из jabber-клиента | ||
Конфигурационный файл у Prosody состоит из нескольких секций: | Конфигурационный файл у Prosody состоит из нескольких секций: общие параметры, параметры виртуал-хоста и параметры сервисов. Для удобства то, что относится к виртуал-хосту и его сервисом, вынесено в отдельный файл. | ||
Для удобства то, что относится к виртуал-хосту и его | |||
{{Hider hiding | {{Hider hiding | ||
Строка 241: | Строка 235: | ||
-- Nice to have | -- Nice to have | ||
"csi_simple"; -- Simple but effective traffic optimizations for mobile devices | "csi_simple"; -- Simple but effective traffic optimizations for mobile devices | ||
--"invites"; -- Create and manage invites | |||
--"invites_adhoc"; -- Allow admins/users to create invitations via their client | |||
--"invites_register"; -- Allows invited users to create accounts | |||
"ping"; -- Replies to XMPP pings with pongs | "ping"; -- Replies to XMPP pings with pongs | ||
"register"; -- Allow users to register on this server using a client and change passwords | "register"; -- Allow users to register on this server using a client and change passwords | ||
Строка 349: | Строка 346: | ||
-- For the "sql" backend, you can uncomment *one* of the below to configure: | -- For the "sql" backend, you can uncomment *one* of the below to configure: | ||
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename. | --sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename. | ||
sql = { driver = "MySQL", database = " | sql = { driver = "MySQL", database = "prosody_EXAMPLE.COM", username = "prosodyuser", password = "3zEROPqJhF.tk", host = "localhost" } | ||
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" } | --sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" } | ||
Строка 377: | Строка 374: | ||
-- This secret must be set to the same value in both Prosody and the TURN server | -- This secret must be set to the same value in both Prosody and the TURN server | ||
turn_external_secret = " | turn_external_secret = "6BuWNTSPL0$5IYM0FKdAJu6ZG7ep8sFHzAZUr4PNO6IKzwp1Vxb4wD" | ||
Строка 536: | Строка 533: | ||
modules_enabled = { | modules_enabled = { | ||
"admin_web" | "admin_web" | ||
} | } | ||
allow_registration = false -- Allow users to register new accounts via in-band | allow_registration = false -- Allow users to register new accounts via in-band | ||
Строка 555: | Строка 549: | ||
options = { "no_sslv2", "no_sslv3" } | options = { "no_sslv2", "no_sslv3" } | ||
} | } | ||
proxy65_address = "proxy.EXAMPLE.COM" | |||
proxy65_acl = { "EXAMPLE.COM" } | proxy65_acl = { "EXAMPLE.COM" } | ||
Строка 563: | Строка 557: | ||
"muc_mam", | "muc_mam", | ||
"vcard_muc", | "vcard_muc", | ||
"muc_moderation" | "muc_moderation", | ||
"muc_hats_adhoc" | |||
} | } | ||
ssl = { | ssl = { | ||
Строка 577: | Строка 572: | ||
restrict_room_creation = "local" | restrict_room_creation = "local" | ||
Component "upload.EXAMPLE.COM" " | Component "upload.EXAMPLE.COM" "http_upload" | ||
ssl = { | ssl = { | ||
key = "/etc/prosody/certs/upload.EXAMPLE.COM.key"; | key = "/etc/prosody/certs/upload.EXAMPLE.COM.key"; | ||
Строка 584: | Строка 579: | ||
} | } | ||
http_upload_file_size_limit = 1024*1024*10 -- 10 MB | |||
-- http_max_content_size = 1024*1024*30 | |||
http_upload_quota = 1024*1024*250 -- 250 MB | |||
http_upload_expire_after = 60*60*24*7 -- 1 week | |||
Component "pubsub.EXAMPLE.COM" "pubsub" | Component "pubsub.EXAMPLE.COM" "pubsub" | ||
Строка 597: | Строка 593: | ||
}} | }} | ||
{{ToDo|Доделать}} | |||
==Сноски== | ==Сноски== | ||
Строка 650: | Строка 602: | ||
==Ссылки== | ==Ссылки== | ||
* https://prosody.im - домашняя страница | * https://prosody.im - домашняя страница ejabberd | ||
[[Category:Свой сервер]] | [[Category:Свой сервер]] |