Skip to content

DefinitelyN0tMe/Resonance

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Resonance

Self-hosted music streaming on Raspberry Pi 4, powered by Navidrome and Kubernetes (k3s).

Architecture

                    ┌─────────────────────────────────────────┐
                    │              Raspberry Pi 4              │
  Internet          │                  k3s                     │
     │              │                                         │
     ▼              │   ┌─────────────────────────────────┐   │
 Cloudflare ────────┼──▶│     namespace: resonance         │   │
  Tunnel            │   │                                  │   │
music.ytchop.com    │   │   ┌──────────┐                   │   │
                    │   │   │Navidrome │◀── /data (SQLite) │   │
                    │   │   │  :4533   │    1TB OS SSD     │   │
                    │   │   │          │                    │   │
                    │   │   │          │◀── /music (read)   │   │
                    │   │   └──────────┘    2TB Music SSD  │   │
                    │   └─────────────────────────────────┘   │
                    └─────────────────────────────────────────┘
                                       ▲
                              Subsonic API (HTTPS)
                                       │
                    ┌──────────────────┼──────────────────┐
                    │                  │                   │
               Substreamer        Feishin            Web UI
              (iOS/Android)      (Desktop)       (Browser)

Tech Stack

Component Technology
Hardware Raspberry Pi 4 (8GB RAM), 1TB OS SSD, 2TB Music SSD
OS Ubuntu 24.04 (arm64)
Orchestration k3s (lightweight Kubernetes)
Application Navidrome (music streaming server)
Audio Format Opus (~128-160kbps via yt-dlp)
Ingress Cloudflare Tunnel (music.ytchop.com)
Monitoring Prometheus + Grafana (existing cluster stack)

Storage Layout

Path Device Purpose
/mnt/music 2TB SSD (USB) Music library — mounted read-only to Navidrome
/data/navidrome 1TB OS SSD Navidrome SQLite DB, cache, transcoding temp

Deployment

Prerequisites

  • k3s cluster running on Raspberry Pi
  • 2TB SSD mounted at /mnt/music with music organized as:
    /mnt/music/
      Artist Name/
        Album Name (Year)/
          01 - Track Name.opus
          cover.jpg
    
  • Cloudflare Tunnel configured

Deploy

kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/navidrome.yaml
kubectl apply -f k8s/service.yaml

Verify

kubectl get pods -n resonance
curl http://localhost:30093

On first access, create an admin user via the web UI. Signup is automatically disabled after the first user is created.

Access

Client URL / Config
Web UI https://music.ytchop.com
Mobile (Substreamer) Server: https://music.ytchop.com, Subsonic API
Desktop (Feishin) Server: https://music.ytchop.com, Subsonic API

Network

  • External: Cloudflare Tunnel → music.ytchop.com → NodePort 30093
  • Internal: http://192.168.1.64:30093
  • USB throughput: ~30 MB/s (USB 2.0 hub) — sufficient for audio streaming

About

Self-hosted music streaming on Raspberry Pi 4, powered by Navidrome and Kubernetes (k3s).

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors