Prosody
Prosody is a small and fast XMPP (Jabber) server, written in Lua. You can use it in combination with Conversations for your Android phone, to provide your own federated instant messaging. It also hosts multiple XMPP virtual host domains.
Install
- UPDATE October 2017
- Version 0.10 was released, which includes Carbons, MAM and Letsencrypt renewal built-in.
On Ubuntu, you can install it like this:
sudo apt-get install prosody
Edit the config /etc/prosody/prosody.cfg.lua to make sure you have BOSH support, group rosters and compression enabled, you probably want self-registration off, and if you want persistent message history across all (compatible) devices (like Hangouts)[1] you'll need to enable message archive management (MAM) as well:
modules_enabled = { "compression"; "carbons"; "mam"; "bosh"; "groups"; } allow_registration = false; ...
Configure a virtual host for your domain
Set up a virtual host config for your domain in /etc/prosody/conf.avail/yourdomain.cfg.lua
VirtualHost "yourdomain.com" enabled = true ssl = { key = "/etc/ssl/private/yourdomain.com.key"; certificate = "/etc/ssl/certs/yourdomain.com.crt"; -- Ix nay on the SSL-ay (Heartbleed, Poodle, etc.) options = {"no_sslv2", "no_sslv3", "no_ticket", "no_compression", "cipher_server_preference", "single_dh_use", "single_ecdh_use"}; } -- optional, for IRC-style chatrooms Component "conference.yourdomain.com" "muc" restrict_room_creation = "local" -- optional, for file transfers Component "chatproxy.yourdomain.com" "proxy65"
Then enable the config:
ln -s /etc/prosody/conf.avail/yourdomain.cfg /etc/prosody/conf.d/
DNS configuration
You need your chat, conference, and chatproxy subdomains to be A records (not CNAME), and you also need 4 SRV records and a TXT record, thus:
_jabber._tcp.yourdomain.com = SRV: 0 5 5269 chat.yourdomain.com _xmpp-client._tcp.yourdomain.com = SRV: 0 5 5222 chat.yourdomain.com _xmpp-server._tcp.yourdomain.com = SRV: 0 5 5269 chat.yourdomain.com _xmpp-server._tcp.conference.yourdomain.com = SRV: 0 5 5269 chat.yourdomain.com TXT: _xmpp-client-xbosh=https://chat.yourdomain.com/http-bind/
Add some users
Add yourself with
sudo prosodyctl adduser yourusername@yourdomain.com
Enabling sane multi-client support
Message archive management should really use a database:
storage = { archive2 = "sql"; -- mam_archive requires SQL storage. } sql = { driver = "SQLite3", database = "prosody.db" } default_archive_policy = true; max_archive_query_results = 100;
PostgreSQL and MySQL are also supported. For SQL to work, you will need to install additional dependencies, for example:
apt install lua-dbi-sqlite lua-dbi-postgresql
Links
- ↑ Then don't use Pidgin; the developers appear to be asleep at the wheel, e.g. Ticket #15508 Support for XEP-0280. That said, here's how to patch it.
More documentation at