| .. | ||
| aprs-configmap.yaml | ||
| aprs-ingressroute.yaml | ||
| aprs-rbac.yaml | ||
| aprs-secret-secure.yaml | ||
| aprs-statefulset-with-pullsecret.yaml | ||
| create-image-pull-secret.sh | ||
| deploy.sh | ||
| namespace.yaml | ||
| README.md | ||
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
- GitHub container registry access for
ghcr.io/aprsme/aprs.me:latest- Create a GitHub personal access token with
read:packagesscope - Run:
./create-image-pull-secret.sh <username> <token>
- Create a GitHub personal access token with
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 namespacepostgres-secret-secure.yaml- PostgreSQL credentials (secured)postgres-deployment.yaml- PostgreSQL 17 with PostGIS StatefulSetredis.yaml- Redis cache deploymentaprs-secret-secure.yaml- Application secrets (secured)aprs-configmap.yaml- APRS configuration (callsign, server, etc.)aprs-rbac.yaml- Service account and permissions for clusteringaprs-statefulset-with-pullsecret.yaml- APRS application StatefulSetaprs-ingressroute.yaml- Traefik ingress with SSL certificatecreate-image-pull-secret.sh- Helper to create GitHub image pull secretdeploy.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.