Files
docs/tutorials/media-manager/site/steps/setup-media-manager/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

907 lines
25 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="../install-qbittorrent/">
<link rel="next" href="../install-samba/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
<title>Setup Media Manager - 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="#arr-stack-overview-and-service-architecture" 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">
Setup Media Manager
</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">
<a href="../overview/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</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 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">
Setup Media Manager
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Setup Media Manager
</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-arr-ecosystem-what-each-app-does" class="md-nav__link">
<span class="md-ellipsis">
🌐 The ARR Ecosystem — What Each App Does
</span>
</a>
<nav class="md-nav" aria-label="🌐 The ARR Ecosystem — What Each App Does">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#prowlarr-the-indexer-aggregator" class="md-nav__link">
<span class="md-ellipsis">
🧭 Prowlarr — The Indexer Aggregator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#radarr-automated-movie-management" class="md-nav__link">
<span class="md-ellipsis">
🎬 Radarr — Automated Movie Management
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#sonarr-automated-tv-show-management" class="md-nav__link">
<span class="md-ellipsis">
📺 Sonarr — Automated TV Show Management
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#bazarr-subtitle-management-service" class="md-nav__link">
<span class="md-ellipsis">
💬 Bazarr — Subtitle Management Service
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#jellyseerr-user-request-portal" class="md-nav__link">
<span class="md-ellipsis">
🎟️ Jellyseerr — User Request Portal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ombi-alternative-request-management" class="md-nav__link">
<span class="md-ellipsis">
📨 Ombi — Alternative Request Management
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#how-these-services-connect" class="md-nav__link">
<span class="md-ellipsis">
🧱 How These Services Connect
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#shared-storage-and-docker-volumes" class="md-nav__link">
<span class="md-ellipsis">
🗄️ Shared Storage and Docker Volumes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#docker-networking" class="md-nav__link">
<span class="md-ellipsis">
🔧 Docker Networking
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#summary" class="md-nav__link">
<span class="md-ellipsis">
🚀 Summary
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#optional-accessing-your-media-via-samba-network-share" class="md-nav__link">
<span class="md-ellipsis">
Optional: Accessing Your Media via Samba Network Share
</span>
</a>
</li>
</ul>
</nav>
</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="arr-stack-overview-and-service-architecture">ARR Stack Overview and Service Architecture</h1>
<p>This section walks you through all the key applications in your Media Manager stack, explaining what each one does, how
they work together, and how they share storage space.</p>
<p>Your entire media automation system is deployed with Docker Compose, a tool that manages multiple containers at once.
Instead of pasting the configuration here, just know it's referenced in the main <code>docker-compose.yml</code> file.</p>
<hr />
<h2 id="the-arr-ecosystem-what-each-app-does">🌐 The ARR Ecosystem — What Each App Does</h2>
<p>Think of your media setup as a team of specialists, each with a clear role. Together, they automate finding,
downloading, organizing, and streaming your media smoothly.</p>
<hr />
<h3 id="prowlarr-the-indexer-aggregator">🧭 Prowlarr — The Indexer Aggregator</h3>
<p>Prowlarr is the brain behind finding new media. It connects to many torrent and NZB indexers (sites listing available
movies and shows) and collects results from them.</p>
<ul>
<li>It sends these results to Radarr and Sonarr so they know about new movies or episodes.</li>
<li>It keeps all your indexers synced in one place, saving you from having to set them up repeatedly.</li>
</ul>
<hr />
<h3 id="radarr-automated-movie-management">🎬 Radarr — Automated Movie Management</h3>
<p>Radarr handles your movie collection.</p>
<ul>
<li>It tracks movie releases and tells qBittorrent what to download.</li>
<li>After the download finishes, Radarr renames, organizes, and moves the movie files to your library folder.</li>
<li>It also notifies Plex so your library stays updated.</li>
</ul>
<hr />
<h3 id="sonarr-automated-tv-show-management">📺 Sonarr — Automated TV Show Management</h3>
<p>Sonarr does essentially the same job as Radarr, but for TV shows.</p>
<ul>
<li>Monitors episodes (current and upcoming) and fetches via qBittorrent.</li>
<li>Handles organizing episodes and renaming files consistently.</li>
<li>Updates Plex similar to Radarr.</li>
</ul>
<hr />
<h3 id="bazarr-subtitle-management-service">💬 Bazarr — Subtitle Management Service</h3>
<p>Bazarr works alongside Radarr and Sonarr to handle subtitles.</p>
<ul>
<li>Automatically searches for subtitles in the languages you want.</li>
<li>Saves these subtitle files right next to your media, so Plex and your devices can use them seamlessly.</li>
</ul>
<hr />
<h3 id="jellyseerr-user-request-portal">🎟️ Jellyseerr — User Request Portal</h3>
<p>Jellyseerr provides a friendly interface where users can request movies or TV shows.</p>
<ul>
<li>Requests get automatically passed to Radarr or Sonarr.</li>
<li>Useful if multiple people want to manage requests easily.</li>
<li>Integrates with Plex to show whats available.</li>
</ul>
<hr />
<h3 id="ombi-alternative-request-management">📨 Ombi — Alternative Request Management</h3>
<p>Ombi offers similar features to Jellyseerr but with a different look and some unique options.</p>
<ul>
<li>You can choose either or even run both if you want.</li>
</ul>
<hr />
<h2 id="how-these-services-connect">🧱 How These Services Connect</h2>
<p>Heres a simple flow to understand their interaction:</p>
<p>User Requests (via Jellyseerr/Ombi)
Radarr &amp; Sonarr
Prowlarr provides index results
qBittorrent (host) downloads files
Organized media library (on shared storage)
Plex streams content
Clients (your devices)</p>
<ul>
<li>Prowlarr feeds torrent information to Radarr and Sonarr.</li>
<li>Radarr and Sonarr initiate downloads in qBittorrent running on your host.</li>
<li>qBittorrent saves the media to storage mounted by all services.</li>
<li>Radarr and Sonarr rename and organize media as it completes.</li>
<li>Plex scans the media folders to show up-to-date content.</li>
<li>Bazarr adds subtitles automatically to the media files.</li>
</ul>
<hr />
<h2 id="shared-storage-and-docker-volumes">🗄️ Shared Storage and Docker Volumes</h2>
<p>To keep things tidy and avoid confusion, all Docker services use the same folder structure inside their containers under
<code>/data</code>. This path points to your real media folders on the host, typically <code>/mnt/omnissiah-vault/data/media-manager</code>.</p>
<p>Each service also stores its settings (config files) in their own dedicated folders on the external drive, persisting
beyond container restarts:</p>
<table>
<thead>
<tr>
<th>Service</th>
<th>Config Path on Host</th>
<th>Mounted To in Container</th>
</tr>
</thead>
<tbody>
<tr>
<td>Radarr</td>
<td><code>/mnt/omnissiah-vault/configs/radarr</code></td>
<td><code>/config</code></td>
</tr>
<tr>
<td>Sonarr</td>
<td><code>/mnt/omnissiah-vault/configs/sonarr</code></td>
<td><code>/config</code></td>
</tr>
<tr>
<td>Prowlarr</td>
<td><code>/mnt/omnissiah-vault/configs/prowlarr</code></td>
<td><code>/config</code></td>
</tr>
<tr>
<td>Bazarr</td>
<td><code>/mnt/omnissiah-vault/configs/bazarr</code></td>
<td><code>/config</code></td>
</tr>
<tr>
<td>Jellyseerr</td>
<td><code>/mnt/omnissiah-vault/configs/jellyseerr</code></td>
<td><code>/app/config</code></td>
</tr>
<tr>
<td>Ombi</td>
<td><code>/mnt/omnissiah-vault/configs/ombi</code></td>
<td><code>/config</code></td>
</tr>
</tbody>
</table>
<p>This organization keeps your media and service configurations cleanly separated and easy to backup or migrate.</p>
<hr />
<h2 id="docker-networking">🔧 Docker Networking</h2>
<p>All ARR stack containers are connected on a private Docker network called <code>media-net</code>. This network allows them to talk
to each other internally, without exposing all services to your regular home network. For host-based services like
qBittorrent and Plex, container apps reach them via special host addresses.</p>
<hr />
<h2 id="summary">🚀 Summary</h2>
<p>Your Media Manager ARR stack is a carefully connected set of services:</p>
<ul>
<li><strong>Prowlarr</strong> centralizes media indexers.</li>
<li><strong>Radarr and Sonarr</strong> manage movies and TV shows, respectively.</li>
<li><strong>qBittorrent</strong> on your host downloads the media files.</li>
<li><strong>Bazarr</strong> provides subtitles automatically.</li>
<li><strong>Jellyseerr or Ombi</strong> lets users request new content.</li>
<li><strong>Plex</strong> streams your organized media to your devices.</li>
</ul>
<p>They share data neatly through a standardized storage path and communicate over a private Docker network for smooth
operation.</p>
<hr />
<h2 id="optional-accessing-your-media-via-samba-network-share">Optional: Accessing Your Media via Samba Network Share</h2>
<p>If you want to access your external HDD directly from other devices on your network—like Windows PCs, Macs, or mobile
devices—you can set up Samba. Samba allows you to share your media folders as network drives, making it easy to browse,
add, or manage files without logging into your server.</p>
<p>This is especially useful if you prefer managing files directly or want seamless integration with devices that dont
support network streaming apps.</p>
<p>You can find the step-by-step Samba installation and configuration instructions here:<br />
Go to👉 <strong><a href="../install-samba/">Install Samba</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>