added docs for media-manager tutorial

This commit is contained in:
2025-11-20 22:22:35 +05:30
parent 3538634706
commit acfcc0c41b
63 changed files with 16201 additions and 0 deletions

View File

@@ -0,0 +1,948 @@
<!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="../setup-mount-points/">
<link rel="next" href="../install-plex/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
<title>Install Docker - 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="#installing-docker-what-it-is-how-it-works-and-why-we-use-it" 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">
Install Docker
</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 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">
Install Docker
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Install Docker
</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="#what-is-docker" class="md-nav__link">
<span class="md-ellipsis">
🐳 What Is Docker?
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#why-use-docker" class="md-nav__link">
<span class="md-ellipsis">
🔧 Why Use Docker?
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#why-not-put-everything-in-docker" class="md-nav__link">
<span class="md-ellipsis">
🚫 Why Not Put Everything in Docker?
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#why-qbittorrent-is-not-in-docker" class="md-nav__link">
<span class="md-ellipsis">
❌ Why qBittorrent Is NOT in Docker
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#why-plex-is-not-in-docker" class="md-nav__link">
<span class="md-ellipsis">
❌ Why Plex Is NOT in Docker
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#why-the-arr-stack-is-in-docker" class="md-nav__link">
<span class="md-ellipsis">
🟩 Why the ARR Stack Is in Docker
</span>
</a>
<nav class="md-nav" aria-label="🟩 Why the ARR Stack Is in Docker">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#benefits" class="md-nav__link">
<span class="md-ellipsis">
Benefits:
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#summary-the-architecture-philosophy" class="md-nav__link">
<span class="md-ellipsis">
🧱 Summary — The Architecture Philosophy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#installing-docker-raspberry-pi-linux" class="md-nav__link">
<span class="md-ellipsis">
🧰 Installing Docker (Raspberry Pi / Linux)
</span>
</a>
<nav class="md-nav" aria-label="🧰 Installing Docker (Raspberry Pi / Linux)">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#download-script" class="md-nav__link">
<span class="md-ellipsis">
📥 Download Script
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#after-installation" class="md-nav__link">
<span class="md-ellipsis">
🚀 After Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#next-step-install-plex-on-the-host" class="md-nav__link">
<span class="md-ellipsis">
➡️ Next Step: Install Plex on the Host
</span>
</a>
</li>
</ul>
</nav>
</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="installing-docker-what-it-is-how-it-works-and-why-we-use-it">Installing Docker — What It Is, How It Works, and Why We Use It</h1>
<p>Before installing Docker, its helpful to understand <strong>what Docker does</strong>, <strong>how it fits into our media management setup
</strong>, and <strong>why we run only the ARR stack inside Docker</strong> while keeping <strong>qBittorrent and Plex on the host system</strong>.</p>
<p>This page breaks it down simply and practically.</p>
<hr />
<h2 id="what-is-docker">🐳 What Is Docker?</h2>
<p>Docker is a <strong>containerization platform</strong>.</p>
<p>It allows you to run applications in isolated environments called <strong>containers</strong>. Each container:</p>
<ul>
<li>Has its own filesystem</li>
<li>Includes its own dependencies and libraries</li>
<li>Runs separately from your main system</li>
<li>Can be recreated or removed easily</li>
</ul>
<p>Think of a container as:</p>
<blockquote>
<p><strong>A lightweight, specialized mini-computer dedicated to one app.</strong></p>
</blockquote>
<p>This approach makes apps more predictable, easier to manage, and simpler to update.</p>
<hr />
<h2 id="why-use-docker">🔧 Why Use Docker?</h2>
<ul>
<li><strong>Avoid dependency conflicts:</strong> Containers bundle the apps needed libraries, leaving your base OS clean.</li>
<li><strong>Easy updates:</strong> Updating Radarr/Sonarr/Prowlarr is as simple as running:</li>
</ul>
<div class="language-text highlight"><span class="filename">Text Only</span><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>docker compose pull
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>docker compose up -d
</code></pre></div>
<ul>
<li><strong>Easy backups:</strong> Configuration files are stored in small, manageable folders.</li>
<li><strong>Great for frequently changing apps:</strong> Apps like Prowlarr and Radarr update often, and Docker simplifies rollout.</li>
</ul>
<hr />
<h2 id="why-not-put-everything-in-docker">🚫 Why Not Put Everything in Docker?</h2>
<p>While you could put all components into Docker, some behave poorly or have limitations when containerized, especially on
Raspberry Pi or home servers.</p>
<hr />
<h2 id="why-qbittorrent-is-not-in-docker">❌ Why qBittorrent Is NOT in Docker</h2>
<p>qBittorrent requires:</p>
<ul>
<li>Precise file permission control</li>
<li>Direct disk access</li>
<li>Stable, predictable file paths</li>
<li>High-speed I/O for torrent hashing</li>
<li>Ability to handle sudden restarts and disk changes</li>
</ul>
<p>Within Docker, qBittorrent faces problems like:</p>
<table>
<thead>
<tr>
<th>Problem</th>
<th>Cause</th>
</tr>
</thead>
<tbody>
<tr>
<td>Slow hashing</td>
<td>Docker overlay filesystem overhead</td>
</tr>
<tr>
<td>Permission issues</td>
<td>UID/GID mismatch with bind mounts</td>
</tr>
<tr>
<td>Inconsistent paths</td>
<td>Container paths differ from host paths</td>
</tr>
<tr>
<td>Poor integration</td>
<td>Radarr/Sonarr struggles with Docker paths</td>
</tr>
</tbody>
</table>
<p><strong>Conclusion:</strong></p>
<ul>
<li>Running qBittorrent directly on the host is faster, more reliable, and simpler.</li>
</ul>
<hr />
<h2 id="why-plex-is-not-in-docker">❌ Why Plex Is NOT in Docker</h2>
<p>Plex relies on:</p>
<table>
<thead>
<tr>
<th>Feature</th>
<th>Issue in Docker</th>
</tr>
</thead>
<tbody>
<tr>
<td>Hardware transcoding (VAAPI/V4L2/QuickSync)</td>
<td>Often broken or complicated to configure</td>
</tr>
<tr>
<td>Direct I/O from huge libraries</td>
<td>Overlay filesystem slows down I/O</td>
</tr>
<tr>
<td>Network discovery (multicast/IGMP)</td>
<td>Blocked or isolated inside containers</td>
</tr>
<tr>
<td>Handling millions of metadata files</td>
<td>Poor container filesystem performance</td>
</tr>
</tbody>
</table>
<p><strong>Conclusion:</strong></p>
<ul>
<li>Plex runs best on the host machine for speed, compatibility, and stable transcoding.</li>
</ul>
<hr />
<h2 id="why-the-arr-stack-is-in-docker">🟩 Why the ARR Stack <em>Is</em> in Docker</h2>
<p>Radarr, Sonarr, Prowlarr, and Bazarr are:</p>
<ul>
<li>Lightweight and simple</li>
<li>Use stable, clean directory structures</li>
<li>Store config in small folders</li>
<li>Benefit from frequent updates</li>
<li>Dont require hardware passes</li>
<li>Designed to run smoothly in containers</li>
</ul>
<h3 id="benefits">Benefits:</h3>
<ul>
<li>Consistent file paths as long as <code>/mnt/omnissiah-vault</code> is mounted</li>
<li>Easy migration with just config copy and docker-compose run</li>
<li>Isolation protects other apps if something breaks</li>
</ul>
<hr />
<h2 id="summary-the-architecture-philosophy">🧱 Summary — The Architecture Philosophy</h2>
<table>
<thead>
<tr>
<th>Component</th>
<th>Location</th>
<th>Reason</th>
</tr>
</thead>
<tbody>
<tr>
<td>Docker Engine</td>
<td>Host</td>
<td>Foundation layer</td>
</tr>
<tr>
<td>ARR Stack (Radarr, Sonarr, Prowlarr, Bazarr)</td>
<td>Docker</td>
<td>Perfect container candidates</td>
</tr>
<tr>
<td>qBittorrent</td>
<td>Host</td>
<td>Needs real filesystem and speed</td>
</tr>
<tr>
<td>Plex</td>
<td>Host</td>
<td>Needs hardware transcoding and network integration</td>
</tr>
</tbody>
</table>
<p>This hybrid setup balances performance, reliability, and ease of maintenance.</p>
<hr />
<h2 id="installing-docker-raspberry-pi-linux">🧰 Installing Docker (Raspberry Pi / Linux)</h2>
<p>This tutorial uses an installation script that:</p>
<ul>
<li>Updates your system</li>
<li>Removes any old conflicting packages</li>
<li>Installs Docker using the official convenience script</li>
<li>Installs Docker Compose</li>
<li>Adds your user to the docker group</li>
<li>Enables and starts Docker service</li>
<li>Verifies successful install</li>
</ul>
<h3 id="download-script">📥 Download Script</h3>
<p>👉 <strong><a href="../../scripts/shell/install-docker.sh">install-docker.sh</a></strong></p>
<hr />
<h2 id="after-installation">🚀 After Installation</h2>
<ul>
<li>reboot your system:</li>
</ul>
<div class="language-bash highlight"><span class="filename">Bash</span><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>sudo<span class="w"> </span>reboot
</code></pre></div>
<p>Once rebooted, your system will be ready to run containerized ARR services.</p>
<hr />
<h2 id="next-step-install-plex-on-the-host">➡️ Next Step: Install Plex on the Host</h2>
<p>Once Docker is installed, move on to installing Plex directly on the host to ensure your server is ready to stream media
as the ARR stack populates your libraries.</p>
<p>Go to 👉 <a href="../install-plex/">Install Plex</a></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>

