Run your own chat proxy for $5/mo

February 12, 2014 | 2 Minute Read

The Components

  • Bitlbee to bridge XMPP and IRC.
  • Camper Van to bridge Campfire and IRC.
  • ZNC to proxy them and keep me connected.
  • Palaver to connect via iOS.
  • Palaver ZNC plugin for push notifications to Palaver.
  • Irssi to connect via just about anything else.
  • Digital Ocean for $5/mo hosting.
  • Docker to simplify running everything.
  • An SSL cert for some amount of security.

Starting It

I created a set of docker images for each of the three core services: znc, bitlbee, and camper van. The Bitlbee and Camper Van images expose their ports so that the ZNC image can link them in. Only the ZNC port is bound to the public interface. Thus all connections must go through ZNC.

Configuration files and SSL certificates are stored on the host machine and mounted into the Docker images so they can be easily backed up or archived and taken somewhere else.

The initialization script creates the required directories, populate them with the necessary configuration files, and pull the docker images. The start script runs and links the Docker images.

After signing up with Digital Ocean add your public key (if you don't, they'll create a random password and email it to you). In the control panel create a new Droplet based on the Docker/Ubuntu application image. SSH into it and run the following:

git clone https://github.com/sprsquish/dockerfiles
cd dockerfiles
./initialize [username] [znc pw] [campfire pw] [bitlbee pw]

Now you should be able to connect to [droplet ip]:6668 using SSL. ZNC uses the password to determine which network you want to connect to. The format is [user]/[network]:[network password]. For instance, to connect to bitlbee you'd use myusername/bitlbee:mybitlbeepassword.

Next Steps

I'd suggest getting a domain and signed SSL certificate. ZNC's documentation describe how to format the pem file. Once created upload it to /etc/state/znc/znc.pem and reload the configuration (in IRC: /msg *status rehash). If your client can, have it verify the SSL certificate. Some clients may do this automatically and wont work with a self-signed certificate.

From here you can connect through ZNC to any IRC server. Take a look at the list of ZNC modules that can be loaded up, search GitHub for more modules, or write your own.