Initial commit
This commit is contained in:
commit
10cbaf23b5
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"]
|
Loading…
Reference in New Issue
Block a user