Guides / Docker

OwnMedia with Docker

For a Linux machine or any NAS that runs Docker Compose. On Synology, follow the step-by-step Synology guide instead.

1. Jellyfin

Make folders for Jellyfin’s settings and cache, and one for photos backed up from phones. Then a docker-compose.yml; replace the paths left of the colon with yours:

services:
  jellyfin:
    image: jellyfin/jellyfin:12.1
    container_name: jellyfin
    # The host's own network: phones on the Wi-Fi find the server by themselves ("Add your server").
    network_mode: host
    restart: unless-stopped
    volumes:
      - /srv/jellyfin/config:/config
      - /srv/jellyfin/cache:/cache
      - /srv/media/video:/media/video:ro
      - /srv/media/music:/media/music:ro
      - /srv/media/photos/OwnMedia:/media/photos

Start it with docker compose up -d. :ro keeps your movies and music read-only; the photo folder must be writable, because backups from the phone go there.

OwnMedia’s plugin needs Jellyfin 12.1 or newer. network_mode: host lets phones find the server on your Wi-Fi (UDP port 7359). If a firewall is on, allow TCP 8096 and UDP 7359.

2. First setup

Open http://<server address>:8096 in a browser, create a user (name and password for the phone) and add libraries: Movies → /media/video, Music → /media/music, and Photos → /media/photos if you like.

3. The OwnMedia plugin

In Jellyfin: Dashboard → Plugins → Manage Repositories → +, name OwnMedia, URL:

https://raw.githubusercontent.com/3dengineering01-star/Homeplayer/main/jellyfin-repo/manifest.json

Then Plugins → filter All → Homeplay Backup → Install, and restart Jellyfin from the main Dashboard page. In the plugin’s settings, set the photo folder to /media/photos.

4. The phone

In OwnMedia, tap Add your server; on the same Wi-Fi it is found by itself, otherwise type <server address>:8096. A page with a QR code for phones: http://<server address>:8096/Homeplay/Phone.

5. Access from the internet

Install Tailscale on the host, sign in, and open Jellyfin’s port with Funnel:

sudo tailscale funnel --bg 8096

It prints the address, https://<machine>.<your tailnet>.ts.net/. The first time, Tailscale may ask you to enable Funnel in the browser. Only port 8096 is opened; nothing changes on the router. Then in OwnMedia: the server’s menu ⋮ → Share with friends → I have an address already → this address.

Already reach the server another way, with your own domain and reverse proxy or a VPN? Use that address instead. More in Away from home and friends.

The app for friends

Nothing to set up: invite pages and the QR code send friends to download the newest app from ownmedia.app. This needs the plugin 1.8 or newer; Jellyfin offers the update under Dashboard → Plugins.

Removing OwnMedia

  1. docker compose down in the folder with the compose file, then docker image rm jellyfin/jellyfin:12.1.
  2. Turn off access from the internet: sudo tailscale funnel --https=443 off. Stopping Jellyfin doesn’t do it: Funnel stays on in Tailscale itself (the address opens, with an error) until you turn it off or remove Tailscale and the machine from the Machines list on the Tailscale website.
  3. Delete Jellyfin’s config and cache folders. Your movies, music and photo backups aren’t touched.
  4. In OwnMedia on the phone: the server’s menu ⋮ → remove the server.