How to Install Emby on a Raspberry Pi

Today we are going to take a look at how to install Emby on a Raspberry Pi.

Emby is a home media server that will allow you to stream your digital media to client devices. I am going to assume that if you’re going to run Emby on a Raspberry Pi, you probably will be hooking up an external hard drive with your media on it. If you’re storing that data on a PC or NAS, you probably want to just run Emby there (if it’s an option). Please feel free to check out my tutorial on how to install Emby on a Synology NAS if you think you’d prefer running it there!

You can also check out our tutorial on how to run Jellyfin on a Raspberry Pi if you’d prefer running the open-source program!

1. Setup Instructions

1. First, we will create a directory where the external hard drive can mount when our Raspberry Pi is booted.

sudo mkdir /mnt/media

2. Run the command below to get the list of hard drives that we have attached to our Raspberry Pi.

sudo fdisk -l

3. Find your external hard drive in this list. Run the command below and copy the UUID of the external hard drive.

sudo blkid

emby raspberry pi

4. Run this command to edit the fstab file.

sudo nano /etc/fstab

5. Enter in the line exactly as shown (add your UUID and drive type) below and write out the file by pressing CTRL + O when complete. NOTE: You must “tab” between each block of text (each space below). It is also important to note that the “nofail” parameter allows you to boot the Raspberry Pi without the external hard drive attached – if this doesn’t exist, your Raspberry Pi will throw an error when the external hard drive is not connected and won’t boot.

UUID=[the UUID of your external hard drive] /mnt/media [drive type] defaults,nofail 0 2

emby raspberry pi

6. Reboot your Raspberry Pi. When it boots back up, navigate to the folder that we mounted using the commands below and you should see your external hard drives files.

cd /mnt/media

emby raspberry pi

7. We will be installing this application using Docker and Portainer. If you haven’t installed Docker and Portainer on your Raspberry Pi yet, please follow these instructions first.

8. Select Volumes and then Add Volume.

emby raspberry pi

9. Give the volume the name Emby and then Create the volume.

emby raspberry pi

10. Take note of the Emby Mount Point as we will need it for our next step.

Emby rpi1.2

11. Select Stacks and then Add Stack.

Emby rpi1

12. Give the container a name and then paste the stack below. Be sure to update the items in pink to reflect your time zone and the local path to your config folder and media folders. Feel free to change the PUID and GUID if you’d like, but these are the default values for the pi user. Select Deploy the stack when you’re finished.

version: "2.1"
services:
emby:
  image: ghcr.io/linuxserver/emby
  container_name: emby
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=America/Detroit
  volumes:
    - /var/lib/docker/volumes/Emby/_data:/config
    - /mnt/media:/Media
  ports:
    - 8096:8096
    - 8920:8920
    restart: unless-stopped

Emby rpi8

13. The container will create. When it’s finished, you can access it by navigating to the IP address of your Raspberry Pi and port 8096.

http://[RASPBERRY_PI_IP]:8096

2. Emby Setup

1. Select your preferred language and proceed.

Emby7

2. Create your user account.

Emby8

3. Select your Content Type, then add the folders that we mapped earlier. You will have to do this for each content type.

Emby rpi5

4. Select your Metadata language.

Emby10

5. Configure Remote Access as you’d like. I normally disable UPnP as I don’t want any applications opening ports on my router.

Emby15

6. Accept the Terms of Service, then Finish! You will be able to login using the username and password you defined, and your media library will start to sync!

7. If you’d like to expose this outside of your local network, please check out my tutorial on Nginx Proxy Manager which will allow you to securely expose it!

3. Conclusion - Emby Raspberry Pi

Setting up Emby on a Raspberry Pi isn’t too bad thanks to Portainer. Installing stacks is super easy thanks to stacks, and Emby is a great alternative to Plex and Jellyfin.

Thanks for checking out the tutorial. If you have any questions, feel free to leave them in the comments!

This Post Has 4 Comments

  1. Followed every step, but it can never seem to connect to emby using the pi IP :8096

    Any ideas?

    1. Are you using a firewall by any chance? If you are, did you allow traffic on port 8096?

  2. i can’t connect to emby using ip pi: 8096
    Container is Running
    please can I have some advice I’m desperate
    I also tried to open TCP port 8096 from the router

    This is Container LOGS:

    [s6-init] making user provided files available at /var/run/s6/etc…exited 0.
    [s6-init] ensuring user provided files have correct perms…exited 0.
    [fix-attrs.d] applying ownership & permissions fixes…
    [fix-attrs.d] done.
    [cont-init.d] executing container initialization scripts…
    [cont-init.d] 01-envfile: executing…
    [cont-init.d] 01-envfile: exited 0.
    [cont-init.d] 10-adduser: executing…
    ————————————-
    _ ()
    | | ___ _ __
    | | / __| | | / \
    | | \__ \ | | | () |
    |_| |___/ |_| \__/
    Brought to you by linuxserver.io
    ————————————-
    To support LSIO projects visit:
    https://www.linuxserver.io/donate/
    ————————————-
    GID/UID
    ————————————-
    User uid: 1000
    User gid: 1000
    ————————————-
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    Your DockerHost is most likely running an outdated version of libseccomp
    To fix this, please visit https://docs.linuxserver.io/faq#libseccomp
    Some apps might not behave correctly without this
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    [cont-init.d] 10-adduser: exited 0.
    [cont-init.d] 30-config: executing…
    [cont-init.d] 30-config: exited 0.
    [cont-init.d] 40-gid-video: executing…
    [cont-init.d] 40-gid-video: exited 0.
    [cont-init.d] 90-custom-folders: executing…
    [cont-init.d] 90-custom-folders: exited 0.
    [cont-init.d] 99-custom-scripts: executing…
    [custom-init] no custom files found exiting…
    [cont-init.d] 99-custom-scripts: exited 0.
    [cont-init.d] done.
    [services.d] starting services
    [services.d] done.

    1. When you created the container, did you specify for it to use port 8096? I am wondering if it handed it a different port number.

Leave a Reply

Close Menu