Sign inSign up

ggilman/openhamclock

By ggilman

Updated 4 months ago

Headless OpenHamClock. Lightweight (~50MB), multi-arch (AMD64/ARM64), & secure.

Image
Internet of things
Web servers
Monitoring & observability
1

10K+

ggilman/openhamclock repository overview

OpenHamClock (Docker)

A lightweight, headless Docker container for OpenHamClock. Source Code: github.com/ggilman/openhamclock

OpenHamClock is a modern, modular amateur radio dashboard built with React. It displays real-time space weather, band conditions, DX cluster spots, POTA activations, propagation predictions, and more.

This image is optimized for server environments (NAS, Raspberry Pi, Docker Swarm). It strips out the heavy Electron desktop components, running the raw Node.js server directly.

Size: ~50MB (vs ~400MB original)
Architecture: Multi-arch (ARM64/AMD64)
Security: Non-root user, minimal dependencies.

Features

  • Headless: Runs the web server only. Access via browser.
  • Tiny Footprint: Aggressively pruned to remove Electron and build tools.
  • Swarm Ready: Configured for Docker Swarm and Traefik.
  • Secure: Runs as a non-root user (hamuser, UID 1000).

Deployment

Standard Deployment (Docker Compose)

Save this as docker-compose.yml:

version: '3.8'

services:
  openhamclock:
    image: ggilman/openhamclock:latest
    container_name: openhamclock
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - TZ=America/Chicago
      - CALLSIGN=N0CALL # Optional: Set your callsign
      - LOCATOR=FN31    # Optional: Set your grid square
    volumes:
      - ./config:/config

Run:

docker-compose up -d
Simple Deployment (Docker CLI)

If you prefer to run it with a single command:

docker run -d \
  --name openhamclock \
  --restart unless-stopped \
  -p 3000:3000 \
  -e TZ=America/Chicago \
  -e CALLSIGN=N0CALL \
  -e LOCATOR=FN31 \
  -v $(pwd)/config:/config \
  ggilman/openhamclock:latest

Access at: http://localhost:3000

Docker Swarm Deployment

This image is designed for Swarm. It respects standard environment variables for Traefik integration.

version: '3.8'

services:
  openhamclock:
    image: ggilman/openhamclock:latest
    networks:
      - traefik_proxy
    environment:
      - TZ=America/Chicago
      - CALLSIGN=N0CALL
    volumes:
      - /mnt/nas/docker/openhamclock:/config
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
      labels:
        - "traefik.enable=true"
        - "traefik.docker.network=traefik_proxy"
        - "traefik.http.routers.openhamclock.rule=Host(`openhamclock.yourdomain.com`)"
        - "traefik.http.routers.openhamclock.entrypoints=websecure"
        - "traefik.http.services.openhamclock.loadbalancer.server.port=3000"

networks:
  traefik_proxy:
    external: true

Configuration

The application can be configured via Environment Variables.

VariableDefaultDescription
CALLSIGNN0CALLYour station callsign.
LOCATORAB12Your Grid Square (e.g., FN31).
TZUTCTimezone (e.g., America/Chicago).
OPENWEATHER_API_KEYOptional: API key for local weather.
SHOW_SATELLITEStrueShow satellite tracking.
SHOW_POTAtrueShow Parks on the Air.
THEMEdarkdark, light, legacy, retro
User Permissions

This container runs as a fixed non-root user (hamuser) with UID 1000 and GID 1000. The PUID and PGID environment variables are not supported in this lightweight version. Ensure your mounted volumes are writable by UID 1000.

Persistent Storage

Mount a volume to /config to persist settings.

Important Note on Permissions: Because this container runs as a non-root user (UID 1000) for security, the host folder must be writable by user 1000.

If your container crashes immediately with "Permission Denied," run this on your host machine:

mkdir -p /path/to/config
sudo chown -R 1000:1000 /path/to/config

Development / Building

To build this image locally:

# Clone the repo
git clone https://github.com/ggilman/openhamclock.git
cd openhamclock

# Build
docker build -t openhamclock:local .

Credits

License

MIT License. See LICENSE file for details.

Tag summary

Content type

Image

Digest

sha256:c883e567d

Size

54.9 MB

Last updated

7 months ago

docker pull ggilman/openhamclock