Volumio + Jellyfin on Dell 3050: Full Dockerized Setup Guide
We transformed a single Dell OptiPlex 3050 into a modular home server running Volumio and Jellyfin side‑by‑side in Docker. This guide documents every step — from SSD mounting to delayed boot — so others can replicate the setup.
Why We Did It
- Budget constraints: Couldn’t afford a second device, so we consolidated services on one machine.
- Future‑proofing: 32 GB RAM + multiple SSDs gave us headroom for Dockerized services.
- Modularity: Each SSD dedicated to a role:
• NVMe 512 GB → Music library (fast reads for Volumio)
• SATA M.2 512 GB → Movies (Jellyfin indexing)
• 2.5" SSD 256 GB → Volumio OS + Docker configs - Reliability: Persistent mounts, SMB access, and delayed boot ensured smooth startup.
Step‑by‑Step Setup
Dell OptiPlex 3050 hardware
└── Volumio OS (Debian base)
├── Volumio service stack (native)
└── Docker engine
└── Jellyfin container
- Base System Prep
- Installed Debian/Ubuntu minimal.
- Held back Node.js to avoid breaking Volumio backend:
sudo apt-mark hold nodejs
- Docker Installation
- Installed Docker + Docker Compose:
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
sudo apt install docker-compose -y - Held Docker packages:
sudo apt-mark hold docker-ce docker-ce-cli containerd.io
- Delayed Boot for Volumio
- Created systemd override:
sudo systemctl edit volumio.service
Added:
[Service]
ExecStartPre=/bin/sleep 30
- Jellyfin Installation
-
Docker Compose service:
jellyfin:
image: jellyfin/jellyfin:latest
volumes:
- /srv/media:/media
- /srv/jellyfin/config:/config
- /srv/jellyfin/cache:/cache
ports:
- 8096:8096
restart: unless-stopped -
Pointed Jellyfin to /media/music and /media/movies.
- SSD Setup & Mounting Points
We divided drives by role to avoid I/O contention:
-
NVMe 512 GB (Music Library)
sudo mkdir -p /media/music
fstab:
UUID= /media/music ext4 defaults,noatime 0 2 -
SATA M.2 512 GB (Movies Library)
sudo mkdir -p /media/movies
fstab:
UUID= /media/movies ext4 defaults,noatime 0 2 -
2.5" SSD 256 GB (Volumio OS + Docker)
Root (/) hosts OS, /srv for configs:
UUID= /srv ext4 defaults,noatime 0 2
Best Practices:
- Use UUIDs instead of device names.
- Add noatime to reduce SSD wear.
- Label drives (MUSIC_NVME, MOVIES_SATA, VOL_OS).
- Test with sudo mount -a before reboot.
- SMB File Management
-
Installed Samba:
sudo apt install samba -
Configured /etc/samba/smb.conf:
[Music]
path = /media/music
read only = no
guest ok = yes[Movies]
path = /media/movies
read only = no
guest ok = yes
- Volumio in Docker
-
Docker Compose service:
volumio:
image: volumio/volumio:latest
privileged: true
network_mode: “host”
volumes:
- /srv/volumio/config:/data
- /media/music:/music:ro
restart: unless-stopped
Result
- Jellyfin indexes movies + music, streams via DLNA.
- Volumio plays music bit‑perfectly via DAC.
- SMB allows easy file management.
- Docker orchestration keeps services modular.
- Delayed boot + fstab ensures reliability.
- Been using this for more than 2 weeks now and haven’t had any issues at all.
Lessons Learned
- Holding Node.js + Docker versions prevents dependency breakage.
- SSD separation avoids I/O bottlenecks.
- Volumio in host mode is essential for audio fidelity.
- A single Dell 3050 can handle multiple services if RAM + SSDs are allocated wisely.
Community Note
This setup shows how resourcefulness and modular design can turn one budget‑friendly machine into a resilient home media hub.
And hey — maybe @patrickkfkan could even make a plugin out of this someday… hehehe ![]()