Coffee & Beer

Rants and Ravings of a new dad/SRE/DevOps/Skier/Cyclist

Fun With a Holiday Raspberry Pi 3b

For a while now (a couple years), I’ve run an old Dell server in my basement as a media server/download box/general shell host. It was pretty great to have around, 16 cores, plenty of RAM, 2TB of RAID5 storage, etc. But…it was mostly idle, I’m sure ate a good deal of power, was loud, etc. When my wife and I moved this fall, it obviously got powered down and with a newborn on the way, getting it up and running in the new house was very very far on the back burner. For any media serving needs/downloads, I could after all always just fire up Plex/SabNZBD/Sickbeard etc on my laptop.

But, as we started watching some media more and more in short bursts (midnight feedings!), the whole “open the laptop, wait for Plex to start backup/become discoverable, wait for the Roku Plex client to find it, etc etc” became a bit of an annoyance. So, enter the RaspberryPI 3.

I ordered a CanaKit of Amazon, and pretty quickly was happy with my purchase. The pi, with an attached 2TB usb hard-drive is all i need these days!

The setup currently is:

  • Download infra: https://github.com/sjoeboo/rpi_docker
    • SabnzBD (docker)
    • Sickbeard (docker)
    • Couchpotato (docker)
  • Media server:
    • Plex (native, for now)
  • Misc:
    • Raspotify (with a speaker attached == easy Spotify Connect speaker!)
    • Samba (r/w for the home to the usb storage just in case)

The docker-compose to bring up the download infra is pretty simple:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
version: '2.0'
services:
  sabnzbd:
    container_name: sabnzbd
    image: rpi_docker_sabnzbd:latest
    ports:
      - 8080:8080
    volumes:
      - /mnt/storage/configs/docker/sabnzbd:/config
      - /mnt/storage/Downloads:/data
    networks:
      main:
        aliases:
          - sabnzbd
  sickbeard:
    container_name: sickbeard
    image: rpi_docker_sickbeard:latest
    ports:
      - 8081:8081
    volumes:
      - /mnt/storage/configs/docker/sickbeard:/config
      - /mnt/storage/:/data
    networks:
      main:
        aliases:
          - sickbeard
  couchpotato:
    container_name: couchpotato
    image: rpi_docker_couchpotato
    ports:
      - 5050:5050
    volumes:
      - /mnt/storage/configs/docker/couchpotato:/config
      - /mnt/storage:/data
    networks:
      main:
        aliases:
          - couchpotato
networks:
  main:

Basically I create a simple network each container will live on. all data/configs live on the usb storage (so the PI os is basically throw away). Some gotcha, hicups I hit:

  • Filesystem: At first I went ExFAT on the usb drive, which uses FUSE, but there was a HUGE overhead there, and Plex was almost unusable (which may have been combined with the next point on this list). Going back to native EXT4 gave a huge speed boost and let me have the RPI cpu back.
  • Plex Transcoding: The PI isn’t really that powerful, so transcoding didn’t seem to be going too well Luckilly, telling my clients to just play videos in their native resolutions solved that. No transcoding and the PI is more than capable to stream 720pHD video off the usb drive and to the network. Now i never get buffering issues on the Plex clients (a roku 3 and a roku tv)
  • Wifi: I was a little sad, but not surprised, that the PI came with 2.4Ghz wifi, no 5Ghz. Oh well. I ended up just stashing the whole thing right behind my router plugged directly in anyways w/ the Cat5e (100MB/s) ethernet.

New Start

Decided for a fresh start, and maybe just maybe get in the habit of keeping this more updated with the sort of things I’m working on both professionally and personally. hopefully I’ll do better than last time I’ve tried to rededicate myself to this task.