Files
docs/tutorials/media-manager/site/steps/overview/index.html
aetos 52c756e052
Some checks reported errors
continuous-integration/drone/push Build was killed
tutorials/media-manager (#1)
Reviewed-on: #1
2025-11-20 17:37:18 +00:00

860 lines
24 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="prev" href="../../getting-started/">
<link rel="next" href="../setup-mount-points/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
<title>Overview - Media Manager Tutorial</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"JetBrains Mono"}</style>
<link rel="stylesheet" href="https://unpkg.com/dracula-prism/dist/css/dracula-prism.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="teal">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#overview" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="Media Manager Tutorial" class="md-header__button md-logo" aria-label="Media Manager Tutorial" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 17H3V5h18m0-2H3a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h5v2h8v-2h5a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Media Manager Tutorial
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Overview
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--integrated" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="Media Manager Tutorial" class="md-nav__button md-logo" aria-label="Media Manager Tutorial" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 17H3V5h18m0-2H3a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h5v2h8v-2h5a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2"/></svg>
</a>
Media Manager Tutorial
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../getting-started/" class="md-nav__link">
<span class="md-ellipsis">
Getting Started
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
<span class="md-ellipsis">
Installation
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Installation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Overview
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Overview
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#the-goal" class="md-nav__link">
<span class="md-ellipsis">
The Goal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#high-level-setup-architecture" class="md-nav__link">
<span class="md-ellipsis">
High-Level Setup Architecture
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#1-validate-your-system" class="md-nav__link">
<span class="md-ellipsis">
🔍 1) Validate Your System
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-prepare-storage-and-mount-points" class="md-nav__link">
<span class="md-ellipsis">
💾 2) Prepare Storage and Mount Points
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#3-install-docker" class="md-nav__link">
<span class="md-ellipsis">
🐳 3) Install Docker
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#4-install-plex-on-the-host" class="md-nav__link">
<span class="md-ellipsis">
🎬 4) Install Plex on the Host
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#5-install-qbittorrent-on-the-host" class="md-nav__link">
<span class="md-ellipsis">
🧲 5) Install qBittorrent on the Host
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#6-deploy-the-arr-stack-via-docker-compose" class="md-nav__link">
<span class="md-ellipsis">
🧱 6) Deploy the ARR Stack via Docker Compose
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#7-integrate-arr-with-qbittorrent-and-plex" class="md-nav__link">
<span class="md-ellipsis">
🔗 7) Integrate ARR with qBittorrent and Plex
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#8-configure-media-libraries-and-quality-profiles" class="md-nav__link">
<span class="md-ellipsis">
🗂️ 8) Configure Media Libraries and Quality Profiles
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#9-test-your-full-setup" class="md-nav__link">
<span class="md-ellipsis">
🚀 9) Test Your Full Setup
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#10-backup-and-maintain" class="md-nav__link">
<span class="md-ellipsis">
🛡️ 10) Backup and Maintain
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ready-to-begin" class="md-nav__link">
<span class="md-ellipsis">
🚪Ready to begin?
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../setup-mount-points/" class="md-nav__link">
<span class="md-ellipsis">
Setup Mount Points
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../install-docker/" class="md-nav__link">
<span class="md-ellipsis">
Install Docker
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../install-plex/" class="md-nav__link">
<span class="md-ellipsis">
Install Plex
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../install-qbittorrent/" class="md-nav__link">
<span class="md-ellipsis">
Install Qbittorrent
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../setup-media-manager/" class="md-nav__link">
<span class="md-ellipsis">
Setup Media Manager
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="">
<span class="md-ellipsis">
Optional Installation
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Optional Installation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../install-samba/" class="md-nav__link">
<span class="md-ellipsis">
Install Samba
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="overview">Overview</h1>
<p>This page lays out the clear plan for your Media Manager setup—what actions youll take, why each step matters, and what
success looks like along the way. Think of it as your roadmap that guides you from start to finish.</p>
<hr />
<h2 id="the-goal">The Goal</h2>
<p>Were turning a single Linux machine (like a Raspberry Pi) into a reliable, mostly hands-off media server that:</p>
<ul>
<li>Automatically downloads TV shows and movies using qBittorrent</li>
<li>Uses the powerful ARR stack (Radarr, Sonarr, Prowlarr, Bazarr) to find and manage your media</li>
<li>Organizes and moves finished downloads into a tidy media library</li>
<li>Streams your media with Plex Media Server</li>
<li>Runs ARR apps inside Docker for easy updates and portability</li>
</ul>
<hr />
<h2 id="high-level-setup-architecture">High-Level Setup Architecture</h2>
<ul>
<li><strong>Host operating system:</strong> Linux (e.g., Raspberry Pi OS or Ubuntu Server)</li>
<li><strong>Host services:</strong> Docker engine, Plex Media Server, and qBittorrent installed directly on the host</li>
<li><strong>Containerized apps:</strong> Radarr, Sonarr, Prowlarr, Bazarr, and any additional helpers via Docker Compose</li>
<li><strong>Storage layout:</strong><ul>
<li>Downloaded files go to <code>/mnt/omnissiah-vault/data/media-manager/downloads</code></li>
<li>Finished media files live in <code>/mnt/omnissiah-vault/data/media-manager/media</code></li>
<li>App configuration files live under <code>/mnt/omnissiah-vault/configs/&lt;service-name&gt;</code></li>
</ul>
</li>
</ul>
<hr />
<h2 id="1-validate-your-system">🔍 <a href="./">1) Validate Your System</a></h2>
<p><strong>What we do:</strong><br />
Verify your operating system, update all critical packages, and set essential system settings like hostname, timezone,
and network configuration.</p>
<p><strong>What you achieve:</strong><br />
A stable and predictable environment with SSH access and a consistent system identity, laying the foundation for
everything else.</p>
<hr />
<h2 id="2-prepare-storage-and-mount-points">💾 <a href="../setup-mount-points/">2) Prepare Storage and Mount Points</a></h2>
<p><strong>What we do:</strong><br />
Connect and mount your external drives permanently, create organized folders for media, downloads, and configurations.</p>
<p><strong>What you achieve:</strong><br />
Reliable, durable storage locations cleanly separated from your system disk, making management, backups, and expansions
easier.</p>
<hr />
<h2 id="3-install-docker">🐳 <a href="../install-docker/">3) Install Docker</a></h2>
<p><strong>What we do:</strong><br />
Install Docker Engine and Docker Compose on your host system.</p>
<p><strong>What you achieve:</strong><br />
A containerized environment ready to host ARR services, optimizing portability, isolation, and simplified updates.</p>
<hr />
<h2 id="4-install-plex-on-the-host">🎬 <a href="../install-plex/">4) Install Plex on the Host</a></h2>
<p><strong>What we do:</strong><br />
Install Plex Media Server natively, set up initial libraries pointing to your media folders, and configure remote access
as needed.</p>
<p><strong>What you achieve:</strong><br />
A powerful media streaming service that efficiently accesses and serves your organized media.</p>
<hr />
<h2 id="5-install-qbittorrent-on-the-host">🧲 <a href="../install-qbittorrent/">5) Install qBittorrent on the Host</a></h2>
<p><strong>What we do:</strong><br />
Install the headless qBittorrent torrent client, configure it with stable download paths, and set up its web UI for easy
control.</p>
<p><strong>What you achieve:</strong><br />
A fast, stable, and reliable download engine integrated with the rest of your media automation pipeline.</p>
<hr />
<h2 id="6-deploy-the-arr-stack-via-docker-compose">🧱 <a href="../setup-media-manager/">6) Deploy the ARR Stack via Docker Compose</a></h2>
<p><strong>What we do:</strong><br />
Start Radarr, Sonarr, Prowlarr, Bazarr, and any optional services in Docker containers, mounting media and config
volumes properly.</p>
<p><strong>What you achieve:</strong><br />
All core media automation services running in isolated but connected containers, ready to manage your media
intelligently.</p>
<hr />
<h2 id="7-integrate-arr-with-qbittorrent-and-plex">🔗 7) Integrate ARR with qBittorrent and Plex</h2>
<p><strong>What we do:</strong><br />
Configure Radarr and Sonarr to use qBittorrent as their downloader and Plex as the media library refresher. Link
Prowlarr as the indexer for search results.</p>
<p><strong>What you achieve:</strong><br />
A seamless automated loop where new media gets found, downloaded, organized, and made available with minimal effort.</p>
<hr />
<h2 id="8-configure-media-libraries-and-quality-profiles">🗂️ 8) Configure Media Libraries and Quality Profiles</h2>
<p><strong>What we do:</strong><br />
Set up consistent folder structures, naming schemes, and quality preferences in Radarr and Sonarr for Movies and TV
shows.</p>
<p><strong>What you achieve:</strong><br />
Neatly named and organized media that Plex can easily scan and serve, improving overall media management quality.</p>
<hr />
<h2 id="9-test-your-full-setup">🚀 9) Test Your Full Setup</h2>
<p><strong>What we do:</strong><br />
Manually add a test movie or episode, verify it downloads through qBittorrent, is organized by Radarr/Sonarr, and
appears in Plex.</p>
<p><strong>What you achieve:</strong><br />
Confidence that every part of your automation workflow works smoothly without permission or path issues.</p>
<hr />
<h2 id="10-backup-and-maintain">🛡️ 10) Backup and Maintain</h2>
<p><strong>What we do:</strong><br />
Implement regular backups of configuration data, keep the system and Docker updated, and optionally add monitoring tools
to keep watch on your media server.</p>
<p><strong>What you achieve:</strong><br />
A reliable and maintainable Media Manager system that withstands unforeseen issues and keeps running smoothly.</p>
<hr />
<p>Feel free to follow the linked steps for detailed, easy-to-understand guides. Each part builds on the previous to get
you from a fresh Linux install to a fully automated media powerhouse.</p>
<h2 id="ready-to-begin">🚪Ready to begin?</h2>
<p>Move on to the <strong>Setup Mount Points</strong> step to prepare your storage structure and permissions
Go to 👉 <strong><a href="../setup-mount-points/">Setup Mount Points</a></strong></p>
<hr />
</article>
</div>
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.expand", "navigation.sections", "navigation.top", "toc.integrate", "content.code.annotate", "content.code.copy", "content.code.select", "content.code.line_numbers", "content.tabs.link", "content.tooltips", "content.action.edit", "search.suggest", "search.highlight", "search.share", "header.autohide", "announce.dismiss", "footer.social"], "search": "../../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body>
</html>