Initial commit
This commit is contained in:
		
							
								
								
									
										152
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,152 @@ | |||||||
|  | In progress :bomb: | ||||||
|  |  | ||||||
|  | # Docker-based Chat Gateway (Alpine Linux + Bitlbee + ZNC) | ||||||
|  |  | ||||||
|  | This project is a combination of an IM to IRC service (Bitlbee) and | ||||||
|  | an IRC bouncer (ZNC) which keeps you connected, managing away status | ||||||
|  | and message buffers for all your devices. | ||||||
|  |  | ||||||
|  | This is a setup I have personally used and evolved slightly since around 2008 | ||||||
|  | (of course back then without Docker or the improved message playback features). | ||||||
|  | The setup has served me well and continues to be useful. This repository is a | ||||||
|  | way to document my configuration as well as to share what I've learned and get | ||||||
|  | feedback. | ||||||
|  |  | ||||||
|  | Feel free to fork and modify for your own needs or issue a pull request! | ||||||
|  |  | ||||||
|  | ## Bitlbee | ||||||
|  |  | ||||||
|  | Bitlbee is an IRC server that acts as a bridge between the IRC protocol | ||||||
|  | and the protocols used by various instant messaging systemms | ||||||
|  | (Jabber/XMPP, Facebook, AIM/Oscar, Yahoo, MSN, ICQ, Skype, etc). | ||||||
|  |  | ||||||
|  | The Docker image for Bitlbee that is part of this project includes | ||||||
|  | additional packages for Facebook chat and OTR that you may optionally | ||||||
|  | use. | ||||||
|  |  | ||||||
|  | ### Building Docker Image | ||||||
|  |  | ||||||
|  | In the `bitlbee/` directory of this repository, run: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | docker build \ | ||||||
|  |   --rm=true \ | ||||||
|  |   --tag=bitlbee \ | ||||||
|  |   . | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Starting | ||||||
|  |  | ||||||
|  | Create a directory for storing your user `data/`, then run: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | docker run \ | ||||||
|  |   -d \ | ||||||
|  |   -v /etc/localtime:/etc/localtime:ro \ | ||||||
|  |   -v $PWD/data:/var/lib/bitlbee:rw \ | ||||||
|  |   --name=bitlbee \ | ||||||
|  |   --restart=always \ | ||||||
|  |   bitlbee | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Configuring | ||||||
|  |  | ||||||
|  | Once you add the Bitlbee server in ZNC (below), you will be prompted | ||||||
|  | to register and configure. If you want to bypass ZNC and connect | ||||||
|  | to Bitlbee directly, simply add a port mapping using `-p 6667:6667` | ||||||
|  | when running the container, then connect up your client to the Docker | ||||||
|  | host. | ||||||
|  |  | ||||||
|  | In addition to the settings you can configure from your IRC client, | ||||||
|  | there are some global options that you may set in | ||||||
|  | `/etc/bitlbee/bitlbee.conf` as well as the message in | ||||||
|  | `/etc/bitlbee/motd`. You can copy these locally into a `config` | ||||||
|  | directory and map with `-v $PWD/config:/etc/bitlbee:ro`. | ||||||
|  |  | ||||||
|  | ### Commands Quickstart | ||||||
|  |  | ||||||
|  | TODO: Setting up user, adding networks, basic management | ||||||
|  |  | ||||||
|  | ## ZNC | ||||||
|  |  | ||||||
|  | ZNC is an IRC bouncer, a system designed to keep you always connected to | ||||||
|  | your favorite IRC servers. I'm primarily using it with Bitlbee (above) | ||||||
|  | and Slack's IRC gateway. Other networks include places like Freenode, | ||||||
|  | Gitter, DALNet, EFNet, etc. | ||||||
|  |  | ||||||
|  | ZNC includes a variety of useful plugins for keeping track of missed | ||||||
|  | messages, automatically setting away status, perforing commands with | ||||||
|  | ChanServ/NickServ, watching for particular words or phrases, and many more. | ||||||
|  |  | ||||||
|  | The Docker image for ZNC that is part of this project includes additional | ||||||
|  | 3rd party modules for push notifications with the Palaver iOS client (below), | ||||||
|  | partial message buffer playback, and separate buffers for your differnet clients. | ||||||
|  |  | ||||||
|  | ### Building Docker Image | ||||||
|  |  | ||||||
|  | In the `znc/` directory of this repository, run: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | docker build \ | ||||||
|  |   --rm=true \ | ||||||
|  |   --tag=znc \ | ||||||
|  |   . | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Configuring ZNC | ||||||
|  |  | ||||||
|  | Create a directory for storing your `data/`, then run: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | docker run \ | ||||||
|  |   -it \ | ||||||
|  |   --rm=true \ | ||||||
|  |   -v $PWD/data:/var/lib/znc \ | ||||||
|  |   znc --makeconf | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Starting | ||||||
|  |  | ||||||
|  | Replace 6697 with whatever port you configured in the previous step. | ||||||
|  | Symlinking localtime is optional, but was required for my IRC and system | ||||||
|  | timestamps to sync up. The `--link` command connects with a running | ||||||
|  | Bitlbee container, with this you can use the hostname `bitlbee` when | ||||||
|  | adding a new IRC server. | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | docker run \ | ||||||
|  |   -d \ | ||||||
|  |   -p 6697:6697 \ | ||||||
|  |   -v /etc/localtime:/etc/localtime:ro \ | ||||||
|  |   -v $PWD/data:/var/lib/znc \ | ||||||
|  |   --name=znc \ | ||||||
|  |   --restart=always \ | ||||||
|  |   --link=bitlbee:bitlbee \ | ||||||
|  |   znc | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Commands Quickstart | ||||||
|  |  | ||||||
|  | TODO: Setup user, add network for Bitlbee, load and configure modules | ||||||
|  |  | ||||||
|  | ## Client Recommendations | ||||||
|  |  | ||||||
|  | ### OSX | ||||||
|  |  | ||||||
|  | Recommendation: Textual | ||||||
|  |  | ||||||
|  | ### iOS | ||||||
|  |  | ||||||
|  | Recommendation: Palaver, followed by Mobile Colloquy | ||||||
|  |  | ||||||
|  | ### Windows | ||||||
|  |  | ||||||
|  | Recommendation: HexChat | ||||||
|  |  | ||||||
|  | ### Android | ||||||
|  |  | ||||||
|  | Recommendation: HoloIRC | ||||||
|  |  | ||||||
|  | ### Linux | ||||||
|  |  | ||||||
|  | Recommendation: Communi | ||||||
							
								
								
									
										19
									
								
								bitlbee/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								bitlbee/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | # | ||||||
