How to Install Plex Media Server on Ubuntu 18.04 LTS Server or Desktop

This tutorial will be showing you how to install Plex media server on Ubuntu 18.04 LTS server/desktop. Plex is a free piece of software that allows you to organize your movies, TV shows, music and photos in one beautiful interface and stream those media files on your PC, tablet, phone, TV, Roku, etc on the network or over the Internet. Plex can be installed on Linux, FreeBSD, MacOS, Windows and various NAS systems.

Install Plex Media Server on Ubuntu 18.04

First, go to Plex server download page, select Linux and choose Ubuntu 14.04 or newer.

plex ubuntu 18.04

If you are going to install Plex on a headless Ubuntu 18.04 server, then you can go to your browser’s download history, then copy the Plex download link and use wget to download Plex from command line like below.

wget https://downloads.plex.tv/plex-media-server/1.13.5.5332-21ab172de/plexmediaserver_1.13.5.5332-21ab172de_amd64.deb

Once the Plex deb package is downloaded, cd to the download directory. For example, my Plex is downloaded to the Downloads directory under Home, so I run the following command. The tilde (~) represents home directory.

cd ~/Downloads

On Debian based Linux distros (Ubuntu, Linux Mint, etc), dpkg  is the standard command line tool to install deb packages. So run the following command to install the Plex deb package.

sudo dpkg -i plexmediaserver_1.13.5.5332-21ab172de_amd64.deb

The -i is short for --install. Note that when you type the following

sudo dpkg -i plex

You can press the Tab key, which will autocomplete the filename.

plex ubuntu install

Now Plex media server is installed. We can check its status with:

systemctl status plexmediaserver

As you can see, it’s running on my Ubuntu 18.04 system. (Press q to take back control of terminal.)

ubuntu server plex guide

If Plex media server isn’t running, you can start it with:

sudo systemctl start plexmediaserver

Enable Plex Repository

By enabling the official Plex repo, you can update Plex on Ubuntu with apt package manager. The Plex deb package ships with a source list file. To see a list of files installed from a package, run dpkg with -L flag.

dpkg -L plexmediaserver

Open this file with the following command.

sudo nano /etc/apt/sources.list.d/plexmediaserver.list

