Skip to content

Requirements and deployment

Run the service

Choose a versioned image from ghcr.io/hamlink-canada/register-dns_server when a release is available. To run this checkout before an image is published, follow Build an image and use rpt-dnsserver:local below.

Replace the broker address and node domain with your own:

IMAGE=rpt-dnsserver:local

docker run -d --name rpt-dns --restart unless-stopped \
  --publish 5054:5054/udp \
  --publish 5054:5054/tcp \
  --env RPT_KAFKA__BOOTSTRAP=kafka.example.org:9092 \
  --env RPT_KAFKA__TOPIC=rpt.registrations \
  --env RPT_DOMAIN=nodes.example.org \
  "$IMAGE"

The Kafka topic must contain compatible registration messages. The broker addresses advertised by Kafka must also be reachable from the container.

The example listens on host port 5054 so you can try it without replacing an existing DNS server. To serve standard DNS traffic, publish host port 53 to container port 5054 for both UDP and TCP. Configure your resolver to send queries for the chosen node domain to this service.

Build an image

From the service repository checkout, with Docker Buildx and Python 3.13+ installed:

PROTOBUF_REV=$(python3 scripts/dependency.py)
docker buildx build --load \
  --build-context "rpt_protobuf=https://github.com/Hamlink-Canada/rpt_protobuf.git#${PROTOBUF_REV}" \
  --tag rpt-dnsserver:local .

This fetches the public protobuf dependency from its main branch. CI resolves that branch once per run and uses the same revision for its test and image jobs. The image runs as UID/GID 10001 and starts rpt-dns. Configuration files mounted into the container must be readable by that user.