How to Install Plex Media Server on Ubuntu 20.04 LTS Server/Desktop
This tutorial will be showing you how to install Plex media server on Ubuntu 20.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 20.04
First, go to Plex server download page, (You will need to log into your Plex account.) select Linux
and choose Ubuntu (16.04+) / Debian (8+)
with 32-bit or 64-bit.
If you are going to install Plex on a headless Ubuntu 20.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-new/1.19.3.2843-e3c1f7bcd/debian/plexmediaserver_1.19.3.2843-e3c1f7bcd_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.19.3.2843-e3c1f7bcd_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.
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 20.04 system. (Press q
key to take back control of terminal.)
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).
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
Plex Media Server Initial Setup
If you run the following commands:
sudo apt install net-tools 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
.
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 20.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.
Note that if Plex is installed on a remote Ubuntu 20.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. If you don’t see the setup wizard, you can enter localhost:32400/web/index.html#!/setup
in the address bar to launch it.
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
.
Now you can add libraries. Click Add Library
button.
Select a library type, then click browse for media folder
button to add your media folders.
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
.
Where to Download Movie and TV Shows
- Use a torrenting client like Deluge.
- Learn how to download from Usenet.
Advantages of Usenet
- It gives you better privacy because others can’t see what you are downloading.
- Superfast download speed.
- Files on Usenet are usually kept much longer than torrent files. For example, Newsdemon stores files for 4430 days (more than 12 years), so you can download old content at a very fast speed.
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 20.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.
And you can access Plex web interface via HTTPS.
How to Upgrade Plex on Ubuntu 20.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 20.04. As always, if you found this post useful, then subscribe to our free newsletter to get more tips and tricks. Take care 🙂
You said, “I do not recommend changing ownership with chown or chgrp command. Using the setfacl command will suffice.” Could you clarify why you recommend this? I am not familiar with setfacl, and when I looked at the manpage for it, I couldn’t see what makes this different.
best and ONLY working way I found to be really working.
Tip: when you are on the “ssh connection with port forwarding” you actually have to login. therefore ssh [NAME]@yourserverIP
Hey, Thanks for nice tutorial. would you please also post Emby Media Server Installation on Debian or Ubuntu with Reverse Proxy. Appreciate your help.
I’m getting a bug where it doesn’t recognize my media … the server is installed but it can’t find anything.
I’m having the same issue….following
@Matthew Nemeth, I fixed this issue. It was because of tunneling, doing the ssh 12.34.56.78 -L 8888:localhost:32400 didn’t work for me, I received an error with publickey. To fix it I used putty to connect to server, and used the tunneling feature. Hope this info helps, if not, pm me.
hey
I have installed Plex on ubuntu server. I have followed every step to the letter. When I get to the setup part, it fails to go to Plex. I have made the SSH tunnel and it still does not work. I have a previous Plex server that now connects with the IP of the new server. Any ideas would be great. Thanks Dino
Thank you for this excellent tutorial. However a 2 minor things which I ran into.
1. Regarding the ssh-connection: ssh 12.34.56.78 -L 8888:localhost:32400
I used this command from windows powershell and than I ran into permission issue. The IP was prefixed with a username which was no user on my ubuntu machine. So better is to put this command in the turorial:
ssh [email protected] -L 8888:localhost:32400
where “ubuntu-user” is replaced by an existing user on your system.
2. sudo setfacl -m u:plex:rx /media/linuxbabe/
Suddenly a user called plex is used. It’s not clear what kind of user this is. I replaced it with the ubuntu-user I also use with my SSH connection and then it works.
Clearly Plex created this
plex
user during installation and it will run as theplex
user.Great step-by-step instructions and explanations. I had a little hiccup at the ‘systemctl status plexmediaserver’ portion and the restart instructions didn’t seem to werk, but a reboot did. Thanks.
Thanks for producing great content! I learned a lot.
AMAZING!
I could not find this information anywhere until I found it in your guide:
“Note that if Plex is installed on a remote Ubuntu 20.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.”
I really like your approach to making guides because you don’t just explain WHAT to do, but you explain WHY to do it. That makes a huge difference because knowing why will help us in the future.