|  | # Bitlbee (w/ Facebook and OTR) + Alpine Linux | ||||||
|  | # | ||||||
|  |  | ||||||
|  | FROM alpine:edge | ||||||
|  |  | ||||||
|  | RUN echo "@testing http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && \ | ||||||
|  |     apk --update add ca-certificates bitlbee@testing bitlbee-facebook@testing bitlbee-otr@testing && \ | ||||||
|  |     adduser -h /var/lib/bitlbee -s /sbin/nologin -DH bitlbee && \ | ||||||
|  |     chown -R bitlbee:bitlbee /var/lib/bitlbee && \ | ||||||
|  |     touch /var/run/bitlbee.pid && \ | ||||||
|  |     chown bitlbee:bitlbee /var/run/bitlbee.pid && \ | ||||||
|  |     rm -rf /var/cache/apk/* | ||||||
|  |  | ||||||
|  | USER bitlbee | ||||||
|  | VOLUME ["/var/lib/bitlbee"] | ||||||
|  | EXPOSE 6667/tcp | ||||||
|  |  | ||||||
|  | ENTRYPOINT ["bitlbee", "-F", "-n"] | ||||||
							
								
								
									
										37
									
								
								znc/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								znc/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | # | ||||||
|  | # ZNC + Alpine Linux | ||||||
|  | # Includes znc-palaver, znc-playback, znc-clientbuffer plugins | ||||||
|  | # | ||||||
|  |  | ||||||
|  | FROM alpine:edge | ||||||
|  |  | ||||||
|  | ENV PALAVER_URL https://github.com/Palaver/znc-palaver/archive/master.zip | ||||||
|  | ENV PLAYBACK_URL https://github.com/jpnurmi/znc-playback/archive/master.zip | ||||||
|  | ENV CLIENTBUFFER_URL https://github.com/jpnurmi/znc-clientbuffer/archive/master.zip | ||||||
|  |  | ||||||
|  | # Append if desired: znc-modperl znc-modpython znc-modtcl | ||||||
|  | RUN apk --update add build-base openssl-dev wget unzip ca-certificates znc znc-dev znc-extra && \ | ||||||
|  |     chown znc:znc /var/lib/znc && \ | ||||||
|  |     wget -O /tmp/palaver.zip $PALAVER_URL && \ | ||||||
|  |     unzip /tmp/palaver.zip -d /tmp && \ | ||||||
|  |     cd /tmp/znc-palaver-master && \ | ||||||
|  |     make && \ | ||||||
|  |     cp palaver.so /usr/lib/znc/ && \ | ||||||
|  |     wget -O /tmp/playback.zip $PLAYBACK_URL && \ | ||||||
|  |     unzip /tmp/playback.zip -d /tmp && \ | ||||||
|  |     cd /tmp/znc-playback-master && \ | ||||||
|  |     znc-buildmod playback.cpp && \ | ||||||
|  |     cp playback.so /usr/lib/znc && \ | ||||||
|  |     wget -O /tmp/clientbuffer.zip $CLIENTBUFFER_URL && \ | ||||||
|  |     unzip /tmp/clientbuffer.zip -d /tmp && \ | ||||||
|  |     cd /tmp/znc-clientbuffer-master && \ | ||||||
|  |     znc-buildmod clientbuffer.cpp && \ | ||||||
|  |     cp clientbuffer.so /usr/lib/znc && \ | ||||||
|  |     rm -rf /tmp/* && \ | ||||||
|  |     apk del build-base openssl-dev wget unzip znc-dev && \ | ||||||
|  |     rm -rf /var/cache/apk/* | ||||||
|  |  | ||||||
|  | USER znc | ||||||
|  | VOLUME ["/var/lib/znc"] | ||||||
|  |  | ||||||
|  | ENTRYPOINT ["znc", "--foreground", "--datadir=/var/lib/znc"] | ||||||
		Reference in New Issue
	
	Block a user