View File

@@ -0,0 +1,850 @@
<!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-docker/">
<link rel="next" href="../install-qbittorrent/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
<title>Install Plex - 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="#installing-plex-media-server" 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">
Install Plex
</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 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">
Install Plex
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Install Plex
</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="#what-is-plex" class="md-nav__link">
<span class="md-ellipsis">
🎬 What Is Plex?
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#why-plex-runs-outside-docker" class="md-nav__link">
<span class="md-ellipsis">
🧱 Why Plex Runs Outside Docker
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#why-move-plex-metadata-to-an-external-hdd" class="md-nav__link">
<span class="md-ellipsis">
🗃️ Why Move Plex Metadata to an External HDD?
</span>
</a>
<nav class="md-nav" aria-label="🗃️ Why Move Plex Metadata to an External HDD?">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#typical-metadata-sizes" class="md-nav__link">
<span class="md-ellipsis">
📌 Typical Metadata Sizes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#store-metadata-on-your-external-hdd" class="md-nav__link">
<span class="md-ellipsis">
✔ Store metadata on your external HDD
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#installation-script" class="md-nav__link">
<span class="md-ellipsis">
⚙️ Installation Script
</span>
</a>
<nav class="md-nav" aria-label="⚙️ Installation Script">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#download-script" class="md-nav__link">
<span class="md-ellipsis">
📥 Download Script
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#after-installation" class="md-nav__link">
<span class="md-ellipsis">
🚀 After Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#next-step-install-qbittorrent-on-the-host" class="md-nav__link">
<span class="md-ellipsis">
➡️ Next Step: Install qBittorrent on the Host
</span>
</a>
</li>
</ul>
</nav>
</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="installing-plex-media-server">Installing Plex Media Server</h1>
<p>Plex is the core of your media ecosystem. It scans your libraries, fetches metadata, organizes your content, and lets
you stream movies and shows from anywhere. While installing Plex is straightforward, <strong>where you store its configuration
and metadata</strong> is crucial for performance and longevity.</p>
<p>This guide covers:</p>
<ul>
<li>What Plex is and how it works</li>
<li>Why Plex should <em>not</em> run inside Docker in this setup</li>
<li>Why its configuration directory belongs on your external HDD</li>
<li>What Plex stores and how large it can get</li>
<li>The installation script used to set it all up</li>
</ul>
<hr />
<h2 id="what-is-plex">🎬 What Is Plex?</h2>
<p>Plex Media Server is an application that:</p>
<ul>
<li>Indexes your media collection</li>
<li>Fetches rich metadata like posters, backgrounds, cast info, and themes</li>
<li>Streams content to TVs, phones, tablets, and browsers</li>
<li>Transcodes media when needed for smooth playback</li>
<li>Manages users, watch history, and personalized recommendations</li>
</ul>
<p>With great power comes heavy disk usage.</p>
<hr />
<h2 id="why-plex-runs-outside-docker">🧱 Why Plex Runs <em>Outside</em> Docker</h2>
<p>Though Docker is excellent for the ARR stack, Plex demands more and runs better directly on the host system.</p>
<p>Common problems running Plex inside Docker:</p>
<table>
<thead>
<tr>
<th>Issue</th>
<th>Cause in Docker</th>
</tr>
</thead>
<tbody>
<tr>
<td>Hardware transcoding failures</td>
<td>Containerization blocks VAAPI/V4L2/QuickSync access</td>
</tr>
<tr>
<td>Slow scanning of large libraries</td>
<td>Overlay filesystem slows metadata read/write</td>
</tr>
<tr>
<td>Network discovery issues</td>
<td>Plex multicast/IGMP blocked by Docker network isolation</td>
</tr>
<tr>
<td>Large metadata directories</td>
<td>Containers struggle with millions of tiny files</td>
</tr>
</tbody>
</table>
<p>Practical experience shows Plex performs best installed natively on the OS.</p>
<hr />
<h2 id="why-move-plex-metadata-to-an-external-hdd">🗃️ Why Move Plex Metadata to an External HDD?</h2>
<p>Plex stores a huge amount of metadata—often tens to hundreds of gigabytes, depending on your library size.</p>
<p>Stored in its config directory are:</p>
<ul>
<li>Posters and artwork</li>
<li>Backdrops</li>
<li>Theme music</li>
<li>Subtitles</li>
<li>Optimization and transcoding caches</li>
<li>Databases for libraries, watch history, video analysis, and intro detection</li>
</ul>
<h3 id="typical-metadata-sizes">📌 Typical Metadata Sizes</h3>
<ul>
<li>Small library (500 files): <strong>510 GB</strong></li>
<li>Medium library (2,000 files): <strong>2050 GB</strong></li>
<li>Large library (10,000+ files): <strong>100 GB+</strong></li>
</ul>
<p>If this data stays on your system SD card or root SSD (e.g., <code>/var/lib/plexmediaserver</code>):</p>
<ul>
<li>The OS disk can fill up fast</li>
<li>SD cards may wear out prematurely</li>
<li>Plex performance will degrade</li>
</ul>
<h3 id="store-metadata-on-your-external-hdd">✔ Store metadata on your external HDD</h3>
<ul>
<li>Access large, fast storage</li>
<li>Protect your OS drive from filling</li>
<li>Extend SD card lifespan</li>
<li>Boost Plex scanning and caching speeds</li>
</ul>
<p>This is why Plex config is relocated to:</p>
<div class="language-text highlight"><span class="filename">Text Only</span><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>/mnt/omnissiah-vault/configs/plex
</code></pre></div>
<hr />
<h2 id="installation-script">⚙️ Installation Script</h2>
<p>This tutorial uses an installation script that:</p>
<ul>
<li>Installs Plex Media Server from the official repository</li>
<li>Stops the Plex service temporarily</li>
<li>Moves the entire Plex metadata and config folder to your external HDD</li>
<li>Creates a symbolic link so Plex finds its config in the expected place</li>
<li>Fixes file ownerships for the <code>plex</code> user</li>
<li>Restarts and enables Plex to run on boot</li>
</ul>
<h3 id="download-script">📥 Download Script</h3>
<p>👉 <strong><a href="../../scripts/shell/install-plex.sh">install-plex.sh</a></strong></p>
<hr />
<h2 id="after-installation">🚀 After Installation</h2>
<p>Once Plex is installed and its metadata moved:</p>
<ul>
<li>Open the Plex Web UI in your browser</li>
<li>Sign in with your Plex account</li>
<li>Add your media libraries pointing to <code>/mnt/omnissiah-vault/media</code></li>
<li>Run a full library scan</li>
</ul>
<p>All ongoing metadata, caching, posters, and intro markers will safely reside on your external HDD.</p>
<hr />
<h2 id="next-step-install-qbittorrent-on-the-host">➡️ Next Step: Install qBittorrent on the Host</h2>
<p>After successfully installing Plex and configuring its metadata on your external HDD, its time to set up <strong>qBittorrent
</strong>, the torrent client responsible for downloading your media files automatically.</p>
<p>Proceed to the detailed installation and configuration instructions here:<br />
Go to 👉 <strong><a href="../install-qbittorrent/">Install qBittorrent</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>

View File

@@ -0,0 +1,858 @@
<!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-plex/">
<link rel="next" href="../setup-media-manager/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
<title>Install Qbittorrent - 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="#installing-qbittorrent-host-installation" 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">
Install Qbittorrent
</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 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">
Install Qbittorrent
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Install Qbittorrent
</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="#what-is-qbittorrent" class="md-nav__link">
<span class="md-ellipsis">
🌀 What Is qBittorrent?
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#why-qbittorrent-should-not-run-in-docker" class="md-nav__link">
<span class="md-ellipsis">
❌ Why qBittorrent Should NOT Run in Docker
</span>
</a>
<nav class="md-nav" aria-label="❌ Why qBittorrent Should NOT Run in Docker">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#1-docker-slows-torrent-hashing" class="md-nav__link">
<span class="md-ellipsis">
1. Docker slows torrent hashing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-permissions-become-complicated" class="md-nav__link">
<span class="md-ellipsis">
2. Permissions become complicated
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#3-stable-real-file-paths-are-necessary" class="md-nav__link">
<span class="md-ellipsis">
3. Stable real file paths are necessary
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#4-performance-is-better-on-the-host" class="md-nav__link">
<span class="md-ellipsis">
4. Performance is better on the host
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#why-qbittorrent-configuration-does-not-need-external-hdd" class="md-nav__link">
<span class="md-ellipsis">
📦 Why qBittorrent Configuration Does NOT Need External HDD
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#installation-script-systemd-service" class="md-nav__link">
<span class="md-ellipsis">
⚙️ Installation Script (Systemd Service)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#installation-script" class="md-nav__link">
<span class="md-ellipsis">
⚙️ Installation Script
</span>
</a>
<nav class="md-nav" aria-label="⚙️ Installation Script">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#download-script" class="md-nav__link">
<span class="md-ellipsis">
📥 Download Script
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#after-installation" class="md-nav__link">
<span class="md-ellipsis">
🚀 After Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#next-step-setup-arr-stack-docker-compose" class="md-nav__link">
<span class="md-ellipsis">
➡️ Next Step: Setup ARR Stack (Docker Compose)
</span>
</a>
</li>
</ul>
</nav>
</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="installing-qbittorrent-host-installation">Installing qBittorrent (Host Installation)</h1>
<p>qBittorrent is the download engine of your media automation setup. It handles all torrent activity triggered by Radarr,
Sonarr, and Prowlarr. Installing it on the <strong>host system</strong> (not Docker) ensures optimal speed, stable paths, and maximum
compatibility.</p>
<p>This guide explains:</p>
<ul>
<li>What qBittorrent does in the media pipeline</li>
<li>Why it should <em>not</em> run inside Docker in a real-world Pi/home server setup</li>
<li>Why its configuration does <strong>not</strong> need to be moved to your external drive</li>
<li>The installation script used to install and run qBittorrent as a systemd service</li>
</ul>
<hr />
<h2 id="what-is-qbittorrent">🌀 What Is qBittorrent?</h2>
<p>qBittorrent is an opensource torrent client featuring:</p>
<ul>
<li>Lightweight Web UI</li>
<li>Fast download engine</li>
<li>Built-in category and tagging support</li>
<li>Excellent integration with Radarr &amp; Sonarr</li>
<li>Very low resource usage</li>
</ul>
<p>It acts as the <strong>download worker</strong> for the entire Media Manager.</p>
<p>When Radarr or Sonarr find new media, they send the torrent to qBittorrent. Upon completion, ARR processes renaming and
file management.</p>
<hr />
<h2 id="why-qbittorrent-should-not-run-in-docker">❌ Why qBittorrent Should NOT Run in Docker</h2>
<p>Though technically possible, running qBittorrent in Docker on low-power hardware like Raspberry Pi causes significant
issues:</p>
<h3 id="1-docker-slows-torrent-hashing">1. Docker slows torrent hashing</h3>
<ul>
<li>Torrenting requires intensive hashing and verifying large files</li>
<li>Dockers overlay filesystem adds overhead, causing slower hashing and higher CPU usage</li>
</ul>
<h3 id="2-permissions-become-complicated">2. Permissions become complicated</h3>
<ul>
<li>Bind-mounted volumes in Docker cause UID/GID mismatches</li>
<li>Sonarr/Radarr struggle to access or import completed downloads correctly</li>
<li>On the host, file permissions behave predictably and natively</li>
</ul>
<h3 id="3-stable-real-file-paths-are-necessary">3. Stable real file paths are necessary</h3>
<ul>
<li>qBittorrent expects actual Linux paths (e.g., <code>/mnt/omnissiah-vault/downloads</code>)</li>
<li>Containers often abstract paths, confusing ARRs automation</li>
</ul>
<h3 id="4-performance-is-better-on-the-host">4. Performance is better on the host</h3>
<ul>
<li>Download speeds, disk writes, and hashing all run faster without Dockers overhead</li>
</ul>
<p><strong>Conclusion:</strong></p>
<ul>
<li><strong>qBittorrent performs best installed directly on the host system.</strong></li>
</ul>
<hr />
<h2 id="why-qbittorrent-configuration-does-not-need-external-hdd">📦 Why qBittorrent Configuration Does NOT Need External HDD</h2>
<p>Unlike Plexs large metadata, qBittorrent stores only minor config files such as:</p>
<ul>
<li>Configuration settings</li>
<li>Small torrent resume files</li>
<li>A lightweight database</li>
</ul>
<p>Typical config size: <strong>220 MB</strong> — negligible and stable.</p>
<p>Keeping qBittorrent config on your systems internal OS disk is safe and recommended.</p>
<hr />
<h2 id="installation-script-systemd-service">⚙️ Installation Script (Systemd Service)</h2>
<h2 id="installation-script">⚙️ Installation Script</h2>
<p>This tutorial uses an installation script that:</p>
<ul>
<li>Updates and upgrades system packages</li>
<li>Installs qBittorrent-nox (the headless version)</li>
<li>Creates a dedicated system user for qBittorrent</li>
<li>Adds your normal user to the qBittorrent group for file access</li>
<li>Creates a systemd service file to run qBittorrent as a background service</li>
<li>Enables and starts the qBittorrent service to run at boot</li>
</ul>
<p>After running the script, you can access qBittorrents Web UI and begin configuring your download settings.</p>
<h3 id="download-script">📥 Download Script</h3>
<p>👉 <strong><a href="../../scripts/shell/install-qbittorrent.sh">install-qbittorrent.sh</a></strong></p>
<hr />
<h2 id="after-installation">🚀 After Installation</h2>
<p>Access the Web UI at:</p>
<div class="language-text highlight"><span class="filename">Text Only</span><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>http://&lt;your_pi_ip&gt;:8080
</code></pre></div>
<p>Default credentials:</p>
<div class="language-text highlight"><span class="filename">Text Only</span><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>username: admin
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>password: adminadmin
</code></pre></div>
<p><strong>Change your password on first login!</strong></p>
<ul>
<li>Configure download directories</li>
<li>Add categories such as <code>movies</code> and <code>tv</code></li>
<li>Disable any unwanted torrenting features</li>
</ul>
<p>ARR integration will be configured after the Docker-based ARR stack is deployed.</p>
<hr />
<h2 id="next-step-setup-arr-stack-docker-compose">➡️ Next Step: Setup ARR Stack (Docker Compose)</h2>
<p>Now that host-based components (Plex and qBittorrent) are ready, proceed to deploy the ARR stack via Docker Compose to
automate searching, downloading, and organizing your media.</p>
<p>Go to 👉 <strong><a href="../setup-media-manager/">Setup Media Manager</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>

View File

@@ -0,0 +1,796 @@
<!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="../setup-media-manager/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
<title>Install Samba - 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="#optional-installing-samba-for-windows-network-access" 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">
Install Samba
</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--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3" >
<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="false">
<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">
<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--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" checked>
<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="true">
<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 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">
Install Samba
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Install Samba
</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="#why-samba-can-be-useful" class="md-nav__link">
<span class="md-ellipsis">
Why Samba Can Be Useful
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#what-samba-does" class="md-nav__link">
<span class="md-ellipsis">
What Samba Does
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#installation-script" class="md-nav__link">
<span class="md-ellipsis">
⚙️ Installation Script
</span>
</a>
<nav class="md-nav" aria-label="⚙️ Installation Script">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#download-script" class="md-nav__link">
<span class="md-ellipsis">
📥 Download Script
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#after-installation" class="md-nav__link">
<span class="md-ellipsis">
🚀 After Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#security-tips" class="md-nav__link">
<span class="md-ellipsis">
Security Tips
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#summary" class="md-nav__link">
<span class="md-ellipsis">
Summary
</span>
</a>
</li>
</ul>
</nav>
</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="optional-installing-samba-for-windows-network-access">Optional: Installing Samba for Windows Network Access</h1>
<p>While Samba setup is not mandatory for this Media Manager system, its highly recommended if you want easier access to your media files from Windows machines or other devices on your network.</p>
<p>Heres why you might want to consider Samba:</p>
<ul>
<li>You use <strong>Windows</strong> and want to browse your media files through File Explorer effortlessly. </li>
<li>You prefer to manage downloaded files manually—like dragging subtitles into folders, renaming movies, or cleaning up files directly. </li>
<li>You want to have the media storage appear as a network drive for quick access anytime. </li>
</ul>
<p>If you mainly interact with your media through Plex, Radarr, Sonarr, or the Linux terminal, Samba is not essential.</p>
<hr />
<h2 id="why-samba-can-be-useful">Why Samba Can Be Useful</h2>
<p>Despite the automation provided by Radarr, Sonarr, and Bazarr, there are times when manual access is needed:</p>
<ul>
<li>Fixing files that didnt tag correctly </li>
<li>Adjusting subtitles </li>
<li>Removing or replacing problematic media </li>
<li>Organizing your library beyond automation </li>
<li>Taking backups of your media collection </li>
</ul>
<p>On Linux or macOS, SSH provides a way to do this. But Windows users benefit most from Samba shares, which map your servers drive like a regular Windows network folder.</p>
<hr />
<h2 id="what-samba-does">What Samba Does</h2>
<p>Samba turns your Raspberry Pi or Linux servers storage into Windows-friendly network shares.</p>
<p>For example, the folder:</p>
<div class="language-text highlight"><span class="filename">Text Only</span><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>/mnt/omnissiah-vault
</code></pre></div>
<p>Can be used from Windows like:</p>
<div class="language-text highlight"><span class="filename">Text Only</span><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>Z:\ → Omnissiah-Vault
</code></pre></div>
<p>This means in Windows:</p>
<ul>
<li>You can open and play files </li>
<li>Copy and move folders as usual </li>
<li>Rename and delete files directly </li>
<li>Manage your media easily without logging into the server</li>
</ul>
<hr />
<h2 id="installation-script">⚙️ Installation Script</h2>
<p>This script will:</p>
<ul>
<li>Install the Samba server software </li>
<li>Share your mounted media directories securely </li>
<li>Set up user authentication (no open guest access) </li>
<li>Enable Samba system services (<code>smbd</code> and <code>nmbd</code>) for automatic startup </li>
</ul>
<h3 id="download-script">📥 Download Script</h3>
<p>👉 <strong><a href="../../scripts/shell/install-samba.sh">install-samba.sh</a></strong></p>
<hr />
<h2 id="after-installation">🚀 After Installation</h2>
<p>Once Samba is set up and running on your server, you can connect from your Windows computer:</p>
<ol>
<li>Press <code>Win + E</code> to open File Explorer. </li>
<li>Click on <strong>This PC</strong> on the left pane. </li>
<li>Click <strong>Map network drive</strong> from the ribbon menu (or use the three-dot menu if its hidden). </li>
<li>Choose a drive letter, such as <code>Z:</code>. </li>
<li>
<p>Enter the network folder path in this format:
<div class="language-text highlight"><span class="filename">Text Only</span><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>\\&lt;server-ip&gt;\Omnissiah-Vault
</code></pre></div></p>
<p>Example:</p>
<p><div class="language-text highlight"><span class="filename">Text Only</span><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>\\192.168.1.50\Omnissiah-Vault
</code></pre></div>
6. Check <strong>Reconnect at sign-in</strong> to automatically mount the drive each time you log in.<br />
7. Check <strong>Connect using different credentials</strong> and enter the Samba username/password created during setup. For example:
<div class="language-text highlight"><span class="filename">Text Only</span><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>Username: aetos
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>Password: &lt;your-samba-password&gt;
</code></pre></div>
8. Click <strong>Finish</strong>. Your media drive will appear in File Explorer like any normal disk. </p>
</li>
</ol>
<p>You can also map it via PowerShell:
<div class="language-text highlight"><span class="filename">Text Only</span><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>net use Z: \\&lt;server-ip&gt;\Omnissiah-Vault /user:aetos
</code></pre></div></p>
<hr />
<h2 id="security-tips">Security Tips</h2>
<ul>
<li>Samba shares your files over the network. Use strong passwords and never enable guest (anonymous) access unless you want an open share. </li>
<li>Use firewall tools (UFW, firewall-cmd) to restrict access to trusted devices only. </li>
</ul>
<hr />
<h2 id="summary">Summary</h2>
<p>Samba is a handy optional addition that makes your media drive easily accessible on Windows and other devices, allowing drag-and-drop ease and manual file management.</p>
<p>Choose Samba if you:<br />
- Want direct, seamless Windows access to media files<br />
- Regularly manage or adjust files manually<br />
- Prefer using network shares over command-line or Plex only </p>
<p>Skip installing Samba if you:<br />
- Do everything through Plex or media automation apps<br />
- Manage the server via Linux or macOS only<br />
- Dont need manual file access on other devices </p>
</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>

