Wavelog logo

Wavelog

Self-hosted logbook for amateur radio operators

Alternative to: qrz logbook, club log, hamrs


Wavelog is a self-hosted PHP application that lets radio amateurs log their contacts (QSOs) from any web browser with an internet connection. An enhanced fork of Cloudlog, it supports rig control data transfer via the companion WavelogGate tool, multi-language translations, and club/multi-operator logging. It's built with CodeIgniter and Bootstrap and runs on a classic PHP/MySQL stack.

Wavelog Docker Compose example

Self-host Wavelog on your own server, homelab, or VPS starting from this Docker Compose example. It runs Wavelog in Docker containers using the official ghcr.io/wavelog/wavelog:latest, mariadb:latest images, with persistent volumes and automatic restarts preconfigured. Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.

services:
  wavelog:
    image: ghcr.io/wavelog/wavelog:latest
    depends_on:
      db:
        condition: service_healthy
    restart: unless-stopped
    environment:
      # Marks the runtime as a Docker install; Wavelog reads its config from application/config/docker.
      CI_ENV: "docker"
    volumes:
      - config:/var/www/html/application/config/docker
      - uploads:/var/www/html/uploads
      - userdata:/var/www/html/userdata

  db:
    image: mariadb:latest
    restart: unless-stopped
    environment:
      # Generate a random root password on first init; the app connects with the dedicated user below.
      MARIADB_RANDOM_ROOT_PASSWORD: "yes"
      # Name of the database Wavelog stores its logbook in. Enter this in the first-run web installer.
      MARIADB_DATABASE: "wavelog"
      # Database user Wavelog connects as. Enter this in the first-run web installer.
      MARIADB_USER: "wavelog"
      # Password for the database user. Change this and enter the same value in the web installer.
      MARIADB_PASSWORD: "wavelog"
    volumes:
      - dbdata:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  config:
  uploads:
  userdata:
  dbdata:

Prefer a managed setup? WinterFlow installs, configures, and updates Wavelog for you using this same Docker Compose configuration.