Building an XMPP Server – Part 1

I’m sick and tired of using a limited, rickety, old IRC server to collaborate with my colleagues. As a side project, I decided to build an XMPP server with the ultimate goal of being able to run a chat room, see status updates of friends, start IM conversations with Google Talk members, run a web client so that I can get to chat without installing software, and send instant messages that would automatically be uploaded to my twitter account (follow JamesonNetworks!). For this project I would need to assemble an XMPP server and do some fancy scripting to get my info to twitter.

What is XMPP?
XMPP is a standard that defines how chat clients can talk to each other. From XMPP.org:

The Extensible Messaging and Presence Protocol (XMPP) is an open technology for real-time communication, which powers a wide range of applications including instant messaging, presence, multi-party chat, voice and video calls, collaboration, lightweight middleware, content syndication, and generalized routing of XML data. The technology pages provide more information about the various XMPP “building blocks”. Several books about Jabber/XMPP technologies are available, as well.

The core technology behind XMPP was invented by Jeremie Miller in 1998, refined in the Jabber open-source community in 1999 and 2000, and formalized by the IETF in 2002 and 2003, resulting in publication of the XMPP RFCs in 2004 (see the history page for more details).

Choosing an XMPP Server:
The first step in the process was to choose what software backend would be used to set up the XMPP server. Several variations of XMPP servers exist. A full list can be found here: XMPP Servers. I’ve worked with an organization that used OpenFire as their XMPP server and it seemed to work pretty well. It did have to be rebooted once a week because of a memory leak issue (or something), but it was constantly under heavy load with about 500-600 users. Since I was already familiar with administering OpenFire, I tried it first. Unfortunately, I had trouble getting the database set up and gave up on setting up an OpenFire server after an hour.

After reading several reviews, I chose ejabberd. Ejabberd can be downloaded from the previous link, but it also has the advantage of being located in the Ubuntu repositories. I created a Ubuntu Server and loaded ejabberd using “sudo apt-get install ejabberd”. Couldn’t be easier! And using a virtual machine to build the server means I can install it at customer locations without building a new server every single time, it will just need to be reconfigured once it is spun up.

Stay tuned for the next part: Configuration