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。完成本教程后,您将拥有自己的聊天服务器。