Prosody

来自 ArchWiki

来自 官方网站

Prosody 是一个现代化的 XMPP 通信服务器。它的目标是易于安装和配置,并高效利用系统资源。此外,对于开发者来说,它的目标是易于扩展,并提供一个灵活的系统,以便快速开发附加功能或原型化新协议。

安装

安装 prosody 软件包。

可选依赖

Prosody 有一些可选的依赖项,虽然不是其运行所严格要求的,但可以提供有用的功能。这些依赖项也可能必须从 AUR 构建和安装。如果您不熟悉如何从 AUR 构建和安装软件包,请参阅 Arch 用户仓库#安装和升级软件包。截至 Prosody 0.12,建议使用 Lua 5.4

TLS/SSL 支持 (推荐)
允许 Prosody 加密流以防止窃听。
要求: lua-sec
MySQL/Postgresql 后端
允许 Prosody 使用 MySQL/mariadb/Postgresql 后端,以获得更好的扩展性和性能。
要求: lua-dbi
更好的连接扩展 (推荐)
允许 Prosody 使用 libevent 来处理更多的并发连接。
要求: lua-eventAUR
流压缩
允许 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
提示: 您可能希望至少将一个用户设为管理员,方法是将其 Jabber ID 添加到配置文件中的 admins 列表中。

有关详细信息,请参阅 prosodyctl(1)

安全

用户注册

Prosody 支持 XMPP 的带内注册 标准,允许用户从其客户端内部注册 XMPP 客户端并更改其密码。虽然这对用户来说很方便,但它不允许管理员审核新用户的注册。因此,register 模块在默认配置中启用,但 allow_registration 设置为 false。这允许现有用户从其客户端内部更改其密码,但不允许新用户自行注册。

提示: 如果您确实决定支持新的带内注册,您可能会发现 watchregistrationswelcome 模块很有用。

流加密

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" }
注意: 强制执行的 Prosody 约定是模块命名为 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/prosodyprosody 用户所有,并且该用户具有读取和写入这些路径以及所有包含文件的适当权限。
  • 检查监听端口
    在排除连接问题时,请确保 Prosody 实际上正在侦听连接。您可以运行 ss -tul 并确保列出了 xmpp-client (端口 5222) 和 xmpp-server (端口 5269)。
  • 重启
    与大多数事物一样,重启 prosody.service 以查看是否解决了问题并没有坏处。

如果您无法自行解决问题,可以使用各种资源来寻求帮助。以下是您可能获得帮助的即时性顺序

  1. XMPP 会议:prosody@conference.prosody.im
  2. 邮件列表:prosody-users@googlegroups.comWeb 界面
  3. Arch 论坛 (针对软件包问题)

开发

AUR 中维护了一个 Prosody 的开发软件包,prosody-hgAURprosody-hg 跟踪 Prosody 的 Mercurial 存储库提示,并将始终包含最新的代码,因为它是在签入时。这两个软件包的构建方式与稳定软件包类似。

通信

参见