KALNET MVP Deployment Guide
What You’re Building Tonight
KALNET is a private home network service mesh for Kalex. Think of it as a personal cloud where every room can access media, storage, automation, and games—all self-hosted on your ArchLinux machine.Architecture Overview
Services
| Service | Purpose | Port | Status |
|---|---|---|---|
| Jellyfin | Media streaming (Sims, Crazy Taxi, etc) | 8096 | Primary |
| n8n | Workflow automation & integrations | 5678 | Primary |
| Samba | NAS file sharing (SMB/CIFS) | 139, 445 | Primary |
| KALNET Discovery | Service registry & health checks | 8080 | New |
Data Flow
- Media Streaming: Device → Jellyfin (8096) → NAS Storage
- Automation: Webhooks/Triggers → n8n (5678) → External APIs
- File Access: Device (Samba client) → Samba (445) → NAS Storage
- Service Discovery: Device → KALNET Discovery (8080) → Service Status/URLs
Prerequisites
- Docker and Docker Compose installed on your ArchLinux machine
- Network access from your ArchLinux machine to Hyperoptic (already have this)
- At least 20GB free disk space for NAS storage + media
- At least 4GB RAM available
Step 1: Prepare Your Files
- Create a directory for KALNET:
-
Copy these files into that directory:
docker-compose.ymlmain.goDockerfile.discoverysamba-config.conf
- Verify the files are in place:
Step 2: Build the Discovery Service
The Go discovery service compiles inside Docker, but let’s verify it builds:Successfully tagged kalnet-kalnet-discovery:latest
If this fails, check:
- Docker daemon is running:
docker ps - Go is available in Alpine: Check Dockerfile.discovery line 1
Step 3: Start KALNET
Step 4: Verify Services Are Running
Check container status:
STATUS: Up
Test each service:
Jellyfin (Media Streaming)
n8n (Workflow Automation)
KALNET Discovery
Service Discovery Endpoint
Check logs:
Step 5: Access Services from Other Devices
From any device on your network, use the IP of your ArchLinux machine:- Find your ArchLinux machine’s IP:
- Access from another device (replace
192.168.1.100with actual IP):
- Jellyfin:
http://192.168.1.100:8096 - n8n:
http://192.168.1.100:5678 - NAS Storage (Samba):
smb://192.168.1.100/storage(or use file manager GUI) - Discovery API:
http://192.168.1.100:8080/discover
Step 6: Initial Configuration
Jellyfin Setup
- Go to
http://localhost:8096on the ArchLinux machine - Complete the setup wizard
- Add media library:
- Go to Settings → Metadata > Libraries
- Add library pointing to
/media(which maps to NAS storage in the container) - Add your game ISOs/files
Samba / NAS Access
From a Mac:n8n Setup
- Go to
http://localhost:5678 - Create admin account
- Build your first workflow (e.g., notify on file changes in NAS)
Validation Checklist
Before you celebrate, verify:- All 4 Docker containers running:
docker-compose ps - Jellyfin responds:
curl http://localhost:8096/web/ - n8n responds:
curl http://localhost:5678/ - Discovery API works:
curl http://localhost:8080/discover - Can access from another device on LAN
- Samba shares visible in network browser
- At least one video file accessible via Jellyfin
Troubleshooting
Port already in use
Container crashes
Can’t connect from other devices
Samba not mounting
Next Steps (Beyond Tonight)
- Add Reverse Proxy (Traefik): Single entry point with TLS
- Private Comms (Matrix/Synapse): End-to-end encrypted family chat
- Custom Code Deployment: GitOps pipeline with git webhooks
- Game Streaming: Sunshine/Moonlight for streaming Sims from any room
- Monitoring Dashboard: Prometheus + Grafana for service health
Useful Commands
Notes for Your ADHD Brain
- Visual clarity: All services exposed on predictable ports (8096, 5678, 139/445, 8080)
- Step-by-step: Follow the numbered steps in order
- Validation at each step: Curl commands confirm things work
- Boxes and arrows: Architecture diagram at top shows data flow
- Minimal tonight: Just get it running; advanced features come later