Radio logs with Wavelog and Podman Compose

Until recently I logged my QSOs with “QRZ Logbook” at QRZ.com. This worked fine for me - QRZ’s logbook has some good features and acts as a common hub, along with Logbook of the World, for confirmed QSOs. I have earlier journal entries where I describe my logging practices with QRZ.com.

Here’s a photo of my shack with my laptop running Ubuntu and Wavelog. I’ve been doing a lot of straight key CW operations lately.

I moved to Wavelog because I wanted something a little more sophisticated. I wanted a logger that:

  • Integration with my home radio for automated logging of frequency, mode and power
  • Quick lookup of call signs that showed past QSOs
  • Quick lookup that showed QRZ.com profile photos (I wanted to see who I was talking to)

Wavelog has the above features and more.

My updated home logging workflow

Here is my updated logging workflow. I have only added Wavelog to my workflow because it has a more modern user interface. Although it may seem super complicated, the QRZ and LOTW integrations are all automatic. I’m going to continue using them as an online backup and for online QSO confirmations.

Wavelog screenshots

Here’s Wavelog’s landing page which shows a map and listing of my recent QSOs.

Here’s the “Live QSO” view which is one of the major reasons I adopted Wavelog. I like seeing the QRZ profile pic as well as any past QSOs.

Here’s the “Live QSO” view waiting for me to lookup a call sign. It shows my recent QSOs. The green bar on the center, right of the screen indicates a live connection to my ICOM 7300 along with the frequency, mode and power settings.

Wavelog configuration

I installed and configured Wavelog using the containerized (read: Docker) distribution running in Podman Compose. As recommended in the Wavelog documentation my Wavelog compose file provisions and connects the following containers

  • MariaDB as a relational database
  • Watchtower for automated updates
  • Caddy for a secure connection (SSL/TLS)
  • Wavelog for amateur radio contact logging

Then, on my Linux laptop outside of Podman, I installed and configured FLRig and WavelogGate for automatic logging of my radio’s frequency, mode and power.

FLRig

FLRig is for CAT control between my laptop and my ICOM 7300 via a USB cable. This online blog post by KN4FMV helped me resolve some initial issues with my install.

WaveLogGate

WaveLogGate acts as an adapter between FLRig and the Wavelog API. WaveLogGate requires a secure connection (HTTPS). That’s why I added Caddy to my podman compose file. Caddy creates a self-signed local certificate and presents a secure connection to the local network which WaveLogGate can use.

Configuration details

Installing and configuring I figured some readers may want to see my configuration files so here they are.

My podman compose file:

# podman compose up -d
# note that podman requires `docker.io` as a prefix for docker hosted images
services:
  wavelog-db:
    image: docker.io/mariadb:11.3
    container_name: wavelog-db
    environment:
      MARIADB_RANDOM_ROOT_PASSWORD: yes
      MARIADB_DATABASE: wavelog
      MARIADB_USER: wavelog
      MARIADB_PASSWORD: wavelog # <- Insert a strong password here
    volumes:
      - wavelog-dbdata:/var/lib/mysql
    restart: unless-stopped

  wavelog-main:
    container_name: wavelog-main
    image: ghcr.io/wavelog/wavelog:latest
    depends_on:
      - wavelog-db
    environment:
      CI_ENV: docker
    volumes:
      - wavelog-config:/var/www/html/application/config/docker
      - wavelog-uploads:/var/www/html/uploads
      - wavelog-userdata:/var/www/html/userdata
    ports:
      - "8086:80"
    restart: unless-stopped

  watchtower:
    image: docker.io/containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  # The Caddy server container.
  caddy:
    # https://hub.docker.com/_/caddy
    image: docker.io/caddy:alpine
    container_name: reverse-proxy
    restart: unless-stopped
    # Map the app container exposed port to the host port.
    ports:
      - 443:443
      - 2019:2019
    volumes:
      - caddy-data:/data
      - caddy-config:/config
    # Caddy config
      - $PWD/Caddyfile:/etc/caddy/Caddyfile
    # Caddy certificate authority (CA)
      - $PWD/certificate-authority:/data/caddy/pki/authorities/local

# sudo cp certificate-authority/intermediate.crt /usr/local/share/ca-certificates/
# sudo update-ca-certificates

volumes:
  wavelog-dbdata:
  wavelog-uploads:
  wavelog-userdata:
  wavelog-config:
  caddy-data:
  caddy-config:

Here’s my Caddy file:

#--------------------------------------------------------------------------
# Caddy configuration
# https://caddyserver.com/docs/caddyfile/options
#--------------------------------------------------------------------------

{
  debug
  local_certs
  auto_https disable_redirects
  admin 0.0.0.0:2019
}

#--------------------------------------------------------------------------
# Reverse proxy
# https://caddyserver.com/docs/caddyfile/directives/reverse_proxy
#--------------------------------------------------------------------------

# HTTPS site block
localhost:443 {
  tls internal
  reverse_proxy wavelog-main:80
}

Going forward

There are many things to improve in my configuration as well as this writeup.

You’ll likely need more information that just the files above to get this all working in your system. There were a couple small details I needed to work out like making my browser and OS recognize the self-signed certificate create by Caddy and setting up Linux user permissions to connect to my radio via the USB device.

If you have any questions about my setup or the software integrations or configurations above please reach out to me.