5分钟带你了解Prosody XMPP Server

WebRTC中文社区欢迎大家的加入

Prosody是用Lua编写的免费开源XMPP服务器。快速,轻巧。 XMPP是即时消息传递的最佳协议。本教程介绍了如何在Ubuntu 18.04上安装和配置Prosody XMPP Server。完成本教程后,您将拥有自己的聊天服务器。

步骤1:在Ubuntu 18.04上安装Prosody

Prosody包含在默认的Ubuntu存储库中,但是它很旧。 Prosody团队维护一个软件包存储库。如果要获取最新版本,则需要使用以下命令添加Prosody存储库:

echo ‘deb https://packages.prosody.im/debian bionic main’ | sudo tee /etc/apt/sources.list.d/prosody.list

然后运行以下命令下载并导入Prosody公钥。这使APT软件包管理器可以验证从此存储库下载的软件包的完整性。

wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -

然后更新本地软件包索引并安装最新版本的Prosody。

sudo apt update sudo apt install prosody

安装后,Prosody将自动启动。您可以通过以下方法检查状态。

systemctl status prosody

输出:

● prosody.service - Prosody XMPP Server Loaded: loaded (/lib/systemd/system/prosody.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2020-04-19 13:58:40 UTC; 16s ago Docs: https://prosody.im/doc Main PID: 1894 (lua5.2) Tasks: 1 (limit: 1108) CGroup: /system.slice/prosody.service └─1894 lua5.2 /usr/bin/prosody -F Apr 19 13:58:40 localhost systemd[1]: Started Prosody XMPP Server.

如果没有运行,

sudo systemctl start prosody

要在系统引导时启用自动引导:

sudo systemctl enable prosody

步骤2:在防火墙中打开端口

默认情况下,它会侦听公用IP地址上的TCP端口5269和5222,如以下命令所示: (如果Ubuntu没有netstat命令, sudo apt install net-tools 。 )

sudo netstat -lnptu | grep lua

  • 端口5222用于客户端到服务器的连接。
  • 端口5269用于服务器到服务器的连接。

如果在Ubuntu上启用了UFW防火墙,则需要使用以下命令打开上述端口:

sudo ufw allow 5222,5269/tcp

步骤3:配置Prosody XMPP服务器

使用命令行文本编辑器(例如Nano)编辑主配置文件。

sudo nano /etc/prosody/prosody.cfg.lua

module_enabled {...} 在部分中,您可以取消注释行以启用特定模块,或注释掉行以禁用特定模块。每个模块都有描述其功能的描述。您可能需要启用BOSH模块。 定向流 Ø 版本 小号 同步处理 ^ h TTP。允许通过HTTP进行XMPP通信。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wrd3cFiB-1596851893978)(upload://nwF1nG31qYcVADZj0dOkAsqSztK.png)]

然后向下滚动配置文件。要允许从XMPP客户端注册帐户, allow_registration 说实话。请注意,在执行此操作之前,您需要了解如何防止滥用。如果您不熟悉XMPP,则可能不希望允许XMPP客户注册自己的帐户。

allow_registration = true;

韵律仅允许加密通信,并在接下来的两行中显示。

c2s_require_encryption = true s2s_require_encryption = true

但是,您需要创建虚拟主机并安装TLS证书,以便可以对连接进行加密。默认情况下,Prosody只有一个虚拟主机localhost,如以下行所示。

VirtualHost “localhost”

创建另一个虚拟主机,例如 chat.example.com 。将以下行添加到此文件。

VirtualHost “chat.example.com”

保存并关闭文件。接下来,您需要从Let’s Encrypt获取并安装受信任的TLS证书。

步骤4:从“加密”获取可信的TLS证书

通过发出以下命令,从官方PPA在Ubuntu服务器上安装Let’s Encrypt客户端(certbot)。

sudo apt install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt install certbot

如果尚未运行Web服务器,则最好安装Web服务器(Apache或Nginx),因为在Web服务器上获取和安装TLS证书比使用任何其他方法都容易。我会的

如果要使用Apache Web服务器,则需要安装Apache插件。 (如果您的系统上尚未安装Apache Web服务器,则以下命令将安装它。)

sudo apt install python3-certbot-apache

如果要使用Nginx Web服务器,请安装Nginx插件。 (如果尚未在系统上安装Nginx Web服务器,则以下命令将安装它)。

sudo apt install python3-certbot-nginx

在Apache Web服务器上获取TLS证书

需要Apache虚拟主机 chat.example.com 在获取“让我们加密TLS”证书之前。创建一个虚拟主机文件。

sudo nano /etc/apache2/sites-available/prosody.conf

然后将以下文本粘贴到文件中:交换 chat.example.com 用实际的域名。不要忘记设置DNS A记录。

ServerName chat.example.com DocumentRoot /var/www/prosody

保存并关闭文件。接下来,创建webroot目录。

sudo mkdir /var/www/prosody

设置 www-data (Apache用户)webroot的所有者。

sudo chown www-data:www-data /var/www/prosody -R

启用此虚拟主机。

sudo a2ensite prosody.conf

重新加载Apache以使更改生效。

sudo systemctl reload apache2

创建并启用虚拟主机后,运行以下命令以获取并安装Let’s Encrypt TLS证书。

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com

将红色文本替换为您的实际数据。显示以下内容,这表示已成功检索证书。您还可以查看存储证书的目录。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YOW6UR7q-1596851893991)(upload://p3W4muoXRPxLcqs4pkFOQTw6N6j.png)]

在Nginx Web服务器上获取TLS证书

需要Nginx虚拟主机 chat.example.com 在获取“让我们加密TLS”证书之前。创建一个虚拟主机文件。

sudo nano /etc/nginx/conf.d/prosody.conf

然后将以下文本粘贴到文件中:交换 chat.example.com 用实际的域名。不要忘记设置DNS A记录。

server { listen 80; listen [::]:80; server_name chat.example.com; root /var/www/prosody/; location ~ /.well-known/acme-challenge { allow all; } }

保存并关闭文件。接下来,创建Web根目录。

sudo mkdir /var/www/prosody/

设置 www-data (Nginx用户)作为Web根目录的所有者。

sudo chown www-data:www-data /var/www/prosody -R

重新加载Nginx以使更改生效。

sudo systemctl reload nginx

创建并启用虚拟主机后,运行以下命令以获取并安装带有Nginx插件的Let’s Encrypt证书。

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com

显示以下内容,这表示已成功检索证书。您还可以查看存储证书的目录。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BNiVRtbu-1596851893996)(upload://p3W4muoXRPxLcqs4pkFOQTw6N6j.png)]

步骤5:在Prosody上安装TLS证书

编辑主配置文件。

sudo nano /etc/prosody/prosody.cfg.lua

转到Prosody虚拟主机并添加TLS证书和**文件。

ssl = { key = “/etc/letsencrypt/live/chat.example.com/privkey.pem”; certificate = “/etc/letsencrypt/live/chat.example.com/fullchain.pem”; }

像这样:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WPyReg94-1596851893998)(upload://uP17U5ljW4o5n8J7gUiBbHikMaY.png)]

保存并关闭文件。 Prosody XMPP服务器 prosody 对于用户,您需要使韵律用户能够使用以下命令读取TLS证书和**文件:

sudo setfacl -R -m u:prosody:rx /etc/letsencrypt/

步骤6:建立使用者帐户

可以使用以下命令创建Prosody XMPP服务器的用户帐户。系统将提示您输入密码。

sudo prosodyctl adduser [email protected]

要更改密码,

sudo prosodyctl passwd [email protected]

步骤7:重新启动韵律

通过运行以下命令来检查配置文件的语法:

sudo prosodyctl check config

如果语法正确,请重新启动Prosody,以使更改生效。

sudo systemctl restart prosody

步骤8:配置XMPP客户端

本教程使用Pidgin Instant Messenger作为XMPP客户端。移情是您可以使用的另一个客户端。您可以通过运行以下命令将其安装在Ubuntu桌面上:

sudo apt install pidgin sudo apt install empathy

首次启动时,您需要向Pidgin添加一个帐户。请点击 新增 按钮

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZufuG1dY-1596851894000)(upload://6CYsxV6OR5vpBZ6GCKFNAhCjU7x.png)]

然后从协议列表中选择XMPP,然后输入您的用户名,域和密码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-00tDXQ7y-1596851894002)(upload://zwnatuXNob7o7zrWndbv18LqRT1.png)]

命中 新增 单击按钮登录。

设置BOSH

如前所述,BOSH允许在Web浏览器中使用基于HTTP的XMPP。例如,Jitsi Meet视频会议软件使用BOSH将Prosody集成到网页中,从而使参与者可以在参加在线视频会议的同时参加文本聊天。

如果启用了BOSH模块,则Prosody配置文件( /etc/prosody/prosody.cfg.lua ),将以下两行添加到配置文件的末尾:

consider_bosh_secure = true; cross_domain_bosh = true; https_ssl = { certificate = “/etc/letsencrypt/live/chat.example.com/fullchain.pem”; key = “/etc/letsencrypt/live/chat.example.com/privkey.pem”; }

其中:

  • 第一行强制建立安全的HTTPS连接。
  • 第二行在BOSH响应中添加一个COR标头,以允许来自任何域的请求。
  • https_ssl参数指定BOSH服务的TLS证书和**文件。

保存并关闭文件。然后重新启动Prosody。

sudo systemctl restart prosody

如果在Ubuntu服务器上启用了UFW防火墙,则需要使用以下命令打开端口5280和5281:

sudo ufw allow 5280,5281/tcp

完成本教程后,BOSH端点将在以下地址可用:港口 5280 对于纯文本HTTP,端口 5281 对于HTTPS。

http://chat.example.com:5280/http-bind

https://chat.example.com:5281/http-bind.

BOSH端点是客户端用于通过HTTP连接到XMPP服务器的URL。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WJDaBWMG-1596851894003)(upload://kJQ7PjkLGNKrs73y1eIRY1flB1P.png)]

多用户聊天室

要启用MUC(多用户聊天),请将以下行添加到您的Prosody配置文件中:交换 conference.example.com 与您最喜欢的子域。

Component “conference.example.com” “muc” restrict_room_creation = “admin”

在第二行,只有管理员可以创建房间。要为XMPP服务器定义管理员,首先 sudo prosodyctl adduser 上面的命令。然后将该帐户添加到配置文件 admin {...} 诸如以下部分:

admins = { “[email protected]”, “[email protected]” }

通过运行以下命令来检查配置文件的语法:

sudo prosodyctl check config

如果语法正确,请重新启动Prosody,以使更改生效。

sudo systemctl restart prosody

故障排除

Prosody的主要日志文件是 /var/log/prosody/prosody.log 。还有一个错误日志 /var/log/prosody/prosody.err 。如果Prosody无法正常工作,请检查错误日志。

TLS证书自动更新

您可以创建Cron作业以自动续订TLS证书。打开root用户的crontab文件。

sudo crontab -e

如果您使用Apache Web服务器,请在文件末尾添加以下行:

@daily certbot renew --quiet && systemctl reload postfix dovecot apache2

如果您使用的是Nginx Web服务器,请添加以下行:

@daily certbot renew --quiet && systemctl reload postfix dovecot nginx

必须重新加载Postfix,Dovecot和Web服务器,这些程序才能使用新的证书和私钥。

总结

就是这样!我们希望本教程可以帮助您在Ubuntu 18.04上安装和配置Prosody XMPP Server。与往常一样,如果这篇文章很有帮助,请注册我们的免费新闻通讯以获取提示和技巧????

Prosody是用Lua编写的免费开源XMPP服务器。快速,轻巧。 XMPP是即时消息传递的最佳协议。本教程介绍了如何在Ubuntu 18.04上安装和配置Prosody XMPP Server。完成本教程后,您将拥有自己的聊天服务器。
5分钟带你了解Prosody XMPP Server