View File

@@ -0,0 +1,860 @@
<!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>

View File

@@ -0,0 +1,907 @@
<!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>

View File

@@ -0,0 +1,836 @@
<!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="../overview/">
<link rel="next" href="../install-docker/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.23">
<title>Setup Mount Points - 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="#understanding-mounting-file-systems-and-choosing-between-ext4-vs-ntfs" 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 Mount Points
</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 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 Mount Points
</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 Mount Points
</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="#what-does-mounting-mean" class="md-nav__link">
<span class="md-ellipsis">
🧩 What Does “Mounting” Mean?
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#why-we-use-mnt" class="md-nav__link">
<span class="md-ellipsis">
📘 Why We Use /mnt/…
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#what-is-a-file-system" class="md-nav__link">
<span class="md-ellipsis">
🔧 What Is a File System?
</span>
</a>
</li>
</ul>
</nav>
</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="understanding-mounting-file-systems-and-choosing-between-ext4-vs-ntfs">Understanding Mounting, File Systems, and Choosing Between EXT4 vs NTFS</h1>
<p>Before we connect our drives and get everything ready, its important to understand <strong>what mounting is</strong>, <strong>what a file
system is</strong>, and <strong>why we choose either EXT4 or NTFS</strong> depending on how you'll use your storage.</p>
<p>This page explains these concepts in simple terms so beginners can follow with confidence.</p>
<hr />
<h2 id="what-does-mounting-mean">🧩 What Does “Mounting” Mean?</h2>
<p>On Linux, storage devices like HDDs, SSDs, or USB drives <strong>dont automatically appear as folders</strong> when plugged in.<br />
Instead, the operating system <em>attaches</em> or <em>mounts</em> them to a folder—meaning:</p>
<p><strong>Mounting = attaching a drive to a folder in the filesystem</strong></p>
<p>For example:</p>
<div class="language-text highlight"><span class="filename">Text Only</span><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>Device: /dev/sda1
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>Mounted at: /mnt/omnissiah-vault
</code></pre></div>
<p>Once mounted:</p>
<ul>
<li>The drive is accessible through that folder path</li>
<li>Applications can read/write files there</li>
<li>You can organize your media, downloads, and settings</li>
</ul>
<p>If the drive isnt mounted, Linux can see the hardware but wont be able to access the data stored on it.</p>
<hr />
<h2 id="why-we-use-mnt">📘 Why We Use <code>/mnt/…</code></h2>
<p>Linux organizes storage under specific folders:</p>
<table>
<thead>
<tr>
<th>Path</th>
<th>Purpose</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>/home</code></td>
<td>Users personal files</td>
</tr>
<tr>
<td><code>/root</code></td>
<td>Root users files</td>
</tr>
<tr>
<td><code>/etc</code></td>
<td>System configuration files</td>
</tr>
<tr>
<td><code>/mnt</code></td>
<td>External drives mounted by the user</td>
</tr>
</tbody>
</table>
<p>We typically mount drives in <code>/mnt</code> to keep things organized, for example:</p>
<div class="language-text highlight"><span class="filename">Text Only</span><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>/mnt/omnissiah-vault
</code></pre></div>
<p>This makes it clear that the drive is external storage, not part of the system root.</p>
<hr />
<h2 id="what-is-a-file-system">🔧 What Is a File System?</h2>
<p>A <strong>file system</strong> determines how data is organized on a drive.</p>
<p>It controls:</p>
<ul>
<li>How files are stored</li>
<li>How permissions work</li>
<li>How large files can be</li>
<li>How reliable and fast the storage is</li>
</ul>
<p>Two major file systems matter for media management:</p>
<hr />
<h1 id="ext4-vs-ntfs-which-should-you-use">🆚 EXT4 vs NTFS — Which Should You Use?</h1>
<p>Below is a simple, clear comparison.</p>
<table>
<thead>
<tr>
<th>Feature</th>
<th>EXT4 (Linux Native)</th>
<th>NTFS (Windows Native)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Best OS support</td>
<td>Linux</td>
<td>Windows</td>
</tr>
<tr>
<td>Performance on Linux</td>
<td>⭐⭐⭐⭐ Fast</td>
<td>⭐ Slow (requires NTFS-3G driver)</td>
</tr>
<tr>
<td>Supports Linux permissions (chmod, chown)</td>
<td>✔ Yes</td>
<td>❌ No (emulated)</td>
</tr>
<tr>
<td>Good for Plex &amp; ARR stack</td>
<td>✔ Best choice</td>
<td>✔ Works but slower</td>
</tr>
<tr>
<td>Reliability</td>
<td>⭐⭐⭐⭐⭐ Excellent</td>
<td>⭐⭐⭐ Good</td>
</tr>
<tr>
<td>4K/large drive support</td>
<td>✔ Yes</td>
<td>✔ Yes</td>
</tr>
<tr>
<td>Automatic mounting</td>
<td>Easy</td>
<td>Slightly more complex</td>
</tr>
<tr>
<td>Ideal use case</td>
<td>Permanent Linux storage</td>
<td>External drive shared with Windows</td>
</tr>
</tbody>
</table>
<h3 id="choose-ext4-if-the-drive-stays-connected-to-your-raspberry-pilinux-system"><strong>Choose EXT4 if the drive stays connected to your Raspberry Pi/Linux system.</strong></h3>
<p>This is the recommended choice for <strong>media servers</strong>, <strong>Plex</strong>, and <strong>qBittorrent</strong> because:</p>
<ul>
<li>Its faster</li>
<li>Uses native permissions</li>
<li>More stable</li>
<li>Less CPU overhead</li>
<li>Easier integration with Docker</li>
</ul>
<h3 id="choose-ntfs-only-if-the-drive-must-also-be-used-on-windows"><strong>Choose NTFS only if the drive must also be used on Windows.</strong></h3>
<p>For example:</p>
<ul>
<li>You physically unplug the drive and connect it to a Windows PC</li>
<li>You want to browse the media on Windows without a network share</li>
</ul>
<hr />
<h2 id="accessing-an-ext4-drive-on-windows">🪟 Accessing an EXT4 Drive on Windows?</h2>
<p>EXT4 cannot be read by Windows <em>natively</em>.</p>
<p>However, <strong>this is not a problem</strong>, because:</p>
<h3 id="you-will-access-your-media-over-the-network-using-samba-smb">You will access your media over the network using <strong>Samba (SMB)</strong>.</h3>
<p>This means:</p>
<ul>
<li>You keep the performance, safety, and permissions of EXT4</li>
<li>Windows PCs can still browse the media like a shared network drive</li>
</ul>
<p>We will configure Samba later in an optional section:</p>
<p>👉 <em>“Accessing Your Media from Windows (Samba Setup)”</em></p>
<hr />
<h2 id="choose-your-mounting-ritual">📥 Choose Your Mounting Ritual</h2>
<p>Below are two scripts — pick one based on your file system choice.</p>
<h3 id="ext4-mounting-ritual-recommended">🟦 EXT4 Mounting Ritual (Recommended)</h3>
<p><strong>Download:</strong><br />
👉 <a href="../../scripts/shell/setup-mount-points/ext4.sh">bind-machine-spirits-ext4.sh</a></p>
<p>(Use this if your drive is formatted as EXT4 and stays connected permanently.)</p>
<hr />
<h3 id="ntfs-mounting-ritual-legacyoptional">🟨 NTFS Mounting Ritual (Legacy/Optional)</h3>
<p><strong>Download:</strong><br />
👉 <a href="../../scripts/shell/setup-mount-points/ntfs.sh">bind-machine-spirits-ntfs.sh</a></p>
<p>(Use this only if your drive must work on both Linux and Windows without Samba.)</p>
<hr />
<h2 id="what-happens-next">🧭 What Happens Next?</h2>
<p>Once you choose your file system and run the ritual script:</p>
<ol>
<li>Your mount point will be created</li>
<li><code>/etc/fstab</code> will be updated for automatic mounting</li>
<li>The drive will appear under <code>/mnt/omnissiah-vault</code></li>
<li>Subdirectories (movies, tv-shows, downloads, etc.) will be generated</li>
</ol>
<h2 id="next-step-install-docker">➡️ Next Step: Install Docker</h2>
<p>Proceed to the <strong>Install Docker</strong> step to prepare docker for media management.
Go to 👉 <strong><a href="../install-docker/">Install Docker</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>