Coder Social home page Coder Social logo

pranscript / plex_bytesized Goto Github PK

View Code? Open in Web Editor NEW
12.0 4.0 1.0 2.37 MB

Complete process to set up a plex server and additional tools on Bytesized-Hosting. This repo helps to set up the minimum yet mandatory settings needed for a normal usecase.

rclone radarr plex nzbget jackett deluge ombi sonarr bytesized mergerfs

plex_bytesized's Introduction

Plex Server Setup

Though many of you must have seen tremendously useful wikis and tutorials on how to set up, this is also one of those. But it is mainly focused on hosting on Bytesized-Hosting provider. I will also be linking most of the stuff to other tutorials from where I got the information.

What is the end result?

  1. Rclone mount
  2. Plex server setup
  3. Radarr for Movies
  4. Sonarr for T.V Shows
  5. Nzbget for NZB handling
  6. Deluge (Torrent)
  7. Jackett (Indexer)
  8. Ombi (User Requests)
  9. Bazarr (Subtitles)
  10. Filebot (Optional)

What it doesn't include and why?

  1. Couchpotato (since Radarr is much better)
  2. Sickbeard / Sickrage (since Sonarr is more stable)
  3. Olaris Rename (works great, but Filebot is supreme)
  4. Cardigann (Jackett works better)

Pre-requisites

  • Bytesized account
  • SSH (Putty for Windows)
  • Filezilla (FTP application for easy handling of files)
  • Your own Client I.D and Secret for Rclone - You can see this tutorial.

1. Rclone

1) Run "rclone config"
2) press n
3) Give name
4) Choose 13 for Google Drive
5) Put Client I.d
6) Put Client Secret
7) Put 1 (scope full access)
8) Root folder default
9) Service account default
10) Choose 'N' for Advanced config
11) Choose 'N' for Auto config (since we are in a headless machine) (a link will show, copy with highligting it and open in browser, login, click advanced, go to rclone, allow)
12) Y (If it is a google team/shared drive)
13) Write your team drive number if you selected "Y" above
13) Y (after checking all is fine)

2. Mounting Drive and Mergerfs

We will follow this wonderful tutorial - Bytesized Tutorial. I did some few minor changes to Rclone parameters which I feel worked much better. So, let us continue. Rclone is used to mount the google drive and mergerfs fuses this drive to make flow of data from server to drive seamless. We will create the following folder through SSH on the server:

mkdir ~/mnt
mkdir ~/mnt/gdrive
mkdir ~/mnt/media_merge
mkdir ~/media_tmp
mkdir ~/scripts
mkdir ~/.config/mergerfs

You can follow the link mentioned above and create a startup and shutdown script if you want to use gcrypt (encrypt drive); otherwise, you can continue from here. I personally do not encrypt. Both the scripts are created so that while restarting the appbox (server), Rclone mount and mergerfs automatically starts on its own.

So, open a file using nano to create a startup script.

nano ~/.startup/gdrive

Paste the following code there (Copied from the tutorial link mentioned above)

  • I have added a few additional parameters to Rclone, which works well for plex.
  • Remember to replace mountName with your mount name, in Rclone execution code down below. Remove < > too.
  • Remember to change USER_ID, GROUP_ID, USER_AGENT in the code below. First, two can be seen by typing id in terminal and copy the numeric numbers. (you can create another SSH session to find this if you are inside nano). USER_AGENT can be any random string. So let's make the startup script.
#!/bin/bash

USER_ID=XXXXX
GROUP_ID=XXXXX
USER_AGENT=XXXXXXXXXXXXXXXXX

export TMPDIR=$HOME/tmp
PID_FILE=$HOME/.config/rclone/rclone.pid
if [ -e $PID_FILE ]; then
    PID=`cat $PID_FILE`
    if ! kill -0 $PID > /dev/null 2>&1; then
        echo "Removing stale $PID_FILE"
        rm $PID_FILE
    fi
fi

/sbin/start-stop-daemon -S --pidfile $PID_FILE --make-pidfile -u $USER -d $HOME -b -a /usr/local/bin/rclone -- mount <mountName>: ~/mnt/gdrive --allow-other --user-agent="$USER_AGENT" --timeout 1h --dir-cache-time 1000h --cache-info-age 1500h  --poll-interval 15s --vfs-read-chunk-size 32M --buffer-size 32M --vfs-read-ahead 256M --vfs-cache-mode full --vfs-cache-max-size 200G --vfs-cache-max-age 336h --uid $USER_ID --gid $GROUP_ID

PID_FILE=$HOME/.config/mergerfs/mergerfs.pid
if [ -e $PID_FILE ]; then
    PID=`cat $PID_FILE`
    if ! kill -0 $PID > /dev/null 2>&1; then
        echo "Removing stale $PID_FILE"
        rm $PID_FILE
    fi
fi

/sbin/start-stop-daemon -S --pidfile $PID_FILE --make-pidfile -u $USER -d $HOME -b -a /usr/bin/mergerfs -- -f -o defaults,sync_read,auto_cache,use_ino,allow_other,func.getattr=newest,category.action=all,category.create=ff $HOME/media_tmp:$HOME/mnt/gdrive $HOME/mnt/media_merge

Save it.

Now create a shutdown script using similar process.

nano ~/.shutdown/gdrive

Paste the below code (Copied from the tutorial mentioned above)

#!/bin/bash

PID_FILE=$HOME/.config/rclone/rclone.pid
/sbin/start-stop-daemon --pidfile $PID_FILE -u $USER -d $HOME -K -a /usr/local/bin/rclone

if [ -e $PID_FILE ]; then
    PID=`cat $PID_FILE`
    if ! kill -0 $PID > /dev/null 2>&1; then
        echo "Removing stale $PID_FILE"
        rm $PID_FILE
    fi
fi

PID_FILE=$HOME/.config/mergerfs/mergerfs.pid
/sbin/start-stop-daemon --pidfile $PID_FILE -u $USER -d $HOME -K -a /usr/bin/mergerfs

if [ -e $PID_FILE ]; then
    PID=`cat $PID_FILE`
    if ! kill -0 $PID > /dev/null 2>&1; then
        echo "Removing stale $PID_FILE"
        rm $PID_FILE
    fi
fi

Now to make both the files executable, run the following command

chmod +x ~/.startup/gdrive
chmod +x ~/.shutdown/gdrive

Till now, we have made the script that will mount and unmount the drive while restarting the server.

Now create a script that will upload from Bytesized local drive to google drive.

As you can see, we have created a folder "media_tmp", which will store the downloaded files locally on Bytesized. We will move these files from this folder to our google drive and in the process, will delete the local.

#create a file inside scripts folder
nano ~/scripts/uploadmedia
# paste the below line there
screen -dmS uploadmedia /usr/local/bin/rclone move ~/media_tmp <mountName>: --delete-empty-src-dirs -P --stats 20s --log-file=rcloneMoviesLog.txt
# replace mountName that you put in rclone config and do not include < >
# Press Ctrl + X
# Press Y for yes.
# Press Enter to save and confirm file name.
chmod +x ~/scripts/uploadmedia  # to make the script executable.

We created the script to upload files. Now, we will create a **cron job **that will upload automatically, the content from local to our drive according to the script that we just made,at a specific time:

# open crontab
crontab -e
# Put below line in the file
0 5 * * * ~/scripts/uploadmedia
# Save it by pressing Ctrl + X,  Y and the Enter
# This will upload everyday at 5 a.m server time.

You can visit crontab.guru to understand the convention of setting up the time.

At the end, restart the appbox (server) and wait few minutes for it to mount (generally huge collection takes time to mount. Small drive will mount instantly).

To cross check if both rclone and mergerfs is working, you can check from the memory usage dashboard on Bytesized websute or you can run ps -ef in the terminal to see both are running.

GitHub Logo

Utilities

Order Utility Guide Support
3. Nzbget Nzbget Github Forum
4. Deluge Deluge Github Forum
5. Jackett Jackett Github Reddit
6. Radarr Radarr Discord Github Reddit
7. Sonarr Sonarr Discord Github Forum Reddit
8. Plex Plex Forum
9. Bazarr Bazarr Discord Github Reddit
10. Ombi Ombi Discord Github
11. Filebot Filebot Forum

Extra

Index Topic
1. Radarr 4K Instance
2. SubZero bundle for Subtitles (Bazarr Alternative)
3. OMBI Alternative - Requestrr for discord
4. Gclone, to copy between drives using Service accounts

Troubleshoot

Common problems and fixes

Buy Me A Coffee

plex_bytesized's People

Contributors

pranscript avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.