Setting Up ZNC with Docker
ZNC is an IRC bouncer, which is a program that acts as a middleman between your IRC client and any servers you connect to. This provides a number of benefits, the most notable of which is chat history while your client is closed. This guide is how I set up
I have a Raspberry Pi connected to my network that I use as a DNS server with Pi-hole🔗 and nginx-proxy🔗, as well as a host for several web-based services. Each service is a Docker container, which I manage through a single Docker Compose file. To install ZNC, I simply add a container to the Compose file.
version: "3"
# https://github.com/pi-hole/docker-pi-hole/blob/master/README.md
services:
nginx-proxy:
image: nginxproxy/nginx-proxy
ports:
- '80:80'
environment:
DEFAULT_HOST: pihole.home.yequari.com
volumes:
- '/var/run/docker.sock:/tmp/docker.sock'
restart: always
pihole:
image: pihole/pihole:latest
ports:
- '53:53/tcp'
- '53:53/udp'
- '8053:80/tcp'
volumes:
- './etc-pihole:/etc/pihole'
- './etc-dnsmasq.d:/etc/dnsmasq.d'
cap_add:
- NET_ADMIN
environment:
ServerIP: 192.168.1.130
PROXY_LOCATION: pihole
VIRTUAL_HOST: pihole.home.yequari.com
VIRTUAL_PORT: 80
extra_hosts:
# Resolve to nothing domains (terminate connection)
# - 'nw2master.bioware.com nwn2.master.gamespy.com:0.0.0.0'
# LAN hostnames for other docker containers using nginx-proxy
- 'home.yequari.com:192.168.1.130'
- 'pihole pihole.home.yequari.com:192.168.1.130'
- 'jellyfin jellyfin.home.yequari.com:192.168.1.130'
- 'freshrss freshrss.home.yequari.com:192.168.1.130'
- 'znc znc.home.yequari.com:192.168.1.130'
restart: always
## entries for other services omitted
znc:
image: lscr.io/linuxserver/znc:latest
container_name: znc
environment:
- PUID=1000
- PGID=1000
- TZ=America/Phoenix
- PROXY_LOCATION=znc
- VIRTUAL_HOST=znc.home.yequari.com
- VIRTUAL_PORT=6501
volumes:
- /mnt/hdisk1/znc:/config
ports:
- 6501:6501
- 6697:6697
restart: unless-stopped
The VIRTUAL_HOST
domain name will redirect only to the web interface on port 6501. I also reserved port 6697 for IRC itself. While it is possible to reverse proxy the IRC port to use the domain name as well, it was more trouble that it was worth, so I just used the Raspberry Pi’s local IP address to connect my IRC client. Though the official ZNC Docker image should work fine, I used the Linuxserver image🔗, simply because I used their Jellyfin image previously due to its added support for Raspberry Pi systems.
Once that was done, I logged into the web interface (default login is admin/admin) to create a new user and connect it to my preferred IRC network. These steps are pretty straightforward and well-documented, so I’ll skip over them.
Now it’s finally time to connect the IRC client to the ZNC server. I created a connection as normal, but used the ZNC server’s IP address instead of the domain name. Double check port is correct (6697 in my case). Finally, I needed to provide a password of the format <username>/<network>:<password>
, using the information I provided ZNC when setting up my user. For example yequari/OFTC:supersecretpassword
. Note that <network>
refers to the name you give the network in ZNC, not the URL. I was then able to connect and enjoy all the benefits of an IRC bouncer.