Prosody
来自 官方网站
- Prosody 是一个现代化的 XMPP 通信服务器。它的目标是易于安装和配置,并高效利用系统资源。此外,对于开发者来说,它的目标是易于扩展,并提供一个灵活的系统,以便快速开发附加功能或原型化新协议。
安装
可选依赖
Prosody 有一些可选的依赖项,虽然不是其运行所严格要求的,但可以提供有用的功能。这些依赖项也可能必须从 AUR 构建和安装。如果您不熟悉如何从 AUR 构建和安装软件包,请参阅 Arch 用户仓库#安装和升级软件包。截至 Prosody 0.12,建议使用 Lua 5.4。
- TLS/SSL 支持 (推荐)
- 允许 Prosody 加密流以防止窃听。
要求: lua-sec
- MySQL/Postgresql 后端
- 允许 Prosody 使用 MySQL/mariadb/Postgresql 后端,以获得更好的扩展性和性能。
要求: lua-dbi
- 流压缩
- 允许 Prosody 为兼容的客户端压缩客户端到服务器的流,以节省带宽。
要求: lua-zlib
配置
posix
模块和 pidfile
设置是 Prosody 正常运行所必需的。主配置文件位于 /etc/prosody/prosody.cfg.lua
。有关如何配置 Prosody 的信息,请参阅 Prosody 的 文档。可以通过运行以下命令来检查配置文件的语法是否正确
# luac5.2 -p /etc/prosody/prosody.cfg.lua
没有输出意味着语法正确。
认证
默认配置使用 mod_auth_internal_hashed。如果删除该行,它将默认为 mod_auth_internal_plain。
日志记录
prosody 软件包已预配置为记录到 syslog。因此,默认情况下,Prosody 日志消息在 systemd 日志中可用。
操作
启动/启用 prosody.service
systemd 服务。
Prosody 使用默认的 XMPP 端口 5222 和 5269,分别用于客户端到服务器和服务器到服务器的通信。根据需要配置您的防火墙。
您可以使用 prosodyctl
程序来操作 Prosody 用户。要添加用户
# prosodyctl adduser JID
admins
列表中。有关详细信息,请参阅 prosodyctl(1)。
安全
用户注册
Prosody 支持 XMPP 的带内注册 标准,允许用户从其客户端内部注册 XMPP 客户端并更改其密码。虽然这对用户来说很方便,但它不允许管理员审核新用户的注册。因此,register
模块在默认配置中启用,但 allow_registration
设置为 false
。这允许现有用户从其客户端内部更改其密码,但不允许新用户自行注册。
watchregistrations
和 welcome
模块很有用。流加密
Prosody 可以利用 TLS 证书来加密客户端到服务器的通信 (如果安装了正确的 依赖项)。请参阅 prosody.cfg.lua
的相关部分,以配置 Prosody 以使用这些证书。
要要求客户端到服务器的通信加密,请将以下内容添加到您的配置文件中
/etc/prosody/prosody.cfg.lua
Host "*" c2s_require_encryption = true
同样,对于服务器到服务器的通信,您可以这样做
/etc/prosody/prosody.cfg.lua
Host "*" s2s_require_encryption = true
虽然要求客户端到服务器的加密通常是一个好主意,但请记住,一些流行的 XMPP 服务(如 Google Talk/Gmail)不支持服务器到服务器的加密。
列出用户
查看已注册用户列表的一个简单方法是
# ls -l /var/lib/prosody/*/accounts/*
或者,您可以下载模块 mod_listusers.lua,并将其用作
# prosodyctl mod_listusers
移除
在通常使用 pacman 卸载 Prosody 后,/etc/prosody
和 /var/lib/prosody
目录可能会留在您的文件系统中,如果您不打算重新安装 Prosody,您可能需要删除它们。
技巧与诀窍
组件
Prosody 支持 XMPP 组件,这些组件为客户端提供额外的服务。组件可以由特殊的 Prosody 模块在内部提供,也可以使用 XEP-0114 中指定的协议在外部提供。
prosody.cfg.lua
中定义的 VirtualHost
名称不同的主机名。尝试在与定义的 VirtualHost
相同的主机名上托管组件将导致错误。默认情况下,Prosody 将侦听外部组件。如果您不打算将任何外部组件与 Prosody 一起使用,您可以通过添加以下配置来禁用此行为
/etc/prosody/prosody.cfg.lua
component_ports = {}
多人聊天
与 XMPP 服务器一起使用的常见组件是多人聊天 (MUC),它允许多个用户之间的会议。MUC 作为 Prosody 的内部组件提供。要启用 MUC,请将以下内容添加到您的配置文件中
/etc/prosody/prosody.cfg.lua
Component "conference.example.com" "muc"
这将在主机 conference.example.com
上启用 MUC 组件。
Prosody 模块
Prosody 模块 是一个未与 Prosody 一起分发的额外模块集合。这些模块处于从高度实验性到相对稳定的各种开发状态。您应该查阅给定模块的 wiki 页面以获取更多信息。额外模块的一个示例是 pastebin
,加载后,它将拦截长消息(例如,日志文件输出)并将其替换为指向使用 Prosody 的内部 HTTP 服务器(由核心模块 httpserver
提供)托管的 pastebin 的链接。
要使用额外的模块,请从源浏览器下载其原始文件(查看文件时,搜索链接“查看原始文件”)。或者,可能更容易的方式是使用 Mercurial 克隆整个存储库
- Prosody 0.9+
$ hg clone https://hg.prosody.im/prosody-modules/ prosody-modules
- Prosody 0.8
$ hg clone http://0-8.prosody-modules.googlecode.com/hg/ prosody-modules
现在,您可以将模块(以及它需要的任何其他文件)复制到 Prosody 的模块目录 /usr/lib/prosody/modules
。要启用模块,请将其添加到您希望使用它的主机或组件的 prosody.cfg.lua
中的 modules_enabled
列表中。例如,要在 MUC 组件上使用 pastebin
模块
/etc/prosody/prosody.cfg.lua
Component "conference.example.com" "muc" modules_enabled = { "pastebin" }
mod_foo.lua
,但只需将 foo
添加到 modules_enabled
列表即可启用。控制台
console
模块。console
模块提供了一个 telnet 控制台,可以从中执行管理操作和查询。您可以通过发出以下命令连接到控制台
$ telnet localhost 5582
您当然需要 inetutils
软件包提供的 telnet
程序。使用控制台中的 help
命令获取使用帮助。
控制台甚至允许您通过在命令前加上 >
直接在服务器上执行 Lua 命令。例如,要查看客户端连接是否已压缩
> full_sessions["romeo@montague.lit/Resource"].compressed
如果连接已压缩,将返回 true
,否则返回 nil
。
故障排除
Prosody 的主要设计原则之一是易于使用和配置。但是,问题仍然可能出现(并且很可能像任何复杂的软件一样)。如果您遇到问题,可以采取多种步骤来缩小原因范围
- 检查已知问题
查看您的 Prosody 版本的 发行说明,查看您的问题是否列为已知问题。另请检查 问题跟踪器,查看您的问题是否已被报告。 - 检查配置语法
运行luac5.1 -p /etc/prosody/prosody.cfg.lua
以检查您的配置文件中是否有任何语法错误。如果没有输出,则您的语法没问题。 - 检查日志
只有在出现严重问题时才会记录错误,因此请务必解决这些问题。如果您认为您遇到了非常低级别的问题(例如客户端和服务器与 Prosody 之间的协议兼容性),那么您可以启用非常详细的调试级别日志记录。 - 检查权限
Prosody 软件包应将新的prosody
用户和组添加到您的系统,并设置适当的权限,但始终最好再次检查。确保/etc/prosody
和/var/lib/prosody
归prosody
用户所有,并且该用户具有读取和写入这些路径以及所有包含文件的适当权限。 - 检查监听端口
在排除连接问题时,请确保 Prosody 实际上正在侦听连接。您可以运行ss -tul
并确保列出了xmpp-client
(端口 5222) 和xmpp-server
(端口 5269)。 - 重启
与大多数事物一样,重启prosody.service
以查看是否解决了问题并没有坏处。
如果您无法自行解决问题,可以使用各种资源来寻求帮助。以下是您可能获得帮助的即时性顺序
开发
AUR 中维护了一个 Prosody 的开发软件包,prosody-hgAUR。prosody-hg
跟踪 Prosody 的 Mercurial 存储库提示,并将始终包含最新的代码,因为它是在签入时。这两个软件包的构建方式与稳定软件包类似。
通信
- 邮件列表:prosody-dev,prosody-users
- 会议:
prosody@conference.prosody.im
- 博客:Prosodical Thoughts
参见
- 官方文档
- Prosodical Thoughts (博客)
- 问题跟踪器
- Prosody 模块 (额外模块)