By default, its content is commented out. Uncomment the last line. (Remove the beginning # symbol).

plex ubuntu repo

Then save and close the file. To save a file in Nano text editor, press Ctrl+O, the press Enter to confirm. To exit, press Ctrl+X.  After that, run the following command to import Plex public key to apt package manager.

wget -q https://downloads.plex.tv/plex-keys/PlexSign.key -O - | sudo apt-key add -

Now update software repository index.

sudo apt update

If you see the following message.

W: Conflicting distribution: https://downloads.plex.tv/repo/deb public InRelease (expected public but got )

You can safely ignore it because it’s a warning, not an error. Plex repository is working fine for Ubuntu 16.04. You will see this message if you use Ubuntu 18.04. You need to wait for Plex developers to fix this problem. If you don’t like to see this message, then disable the Plex repository. You can re-enable this repo when a new version of Plex comes out.

Plex Media Server Initial Setup

If you run the following command:

sudo netstat -lnpt | grep Plex

You can see that Plex media server is listening on 0.0.0.0:32400 and 127.0.0.1:32401.

install plex media server ubuntu ppa

The web-based management interface is available at port 32400. The first time you configure Plex, you must visit Plex via 127.0.0.1:32400/web or localhost:32400/web. If you installed Plex on your Ubuntu 18.04 desktop, then you can search Plex Media Manager in your application menu. It will take you to Plex web interface, which in turn will take you to https://app.plex.tv because you need to sign in with a plex.tv account.

plex on ubuntu server

Note that if Plex is installed on a remote Ubuntu 18.04 server, you need to set up a SSH tunnel by executing the following command on your local computer. Replace 12.34.56.78 with the IP address of the remote Ubuntu server.

ssh 12.34.56.78 -L 8888:localhost:32400

Then you can access Plex web interface via the following URL.

http://localhost:8888/web

This HTTP request will be redirected to http://localhost:32400/web on the remote server through SSH tunnel. This SSH tunnel is only needed for the initial setup. After the initial setup, you can access Plex web interface via server-ip-address:32400. Replace server-ip-address with your real server IP address.

Once signed in, you will be redirected to localhost:32400 to do the initial setup.

install plex media server ubuntu 18.04

On the next screen, enter a name for your Plex server. Make sure Allow me to access my media outside my home is checked. Then click Next.

plex ubuntu 18.04 repository

Now you can add libraries. Click Add Library button.

plex ubuntu 18.04 server

Select a library type, then click browse for media folder button to add your media folders.

plex media server ubuntu 18.04 setup guide

Note that the plex user needs to have read and execute permission on your media directories. For example, my 2T external hard drive is mounted under /media/linuxbabe/ , which is owned by root. Users not in group root can’t access it, so I run the following command to give user plex read and execute permission. (I do not recommend changing ownership with chown or chgrp command. Using the setfacl command will suffice.)

sudo setfacl -m u:plex:rx /media/linuxbabe/

You may also need to assign permission on individual media directories like below.

sudo setfacl -m u:plex:rx /media/linuxbabe/directory-name

It can be tempting to add the recursive flag (-R), which gives plex read and execute permission on every file and sub-directory on the drive.

sudo setfacl -R -m u:plex:rx /media/linuxbabe/

If your external hard drive is only used for storing media files, then you can do so, but if you have sensitive files on the external hard drive, don’t do it.

Once you finish adding your media folders, click Next and then click Done.  You can always add more libraries later.

Redo the Initial Setup

If you made a mistake in the initial setup, you can delete the Preferences.xml file and start it over.

sudo rm /var/lib/plexmediaserver/Library/Application\ Support/Plex\ Media\ Server/Preferences.xml

sudo systemctl restart plexmediaserver

Now visit localhost:32400/web again. Plex will tell you there’s an unclaimed server. Click claim it now.

Create Nginx Reverse Proxy

If you don’t have a real domain name, I recommend going to NameCheap to buy one. The price is low and they give whois privacy protection free for life.

If you prefer to use a domain name rather than typing http://localhost:32400 to access your Plex media server, then you need to set up a reverse proxy. We can use Nginx for this purpose. Install Nginx from the default Ubuntu software repository.

sudo apt install nginx

Then create a server block file for Plex.

sudo nano /etc/nginx/conf.d/plex.conf

Put the following lines into the file. Replace plex.example.com with your own domain name. Remember to create an A record for the sub-domain in your DNS manager. (If your ISP gives you a dynamic IP address rather than a static IP address, you need to set up dynamic DNS and port forwarding, or use PageKite. )

server {
      listen 80;
      server_name plex.example.com;

      location / {
          proxy_pass http://127.0.0.1:32400;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

          #upgrade to WebSocket protocol when requested
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "Upgrade";
      }
}

Save and close this file. Then test Nginx configuration.

sudo nginx -t

If the test is successful, reload Nginx for the change to take effect.

sudo systemctl reload nginx

Now you can access Plex media server via plex.example.com.

Create Apache Reverse Proxy

If you prefer Apache over Nginx, then install Apache web server by using the following command.

sudo apt install apache2

To use Apache as a reverse proxy, we need to enable the proxy modules and the header module.

sudo a2enmod proxy proxy_http headers proxy_wstunnel

Then create a virtual host file for Plex.

sudo nano /etc/apache2/sites-available/plex.conf

Put the following configurations into the file. Replace plex.example.com with your actual domain name. Don’t forget to create DNS A record for this sub-domain.

<VirtualHost *:80>
   ServerName plex.example.com
   ErrorDocument 404 /404.html

   #HTTP proxy
   ProxyPass / http://localhost:32400/
   ProxyPassReverse / http://localhost:32400/

   #Websocket proxy
   SSLProxyEngine on
   <Location /:/websockets/notifications>
        ProxyPass wss://localhost:32400/:/websockets/notifications
        ProxyPassReverse wss://localhost:32400/:/websockets/notifications
   </Location>

   Header always unset X-Frame-Options
</VirtualHost>

Save and close the file. Then enable this virtual host.

sudo a2ensite plex.conf

Restart Apache

sudo systemctl restart apache2

Now you can access Plex media server using the domain name.

Enable HTTPS

To encrypt the HTTP traffic when you visit Plex server from outside, we can enable HTTPS by installing a free TLS certificate issued from Let’s Encrypt. Run the following command to install Let’s Encrypt client (certbot) on Ubuntu 18.04.

sudo apt install certbot

If you use Nginx, then you also need to install the Certbot Nginx plugin.

sudo apt install python3-certbot-nginx

Next, run the following command to obtain and install TLS certificate.

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d plex.example.com

If you use Apache, then you need to install the Certbot Apache plugin.

sudo apt install python3-certbot-apache

Next, run the following command to obtain and install TLS certificate.

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d plex.example.com

Where:

  • --nginx: Use the nginx plugin.
  • --apache: Use the Apache plugin.
  • --agree-tos: Agree to terms of service.
  • --redirect: Force HTTPS by 301 redirect.
  • --hsts: Add the Strict-Transport-Security header to every HTTP response. Forcing browser to always use TLS for the domain. Defends against SSL/TLS Stripping.
  • --staple-ocsp: Enables OCSP Stapling. A valid OCSP response is stapled to the certificate that the server offers during TLS.

The certificate should now be obtained and automatically installed.

home media server plex

And you can access Plex web interface via HTTPS.

install plex media server ubuntu 18.04 linux

How to Upgrade Plex on Ubuntu 18.04

When a new version of Plex media server comes out, you can upgrade it by executing the following commands.

sudo apt update

sudo apt upgrade

Then restart Plex.

sudo systemctl restart plexmediaserver

I hope this tutorial helped you install Plex media server on Ubuntu 18.04. As always, if you found this post useful, then subscribe to our free newsletter to get more tips and tricks. Take care 🙂

Rate this tutorial
[Total: 29 Average: 4.8]

45 Responses to “How to Install Plex Media Server on Ubuntu 18.04 LTS Server or Desktop

  • Jonathan
    1 year ago

    Nice guide! Very thorough!

    For those setting up a Plex server not on localhost, the statement “After the intitial setup, you can access Plex web interface in the usual way.” is a little confusing. It might be clearer to say “After the initial setup, you can access Plex web interface using port 32400 on the IP address of the remote machine.”

    Also, for some reason when I tried an SSH proxy on OSX with “ssh x.x.x.x -L 8888:localhost:32400” the browser refused my connection. I used this command on a Linux box instead:

    ssh -NL 8888:localhost:32400 x.x.x.x

  • Benoit
    1 year ago

    Thanks for this nice guide, it works. Just a question, I access it from Raspbian (on Rapsberry). Is there a way to avoid to open the SSH tunnel each time before accessing it? I mean a way to make it permanent.

    Thanks.

    • The SSH tunnel is only needed for the initial setup. After the initial setup, you can access Plex web interface via server-ip-address:32400. Replace server-ip-address with your real server IP address.

  • One of the most thorough guides I have seen for Plex setup. The SSH tunnel was really helpful for me, as I installed on a headless Ubuntu 18.04 setup.

    For those using Windows as a client, you can install the

    ssh

    command from “Git for Windows” (search on Google), and enabling the option to use Linux CLI tools in the Windows CMD prompt during setup.

    Thanks for the guide!

  • Super easy to follow and get up and running, thank you! I was afraid switching from Windows 7 as a media server to Ubuntu was going to be hard, several of your guides now have got me running smoothly!

  • Richard Ragon
    11 months ago

    Got a question on setfacl. I’m using a QNAP Nas server for ALL the files that my Plex is using.

    What permissions in file sharing do I need?

  • When I use the command

    ssh 12.34.56.78 -L 8888:localhost:32400

    on a local Linux Mint computer, I get the following output:

    [email protected]'s password:

    . Whether I use the password for the remote linux or the local linux, I continue to get permission denied. I’m very confused by this step. For the initial command, I am using the correct IP address for the remote machine as verified by ifconfig.

    • I realized that by adding the user to the command, it works.

      ssh [email protected] -L 8888:localhost:32400

      However, after performing this succesfully I am not able to load the webpage. After I try to load the webpage each time the command prompt shows

      channel 3: open failed: connect failed: Connection refused

      Any thoughts?

    • That usually means Plex media server isn’t running. Please check

      sudo systemctl status plexmediaserver

      And see if Plex is listening on port 32400.

      sudo netstat -lnpt | grep Plex
      • The plex server is running and listening to port 32400 on localhost and 32401 on 127.0.0.1

        I couldn’t access a different server I had installed but figured out I needed to allow the connection through ufw. I’ve ensured I have done that for Plex too.

  • Thanks for this! Plex was one of the last pieces of switching my server from Windows 10 to Linux. It’s been challenging, but the reduced footprint on my ageing HP Gen 7 Microserver has been greatly appreciated!

  • great tutorial.
    I do not understand why you install reverse proxy, it is already integrated, loging to plex.tv/web with your credential will show you all yours servers…

  • Whats the deal with updating?
    PMS is telling me there is a new version, so i did sudo apt update.
    I get the “Conflicting distribution….” error, as expected, but also NO new available version to update.

    So how do i update PMS to the recent new version?

    • The new version isn’t in the repository yet. If you can’t wait, you need to download the deb package from Plex download page and install it with dpkg, just like when you first install it. Then restart Plex.

  • Hi

    If you have this error when you try to connect to ssh 12.34.56.78 -L 8888:localhost:32400
    connect failed: Connection refused

    Open SSH connection with putty and add a tunnel SSH Proxy directly with this configuration : in Category – Connexion – SSH – Tunnels : Less empty “Port forwarding” and “Add new forwarded port”
    Source port = 1080
    Under Destination : empty description – Dynamic and Auto

    Click Add and vérify forwarded port to 1080D
    After save your configuration !

    After add proxy configuration 127.0.0.1 SOCKS 5 with 1080 port in your browser or windows proxy for exemple.

    Try to connect to 127.0.0.1:32400 or localhost:32401 !

  • I am using Linux Mint 19.1 Cinnamon and PMS Version 1.16.5.1554.
    2 weeks ago my PMS quit working, the app reported no server could be found, while I was using the server in PMS control panel to find out why I couldn’t access my media. I finally gave up and uninstalled PMS and purged my config data and started from scratch. Now the PMS control panel recognizes my server, but, I am unable to claim it. No matter how many times I click the button to claim it, it shows this message after a few minutes. “This server is unclaimed and not secure
    Claiming this server will associate it with your Plex account. This helps your devices find each other and helps keep your media safe.”

  • great tutorial! the detail of the ssh tunnel is amazing bro, thanks a lot

  • Hey, First of all I would like say thank you for this (and all) guides. I have only one small problem and I hope you can solve it. 🙂
    I’ve mounted my hdd to a “data” folder and it contains a movies and a series folder. I’ve installed qbittorrent and I download content in these folders.
    After a successful download I refresh my plex library and nothing happens. If I connect to my server and set the setfacl again for the folders, it works perfectly.
    My question is how can I avoid to set setfacl after every download (or new file/folder)?

    • Have you used the -R option in setfacl command? like below:

      sudo setfacl -R -m u:plex:rx /path/to/your/data/folder
    • You can create a cron job.

      sudo crontab -e

      Add the following line in the crontab file to automatically grant permissions every minute.

      * * * * * setfacl -R -m u:plex:rx /path/to/your/data/folder

      Save and close the file. And you are done.

      • Thank you so much! It looks like it’s gonna be solve my problem. 🙂

  • John Dowd
    2 months ago

    So I’ve been using plex for quite some time. But now it will not install on my remote server. I’ve followed your step up to “Plex Media Server Initial Setup” step where I must got the URL: http://localhost:8888/web. I am using a headless remote server so I perform the extra step where I redirect my localhost to the one on the remote server by executing your command: ssh 12.34.56.78 -L 8888:localhost:32400 (I do use the headless server’s IP address).

    This initiates the ssh connection with this error:

    “Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings”

    I’m assuming that this is a red herring since the connection does in fact work.

    I then go on to access the Plex web page with the URL: http://localhost:8888/web

    I get the following errors showing up on the console that I did the redirection with:

    [email protected]:~$ channel 3: open failed: connect failed: Connection refused
    channel 4: open failed: connect failed: Connection refused
    channel 3: open failed: connect failed: Connection refused
    channel 3: open failed: connect failed: Connection refused
    channel 4: open failed: connect failed: Connection refused
    channel 3: open failed: connect failed: Connection refused

    I’m hoping to get some guidance here.

    Thanks in advance for any help.

    Cheers!!

    • Make sure Plex media server is running. You can check its status with

      systemctl status plexmediaserver

      Sample output:

      ● plexmediaserver.service - Plex Media Server for Linux
         Loaded: loaded (/lib/systemd/system/plexmediaserver.service; enabled; vendor preset: enabled)
         Active: active (running) since Mon 2019-09-30 05:39:57 UTC; 10s ago
       Main PID: 9578 (sh)
          Tasks: 125 (limit: 1109)
      

      If Plex media server isn’t running, you can start it with:

      sudo systemctl start plexmediaserver
  • John Dowd
    2 months ago

    So here’s the output from that command. As I mentioned before, all of the instructions were followed and the system appears to be up.

    [email protected]:~$ systemctl status plexmediaserver
    ● plexmediaserver.service - Plex Media Server for Linux
       Loaded: loaded (/lib/systemd/system/plexmediaserver.service; enabled; vendor preset: enabled)
       Active: active (running) since Sun 2019-09-29 20:51:29 UTC; 1 day 5h ago
     Main PID: 2931 (sh)
        Tasks: 60 (limit: 4915)
       CGroup: /system.slice/plexmediaserver.service
               ├─2931 /bin/sh -c LD_LIBRARY_PATH=/usr/lib/plexmediaserver "/usr/lib/plexmediaserver/Plex Media Server"
               ├─2932 /usr/lib/plexmediaserver/Plex Media Server
               ├─3009 Plex Plug-in [com.plexapp.system] /usr/lib/plexmediaserver/Resources/Plug-ins-21ab172de/Framework.bundle/Contents
               ├─3063 /usr/lib/plexmediaserver/Plex DLNA Server
               └─3064 /usr/lib/plexmediaserver/Plex Tuner Service /usr/lib/plexmediaserver/Resources/Tuner/Private /usr/lib/plexmediase
    
    Sep 29 20:51:29 mercury systemd[1]: Starting Plex Media Server for Linux...
    Sep 29 20:51:29 mercury systemd[1]: Started Plex Media Server for Linux.
    
  • Hey, nice tutorial. But how can I deactivate that my server is reachable with Plex.tv/web? Regards.

  • maximumwarp
    2 months ago

    As usuall, very great tutorial, thank you!

    One question: I installed Plex server on Ubuntu 18.04 LTS (server with Xfce GUI), the UFW firewall is enables, everything works like a charme but do I need to open other ports besides the 32400 TCP? What do I need for server discovered by DLNA clients over the LAN?

  • Hi,

    Thanks for a great, straightforward tutorial for those of us that are new to both. Really easy to follow.

    But…

    Everything works fine but I keep getting “No write access to destination” in the recordings, so it’s not actually recording, but thinks it is. I’m guessing it’s a permissions problem. I’ve reinstalled three times without success.

    Can you please help me get it going? I literally spent all day and night. I’m about to start fresh again but I know it’ll do the same thing, I just want to begin fresh again since I’ve tried a million things and I don’t want my installation to be sloppy or have unneeded ‘fluff’.

    Ideally, I’d like to:
    – keep recordings on the same machine in a drive called “MyData” so when I mess things up, I can just either reinstall or copy my shows to elsewhere (or whatever the issue is).
    – Have plex also have access to my media directories on two other machines that already have files that I’d really like to keep separated.

    I’m running a headless Ubuntu 18 server with nothing else on it from scratch and watching on Amazon Fire TV & computers, phone or whatever. Again, all gets going except the ability for PMS to access the drives.

    Thanks!

  • Cristian
    2 months ago

    …when configuring the plex server…and add library….how you can I specify network paths?….e.g. my media files are located in my LAN on a NAS equipment with another IP….how can I declared this?

  • Mauricio
    1 month ago

    Greate, excellent thank you.

  • Juanchi
    1 month ago

    After looking all over the internet for clear instructions about plex in Ubuntu I have to say this are the best ever!!!! Thank you so much!!!!!!

  • Mustafa
    1 week ago

    Thanks so much. Whenever I google for a guide, there is always 1 step wrong and I end up remembering this website because of its unique name and the fact that none of your guides have ever let me down. I had an issue this time with Plex saying “No soup for you, the server doesn’t want to let you in” and then I remembered when I set up my old server, I had to create a SSH tunnel, so that’s what brought me back. Your instructions fixed that issue instantly. I went on your home page and wow you have so many guides, so many interesting things I can do with my server beyond plex/web hosting. I can already see a replacement to my 1Password subscription for example. Will definitely try to make a bigger contribution than this comment when I can 🙂

Leave a Comment

  • Comments with links are moderated by admin before published.
  • Your email address will not be published.
  • Use <pre> ... </pre> HTML tag to quote the output from your terminal/console.
  • Please use the community (https://community.linuxbabe.com) for questions unrelated to this article.
  • I don't have time to answer every question. Making a donation would incentivize me to spend more time answering questions.