infra/old/cluster/aprs/README.md

1.9 KiB

APRS.me Deployment

APRS.me amateur radio tracking application deployed on k3s cluster at 204.110.191.2.

Architecture

  • Application: 2-replica StatefulSet with Erlang clustering
  • Database: PostgreSQL 17 with PostGIS extension (100GB Longhorn storage)
  • Cache: Redis for job queuing and caching
  • Ingress: Traefik with cert-manager for SSL (Let's Encrypt)
  • Access: https://aprs.me (DNS points to 204.110.191.3)

Prerequisites

  1. GitHub container registry access for ghcr.io/aprsme/aprs.me:latest
    • Create a GitHub personal access token with read:packages scope
    • Run: ./create-image-pull-secret.sh <username> <token>

Deployment

# Deploy everything
./deploy.sh

# Check status
kubectl get pods -n aprs
kubectl get certificate -n aprs
kubectl get ingressroute -n aprs

Files

  • namespace.yaml - APRS namespace
  • postgres-secret-secure.yaml - PostgreSQL credentials (secured)
  • postgres-deployment.yaml - PostgreSQL 17 with PostGIS StatefulSet
  • redis.yaml - Redis cache deployment
  • aprs-secret-secure.yaml - Application secrets (secured)
  • aprs-configmap.yaml - APRS configuration (callsign, server, etc.)
  • aprs-rbac.yaml - Service account and permissions for clustering
  • aprs-statefulset-with-pullsecret.yaml - APRS application StatefulSet
  • aprs-ingressroute.yaml - Traefik ingress with SSL certificate
  • create-image-pull-secret.sh - Helper to create GitHub image pull secret
  • deploy.sh - Deployment script

Configuration

  • APRS Callsign: W5ISP-2
  • APRS Server: dallas.aprs2.net:10152
  • Filter: r/33/-96/1000000000000
  • Passcode: 15748
  • LoadBalancer IP: 10.0.101.32 (internal)
  • Public Access: https://aprs.me via Traefik at 204.110.191.3

Secrets

All passwords have been generated securely and stored in *-secure.yaml files. Do not commit these files to version control.