Security

Token

There is no security token.

Firewall

main Name
Security enabled
Stateless

Configuration

Key Value
provider security.user.provider.concrete.app_user_provider
context main
entry_point App\Security\KbinAuthenticator
user_checker App\Security\UserChecker
access_denied_handler (none)
access_denied_url (none)
authenticators
[
  "two_factor"
  "remember_me"
  "App\Security\KbinAuthenticator"
  "App\Security\FacebookAuthenticator"
  "App\Security\GoogleAuthenticator"
  "App\Security\GithubAuthenticator"
  "App\Security\KeycloakAuthenticator"
]

Listeners

Listener Duration Response
Symfony\Component\Security\Http\Firewall\ChannelListener {#723
  -map: Symfony\Component\Security\Http\AccessMap {#722 …}
  -logger: Monolog\Logger {#783 …}
  -httpPort: 80
  -httpsPort: 443
}
0.00 ms (none)
Symfony\Component\Security\Http\Firewall\ContextListener {#706
  -tokenStorage: Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage {#1017 …}
  -sessionKey: "_security_main"
  -logger: Monolog\Logger {#783 …}
  -userProviders: Symfony\Component\DependencyInjection\Argument\RewindableGenerator {#705 …}
  -dispatcher: Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher {#747 …}
  -registered: false
  -trustResolver: Scheb\TwoFactorBundle\Security\Authentication\AuthenticationTrustResolver {#780 …}
  -sessionTrackerEnabler: Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage::enableUsageTracking(): void {#703 …}
}
0.90 ms (none)
Symfony\Component\Security\Http\Firewall\AuthenticatorManagerListener {#584
  -authenticatorManager: Symfony\Component\Security\Http\Authentication\AuthenticatorManager {#595 …}
}
0.00 ms (none)
Scheb\TwoFactorBundle\Security\Http\Firewall\TwoFactorAccessListener {#582
  -twoFactorFirewallConfig: Scheb\TwoFactorBundle\Security\TwoFactor\TwoFactorFirewallConfig {#842 …}
  -tokenStorage: Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage {#1018 …}
  -twoFactorAccessDecider: Scheb\TwoFactorBundle\Security\Authorization\TwoFactorAccessDecider {#581 …}
}
0.04 ms (none)
Symfony\Component\Security\Http\Firewall\AccessListener {#579
  -tokenStorage: Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage {#1018 …}
  -accessDecisionManager: Symfony\Component\Security\Core\Authorization\TraceableAccessDecisionManager {#937 …}
  -map: Symfony\Component\Security\Http\AccessMap {#722 …}
}
0.00 ms (none)
Symfony\Component\Security\Http\Firewall\LogoutListener {#786
  -tokenStorage: Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage {#1018 …}
  -options: [
    "csrf_parameter" => "_csrf_token"
    "csrf_token_id" => "logout"
    "logout_path" => "app_logout"
  ]
  -httpUtils: Symfony\Component\Security\Http\HttpUtils {#841 …}
  -csrfTokenManager: Symfony\Component\Security\Csrf\CsrfTokenManager {#1015 …}
  -eventDispatcher: Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher {#747 …}
}
0.00 ms (none)

Authenticators

No authenticators have been recorded. Check previous profiles on your authentication endpoint.

Access Decision

affirmative Strategy
# Voter class
1
"Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter"
2
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
3
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
4
"Symfony\Component\Security\Core\Authorization\Voter\ExpressionVoter"
5
"App\Security\Voter\EntryCommentVoter"
6
"App\Security\Voter\EntryVoter"
7
"App\Security\Voter\MagazineVoter"
8
"App\Security\Voter\MessageThreadVoter"
9
"App\Security\Voter\MessageVoter"
10
"App\Security\Voter\NotificationVoter"
11
"App\Security\Voter\OAuth2UserConsentVoter"
12
"App\Security\Voter\PostCommentVoter"
13
"App\Security\Voter\PostVoter"
14
"App\Security\Voter\UserVoter"

Access decision log

# Result Attributes Object
1 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
2 DENIED moderate
App\Entity\Entry {#2419
  +user: Proxies\__CG__\App\Entity\User {#1970 …}
  +magazine: App\Entity\Magazine {#265
    +icon: Proxies\__CG__\App\Entity\Image {#246 …}
    +name: "piracy@lemmy.dbzer0.com"
    +title: "piracy"
    +description: """
      ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
      \n
      ---\n
      \n
      ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
      \n
      **1**. Posts must be related to the discussion of digital piracy\n
      \n
      **2**. Don’t request invites, trade, sell, or self-promote\n
      \n
      **3**. Don’t request or link to specific pirated titles, including DMs\n
      \n
      **4**. Don’t submit low-quality posts, be entitled, or harass others\n
      \n
      **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
      \n
      ---\n
      \n
      [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
      ---------------------------------------------------------------------------\n
      \n
      ### Loot, Pillage, & Plunder\n
      \n
      - [📜 Megathread](https://rentry.co/megathread)\n
      - [🪶 FAQ](https://rentry.co/piracy-faq)\n
      - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
      - [🪶 Rules](https://rentry.co/piracy-rules)\n
      \n
      ---\n
      \n
      💰 Please help cover server costs.\n
      \n
      [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
      \n
      ---
      """
    +rules: null
    +subscriptionsCount: 1
    +entryCount: 866
    +entryCommentCount: 20194
    +postCount: 7
    +postCommentCount: 149
    +isAdult: false
    +customCss: null
    +lastActive: DateTime @1729581369 {#275
      date: 2024-10-22 09:16:09.0 +02:00
    }
    +markedForDeletionAt: null
    +tags: null
    +moderators: Doctrine\ORM\PersistentCollection {#237 …}
    +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
    +entries: Doctrine\ORM\PersistentCollection {#180 …}
    +posts: Doctrine\ORM\PersistentCollection {#138 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
    +bans: Doctrine\ORM\PersistentCollection {#117 …}
    +reports: Doctrine\ORM\PersistentCollection {#103 …}
    +badges: Doctrine\ORM\PersistentCollection {#81 …}
    +logs: Doctrine\ORM\PersistentCollection {#71 …}
    +awards: Doctrine\ORM\PersistentCollection {#1346 …}
    +categories: Doctrine\ORM\PersistentCollection {#1823 …}
    -id: 51
    +apId: "piracy@lemmy.dbzer0.com"
    +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
    +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
    +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
    +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
    +apDomain: "lemmy.dbzer0.com"
    +apPreferredUsername: "piracy"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: null
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1708748229 {#269
      date: 2024-02-24 05:17:09.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697197339 {#271
      date: 2023-10-13 13:42:19.0 +02:00
    }
  }
  +image: Proxies\__CG__\App\Entity\Image {#1943 …}
  +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
  +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
  +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
  +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
  +body: """
    The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
    ==============================================================================================\n
    \n
    *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
    \n
    ---\n
    \n
    We will setup the following applications in this guide:\n
    \n
    - **Docker**\n
    - **AdguardHome** - Adblocker for all your devices\n
    - **Jellyfin/Plex** - For watching the content you download\n
    - **Qbittorrent** - Torrent downloader\n
    - **Jackett** - Torrent indexers provider\n
    - **Flaresolverr** - For auto solving captcha in some of the indexers\n
    - **Sonarr** - *arr service for automatically downloading TV shows\n
    - **Radarr** - *arr service for movies\n
    - **Readarr** - *arr service for (audio)books\n
    - **lidarr** - *arr service for music\n
    - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
    - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
    - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
    \n
    Once you are done, your dashboard will look something like this.\n
    \n
    \u{200B}\n
    \n
    [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
    \n
    I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
    \n
    Hardware\n
    --------\n
    \n
    You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
    \n
    \u{200B}\n
    \n
    [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
    \n
    Operating system\n
    ----------------\n
    \n
    I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
    \n
    Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
    \n
    Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">ssh username@server-ip \n
    </span><span style="color:#323232;"># username you selected during installation\n
    </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
    </span>\n
    ```\n
    \n
    Create the directories for audiobooks, books, movies, music and tv.\n
    -------------------------------------------------------------------\n
    \n
    I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
    \n
    We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">mkdir ~/server\n
    </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
    </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;"># Creating the directories for torrents\n
    </span><span style="color:#323232;">cd ~/server/torrents\n
    </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;">cd ~/server/media\n
    </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
    </span>\n
    ```\n
    \n
    Installing docker and docker-compose\n
    ------------------------------------\n
    \n
    **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
    \n
    ```\n
    \n
    <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
    </span><span style="color:#323232;">sudo apt-get update\n
    </span><span style="color:#323232;">sudo apt-get install \n
    </span><span style="color:#323232;">    apt-transport-https \n
    </span><span style="color:#323232;">    ca-certificates \n
    </span><span style="color:#323232;">    curl \n
    </span><span style="color:#323232;">    gnupg \n
    </span><span style="color:#323232;">    lsb-release\n
    </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
    </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
    </span><span style="color:#323232;"># Setup the repository\n
    </span><span style="color:#323232;">echo \n
    </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
    </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
    </span><span style="color:#323232;"># Install Docker Engine\n
    </span><span style="color:#323232;">sudo apt-get update\n
    </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
    </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
    </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
    </span>\n
    ```\n
    \n
    > Sign out by typing exit in the console and then ssh back in\n
    \n
    **Docker compose** <https://docs.docker.com/compose/install/>\n
    \n
    ```\n
    \n
    <span style="color:#323232;"># Download the current stable release of Docker Compose\n
    </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
    </span><span style="color:#323232;"># Apply executable permissions to the binary\n
    </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
    </span>\n
    ```\n
    \n
    Creating the compose file for Adguard home\n
    ------------------------------------------\n
    \n
    First setup Adguard home in a new compose file.\n
    \n
    Docker compose uses a yml file. All of the files contain version and services object.\n
    \n
    Create a directory for keeping the compose files.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">mkdir ~/server/compose\n
    </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
    </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
    </span>\n
    ```\n
    \n
    Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">version: '3.3'\n
    </span><span style="color:#323232;">services:\n
    </span><span style="color:#323232;">    run:\n
    </span><span style="color:#323232;">        container_name: adguardhome\n
    </span><span style="color:#323232;">        restart: unless-stopped\n
    </span><span style="color:#323232;">        volumes:\n
    </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
    </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
    </span><span style="color:#323232;">        ports:\n
    </span><span style="color:#323232;">            - '53:53/tcp'\n
    </span><span style="color:#323232;">            - '53:53/udp'\n
    </span><span style="color:#323232;">            - '67:67/udp'\n
    </span><span style="color:#323232;">            - '68:68/udp'\n
    </span><span style="color:#323232;">            - '68:68/tcp'\n
    </span><span style="color:#323232;">            - '80:80/tcp'\n
    </span><span style="color:#323232;">            - '443:443/tcp'\n
    </span><span style="color:#323232;">            - '443:443/udp'\n
    </span><span style="color:#323232;">            - '3000:3000/tcp'\n
    </span><span style="color:#323232;">        image: adguard/adguardhome\n
    </span>\n
    ```\n
    \n
    Save the file and start the container using the following command.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">docker-compose up -d\n
    </span>\n
    ```\n
    \n
    Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
    \n
    Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
    \n
    [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
    \n
    Creating the compose file for media-server\n
    ------------------------------------------\n
    \n
    Jackett\n
    -------\n
    \n
    Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
    \n
    There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">jackett:\n
    </span><span style="color:#323232;">    container_name: jackett\n
    </span><span style="color:#323232;">    image: linuxserver/jackett\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '9117:9117'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span><span style="color:#323232;">prowlarr:\n
    </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
    </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '9696:9696'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Sonarr - TV\n
    -----------\n
    \n
    Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">sonarr:\n
    </span><span style="color:#323232;">    container_name: sonarr\n
    </span><span style="color:#323232;">    image: linuxserver/sonarr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8989:8989'\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Radarr - Movies\n
    ---------------\n
    \n
    Sonarr but for movies.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">radarr:\n
    </span><span style="color:#323232;">    container_name: radarr\n
    </span><span style="color:#323232;">    image: linuxserver/radarr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '7878:7878'\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Lidarr - Music\n
    --------------\n
    \n
    ```\n
    \n
    <span style="color:#323232;">lidarr:\n
    </span><span style="color:#323232;">    container_name: lidarr\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8686:8686'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Readarr - Books and AudioBooks\n
    ------------------------------\n
    \n
    ```\n
    \n
    <span style="color:#323232;"># Notice the different port for the audiobook container\n
    </span><span style="color:#323232;">readarr:\n
    </span><span style="color:#323232;">    container_name: readarr\n
    </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8787:8787'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;">readarr-audio-books:\n
    </span><span style="color:#323232;">    container_name: readarr-audio-books\n
    </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8786:8787'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Bazarr - Subtitles\n
    ------------------\n
    \n
    ```\n
    \n
    <span style="color:#323232;">bazarr:\n
    </span><span style="color:#323232;">    container_name: bazarr\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '6767:6767'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Jellyfin\n
    --------\n
    \n
    I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
    \n
    I will talk about the devices section later on.\n
    \n
    For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">jellyfin:\n
    </span><span style="color:#323232;">    container_name: jellyfin\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8096:8096'\n
    </span><span style="color:#323232;">    devices:\n
    </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
    </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;">plex:\n
    </span><span style="color:#323232;">    container_name: plex\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '32400:32400'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">      - VERSION=docker\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
    </span><span style="color:#323232;">    devices:\n
    </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
    </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Overseer/Ombi - Requesting Movies and TV shows\n
    ----------------------------------------------\n
    \n
    I use both. You can use ombi only if you don’t plan to install plex.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">ombi:\n
    </span><span style="color:#323232;">    container_name: ombi\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '3579:3579'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;">overseerr:\n
    </span><span style="color:#323232;">    container_name: overseerr\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '5055:5055'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Qbittorrent - Torrent downloader\n
    --------------------------------\n
    \n
    I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
    \n
    Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">qflood:\n
    </span><span style="color:#323232;">    container_name: qflood\n
    </span><span style="color:#323232;">    image: hotio/qflood\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - "8080:8080"\n
    </span><span style="color:#323232;">      - "3005:3000"\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - UMASK=002\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Heimdall - Dashboard\n
    --------------------\n
    \n
    There are multiple dashboard applications but I use Heimdall.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">heimdall:\n
    </span><span style="color:#323232;">    container_name: heimdall\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - 8090:80\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Flaresolverr - Solves cloudflare captcha\n
    ----------------------------------------\n
    \n
    If your indexers use captcha, you will need flaresolverr for them.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">flaresolverr:\n
    </span><span style="color:#323232;">    container_name: flaresolverr\n
    </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8191:8191'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Transcoding\n
    -----------\n
    \n
    As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
    \n
    <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
    \n
    Generally, the devices are same for intel gpu transcoding.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">devices:\n
    </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
    </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
    </span>\n
    ```\n
    \n
    To monitor the gpu usage install `intel-gpu-tools`\n
    \n
    ```\n
    \n
    <span style="color:#323232;">sudo apt install intel-gpu-tools\n
    </span>\n
    ```\n
    \n
    Now, create a compose file for media server.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">mkdir ~/server/compose/media-server\n
    </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
    </span>\n
    ```\n
    \n
    And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
    \n
    Configuring the docker stack\n
    ----------------------------\n
    \n
    Start the containers using the same command we used to start the adguard home container.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">docker-compose up -d\n
    </span>\n
    ```\n
    \n
    Jackett\n
    -------\n
    \n
    Navigate to `YOUR_SERVER_IP:9117`\n
    \n
    Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
    \n
    \u{200B}\n
    \n
    [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
    \n
    Qbittorrent\n
    -----------\n
    \n
    Navigate to `YOUR_SERVER_IP:8080`\n
    \n
    The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
    \n
    Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
    \n
    Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
    \n
    Sonarr\n
    ------\n
    \n
    Navigate to `YOUR_SERVER_IP:8989`\n
    \n
    - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
    - Under indexers, for each indexer you added in Jackett \n
        - Click on add button\n
        - Select Torzab\n
        - Copy the tornzab feed for the indexer from jackett\n
        - Copy the api key from jackett\n
        - Select the categories you want\n
        - Test and save\n
    - Under general, define the root folder as `/data/media/tv`\n
    \n
    > Repeat this process for Radarr, Lidarr and readarr.\n
    \n
    Use `/data/media/movies` as root for Radarr and so on.\n
    \n
    > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
    \n
    Bazarr\n
    ------\n
    \n
    Navigate to `YOUR_SERVER_IP:6767`\n
    \n
    Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
    \n
    Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
    \n
    Jellyfin\n
    --------\n
    \n
    Go to `YOUR_SERVER_IP:8096`\n
    \n
    - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
    - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
    \n
    Monitor GPU usage while playing content using\n
    \n
    ```\n
    \n
    <span style="color:#323232;">sudo intel_gpu_top\n
    </span>\n
    ```\n
    \n
    Heimdall\n
    --------\n
    \n
    Navigate to `YOUR_SERVER_IP:8090`\n
    \n
    Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
    \n
    Updating docker images\n
    ----------------------\n
    \n
    With docker compose updates are very easy.\n
    \n
    - Navigate to the compose file directory `~/server/compose/media-server`.\n
    - Then `docker-compose pull` to download the latest images.\n
    - And finally `docker-compose up -d` to use the latest images.\n
    - Remove old images by `docker system prune -a`\n
    \n
    What’s next\n
    -----------\n
    \n
    - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
    - You can read about port forwarding to access your server over the internet.
    """
  +type: "image"
  +lang: "en"
  +isOc: false
  +hasEmbed: true
  +commentCount: 39
  +favouriteCount: 125
  +score: 0
  +isAdult: false
  +sticky: false
  +lastActive: DateTime @1723385793 {#2414
    date: 2024-08-11 16:16:33.0 +02:00
  }
  +ip: null
  +adaAmount: 0
  +tags: null
  +mentions: null
  +comments: Doctrine\ORM\PersistentCollection {#1866 …}
  +votes: Doctrine\ORM\PersistentCollection {#1966 …}
  +reports: Doctrine\ORM\PersistentCollection {#1946 …}
  +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
  +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
  +badges: Doctrine\ORM\PersistentCollection {#2439 …}
  +children: []
  -id: 4934
  -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
  -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
  +cross: false
  +upVotes: 0
  +downVotes: 0
  +ranking: 1696933577
  +visibility: "visible             "
  +apId: "https://lemmy.dbzer0.com/post/5911320"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696847177 {#1793
    date: 2023-10-09 12:26:17.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS DENIED
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
3 DENIED edit
App\Entity\Entry {#2419
  +user: Proxies\__CG__\App\Entity\User {#1970 …}
  +magazine: App\Entity\Magazine {#265
    +icon: Proxies\__CG__\App\Entity\Image {#246 …}
    +name: "piracy@lemmy.dbzer0.com"
    +title: "piracy"
    +description: """
      ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
      \n
      ---\n
      \n
      ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
      \n
      **1**. Posts must be related to the discussion of digital piracy\n
      \n
      **2**. Don’t request invites, trade, sell, or self-promote\n
      \n
      **3**. Don’t request or link to specific pirated titles, including DMs\n
      \n
      **4**. Don’t submit low-quality posts, be entitled, or harass others\n
      \n
      **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
      \n
      ---\n
      \n
      [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
      ---------------------------------------------------------------------------\n
      \n
      ### Loot, Pillage, &amp; Plunder\n
      \n
      - [📜 Megathread](https://rentry.co/megathread)\n
      - [🪶 FAQ](https://rentry.co/piracy-faq)\n
      - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
      - [🪶 Rules](https://rentry.co/piracy-rules)\n
      \n
      ---\n
      \n
      💰 Please help cover server costs.\n
      \n
      [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
      \n
      ---
      """
    +rules: null
    +subscriptionsCount: 1
    +entryCount: 866
    +entryCommentCount: 20194
    +postCount: 7
    +postCommentCount: 149
    +isAdult: false
    +customCss: null
    +lastActive: DateTime @1729581369 {#275
      date: 2024-10-22 09:16:09.0 +02:00
    }
    +markedForDeletionAt: null
    +tags: null
    +moderators: Doctrine\ORM\PersistentCollection {#237 …}
    +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
    +entries: Doctrine\ORM\PersistentCollection {#180 …}
    +posts: Doctrine\ORM\PersistentCollection {#138 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
    +bans: Doctrine\ORM\PersistentCollection {#117 …}
    +reports: Doctrine\ORM\PersistentCollection {#103 …}
    +badges: Doctrine\ORM\PersistentCollection {#81 …}
    +logs: Doctrine\ORM\PersistentCollection {#71 …}
    +awards: Doctrine\ORM\PersistentCollection {#1346 …}
    +categories: Doctrine\ORM\PersistentCollection {#1823 …}
    -id: 51
    +apId: "piracy@lemmy.dbzer0.com"
    +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
    +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
    +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
    +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
    +apDomain: "lemmy.dbzer0.com"
    +apPreferredUsername: "piracy"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: null
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1708748229 {#269
      date: 2024-02-24 05:17:09.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697197339 {#271
      date: 2023-10-13 13:42:19.0 +02:00
    }
  }
  +image: Proxies\__CG__\App\Entity\Image {#1943 …}
  +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
  +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
  +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
  +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
  +body: """
    The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
    ==============================================================================================\n
    \n
    *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
    \n
    ---\n
    \n
    We will setup the following applications in this guide:\n
    \n
    - **Docker**\n
    - **AdguardHome** - Adblocker for all your devices\n
    - **Jellyfin/Plex** - For watching the content you download\n
    - **Qbittorrent** - Torrent downloader\n
    - **Jackett** - Torrent indexers provider\n
    - **Flaresolverr** - For auto solving captcha in some of the indexers\n
    - **Sonarr** - *arr service for automatically downloading TV shows\n
    - **Radarr** - *arr service for movies\n
    - **Readarr** - *arr service for (audio)books\n
    - **lidarr** - *arr service for music\n
    - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
    - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
    - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
    \n
    Once you are done, your dashboard will look something like this.\n
    \n
    \u{200B}\n
    \n
    [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
    \n
    I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
    \n
    Hardware\n
    --------\n
    \n
    You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
    \n
    \u{200B}\n
    \n
    [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
    \n
    Operating system\n
    ----------------\n
    \n
    I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
    \n
    Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
    \n
    Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">ssh username@server-ip \n
    </span><span style="color:#323232;"># username you selected during installation\n
    </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
    </span>\n
    ```\n
    \n
    Create the directories for audiobooks, books, movies, music and tv.\n
    -------------------------------------------------------------------\n
    \n
    I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
    \n
    We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">mkdir ~/server\n
    </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
    </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;"># Creating the directories for torrents\n
    </span><span style="color:#323232;">cd ~/server/torrents\n
    </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;">cd ~/server/media\n
    </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
    </span>\n
    ```\n
    \n
    Installing docker and docker-compose\n
    ------------------------------------\n
    \n
    **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
    \n
    ```\n
    \n
    <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
    </span><span style="color:#323232;">sudo apt-get update\n
    </span><span style="color:#323232;">sudo apt-get install \n
    </span><span style="color:#323232;">    apt-transport-https \n
    </span><span style="color:#323232;">    ca-certificates \n
    </span><span style="color:#323232;">    curl \n
    </span><span style="color:#323232;">    gnupg \n
    </span><span style="color:#323232;">    lsb-release\n
    </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
    </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
    </span><span style="color:#323232;"># Setup the repository\n
    </span><span style="color:#323232;">echo \n
    </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
    </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
    </span><span style="color:#323232;"># Install Docker Engine\n
    </span><span style="color:#323232;">sudo apt-get update\n
    </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
    </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
    </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
    </span>\n
    ```\n
    \n
    > Sign out by typing exit in the console and then ssh back in\n
    \n
    **Docker compose** <https://docs.docker.com/compose/install/>\n
    \n
    ```\n
    \n
    <span style="color:#323232;"># Download the current stable release of Docker Compose\n
    </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
    </span><span style="color:#323232;"># Apply executable permissions to the binary\n
    </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
    </span>\n
    ```\n
    \n
    Creating the compose file for Adguard home\n
    ------------------------------------------\n
    \n
    First setup Adguard home in a new compose file.\n
    \n
    Docker compose uses a yml file. All of the files contain version and services object.\n
    \n
    Create a directory for keeping the compose files.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">mkdir ~/server/compose\n
    </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
    </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
    </span>\n
    ```\n
    \n
    Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">version: '3.3'\n
    </span><span style="color:#323232;">services:\n
    </span><span style="color:#323232;">    run:\n
    </span><span style="color:#323232;">        container_name: adguardhome\n
    </span><span style="color:#323232;">        restart: unless-stopped\n
    </span><span style="color:#323232;">        volumes:\n
    </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
    </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
    </span><span style="color:#323232;">        ports:\n
    </span><span style="color:#323232;">            - '53:53/tcp'\n
    </span><span style="color:#323232;">            - '53:53/udp'\n
    </span><span style="color:#323232;">            - '67:67/udp'\n
    </span><span style="color:#323232;">            - '68:68/udp'\n
    </span><span style="color:#323232;">            - '68:68/tcp'\n
    </span><span style="color:#323232;">            - '80:80/tcp'\n
    </span><span style="color:#323232;">            - '443:443/tcp'\n
    </span><span style="color:#323232;">            - '443:443/udp'\n
    </span><span style="color:#323232;">            - '3000:3000/tcp'\n
    </span><span style="color:#323232;">        image: adguard/adguardhome\n
    </span>\n
    ```\n
    \n
    Save the file and start the container using the following command.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">docker-compose up -d\n
    </span>\n
    ```\n
    \n
    Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
    \n
    Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
    \n
    [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
    \n
    Creating the compose file for media-server\n
    ------------------------------------------\n
    \n
    Jackett\n
    -------\n
    \n
    Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
    \n
    There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">jackett:\n
    </span><span style="color:#323232;">    container_name: jackett\n
    </span><span style="color:#323232;">    image: linuxserver/jackett\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '9117:9117'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span><span style="color:#323232;">prowlarr:\n
    </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
    </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '9696:9696'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Sonarr - TV\n
    -----------\n
    \n
    Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">sonarr:\n
    </span><span style="color:#323232;">    container_name: sonarr\n
    </span><span style="color:#323232;">    image: linuxserver/sonarr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8989:8989'\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Radarr - Movies\n
    ---------------\n
    \n
    Sonarr but for movies.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">radarr:\n
    </span><span style="color:#323232;">    container_name: radarr\n
    </span><span style="color:#323232;">    image: linuxserver/radarr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '7878:7878'\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Lidarr - Music\n
    --------------\n
    \n
    ```\n
    \n
    <span style="color:#323232;">lidarr:\n
    </span><span style="color:#323232;">    container_name: lidarr\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8686:8686'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Readarr - Books and AudioBooks\n
    ------------------------------\n
    \n
    ```\n
    \n
    <span style="color:#323232;"># Notice the different port for the audiobook container\n
    </span><span style="color:#323232;">readarr:\n
    </span><span style="color:#323232;">    container_name: readarr\n
    </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8787:8787'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;">readarr-audio-books:\n
    </span><span style="color:#323232;">    container_name: readarr-audio-books\n
    </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8786:8787'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Bazarr - Subtitles\n
    ------------------\n
    \n
    ```\n
    \n
    <span style="color:#323232;">bazarr:\n
    </span><span style="color:#323232;">    container_name: bazarr\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '6767:6767'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Jellyfin\n
    --------\n
    \n
    I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
    \n
    I will talk about the devices section later on.\n
    \n
    For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">jellyfin:\n
    </span><span style="color:#323232;">    container_name: jellyfin\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8096:8096'\n
    </span><span style="color:#323232;">    devices:\n
    </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
    </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;">plex:\n
    </span><span style="color:#323232;">    container_name: plex\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '32400:32400'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">      - VERSION=docker\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
    </span><span style="color:#323232;">    devices:\n
    </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
    </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Overseer/Ombi - Requesting Movies and TV shows\n
    ----------------------------------------------\n
    \n
    I use both. You can use ombi only if you don’t plan to install plex.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">ombi:\n
    </span><span style="color:#323232;">    container_name: ombi\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '3579:3579'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;">overseerr:\n
    </span><span style="color:#323232;">    container_name: overseerr\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '5055:5055'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Qbittorrent - Torrent downloader\n
    --------------------------------\n
    \n
    I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
    \n
    Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">qflood:\n
    </span><span style="color:#323232;">    container_name: qflood\n
    </span><span style="color:#323232;">    image: hotio/qflood\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - "8080:8080"\n
    </span><span style="color:#323232;">      - "3005:3000"\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - UMASK=002\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Heimdall - Dashboard\n
    --------------------\n
    \n
    There are multiple dashboard applications but I use Heimdall.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">heimdall:\n
    </span><span style="color:#323232;">    container_name: heimdall\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - 8090:80\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Flaresolverr - Solves cloudflare captcha\n
    ----------------------------------------\n
    \n
    If your indexers use captcha, you will need flaresolverr for them.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">flaresolverr:\n
    </span><span style="color:#323232;">    container_name: flaresolverr\n
    </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8191:8191'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Transcoding\n
    -----------\n
    \n
    As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
    \n
    <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
    \n
    Generally, the devices are same for intel gpu transcoding.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">devices:\n
    </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
    </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
    </span>\n
    ```\n
    \n
    To monitor the gpu usage install `intel-gpu-tools`\n
    \n
    ```\n
    \n
    <span style="color:#323232;">sudo apt install intel-gpu-tools\n
    </span>\n
    ```\n
    \n
    Now, create a compose file for media server.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">mkdir ~/server/compose/media-server\n
    </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
    </span>\n
    ```\n
    \n
    And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
    \n
    Configuring the docker stack\n
    ----------------------------\n
    \n
    Start the containers using the same command we used to start the adguard home container.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">docker-compose up -d\n
    </span>\n
    ```\n
    \n
    Jackett\n
    -------\n
    \n
    Navigate to `YOUR_SERVER_IP:9117`\n
    \n
    Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
    \n
    \u{200B}\n
    \n
    [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
    \n
    Qbittorrent\n
    -----------\n
    \n
    Navigate to `YOUR_SERVER_IP:8080`\n
    \n
    The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
    \n
    Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
    \n
    Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
    \n
    Sonarr\n
    ------\n
    \n
    Navigate to `YOUR_SERVER_IP:8989`\n
    \n
    - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
    - Under indexers, for each indexer you added in Jackett \n
        - Click on add button\n
        - Select Torzab\n
        - Copy the tornzab feed for the indexer from jackett\n
        - Copy the api key from jackett\n
        - Select the categories you want\n
        - Test and save\n
    - Under general, define the root folder as `/data/media/tv`\n
    \n
    > Repeat this process for Radarr, Lidarr and readarr.\n
    \n
    Use `/data/media/movies` as root for Radarr and so on.\n
    \n
    > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
    \n
    Bazarr\n
    ------\n
    \n
    Navigate to `YOUR_SERVER_IP:6767`\n
    \n
    Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
    \n
    Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
    \n
    Jellyfin\n
    --------\n
    \n
    Go to `YOUR_SERVER_IP:8096`\n
    \n
    - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
    - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
    \n
    Monitor GPU usage while playing content using\n
    \n
    ```\n
    \n
    <span style="color:#323232;">sudo intel_gpu_top\n
    </span>\n
    ```\n
    \n
    Heimdall\n
    --------\n
    \n
    Navigate to `YOUR_SERVER_IP:8090`\n
    \n
    Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
    \n
    Updating docker images\n
    ----------------------\n
    \n
    With docker compose updates are very easy.\n
    \n
    - Navigate to the compose file directory `~/server/compose/media-server`.\n
    - Then `docker-compose pull` to download the latest images.\n
    - And finally `docker-compose up -d` to use the latest images.\n
    - Remove old images by `docker system prune -a`\n
    \n
    What’s next\n
    -----------\n
    \n
    - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
    - You can read about port forwarding to access your server over the internet.
    """
  +type: "image"
  +lang: "en"
  +isOc: false
  +hasEmbed: true
  +commentCount: 39
  +favouriteCount: 125
  +score: 0
  +isAdult: false
  +sticky: false
  +lastActive: DateTime @1723385793 {#2414
    date: 2024-08-11 16:16:33.0 +02:00
  }
  +ip: null
  +adaAmount: 0
  +tags: null
  +mentions: null
  +comments: Doctrine\ORM\PersistentCollection {#1866 …}
  +votes: Doctrine\ORM\PersistentCollection {#1966 …}
  +reports: Doctrine\ORM\PersistentCollection {#1946 …}
  +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
  +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
  +badges: Doctrine\ORM\PersistentCollection {#2439 …}
  +children: []
  -id: 4934
  -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
  -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
  +cross: false
  +upVotes: 0
  +downVotes: 0
  +ranking: 1696933577
  +visibility: "visible             "
  +apId: "https://lemmy.dbzer0.com/post/5911320"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696847177 {#1793
    date: 2023-10-09 12:26:17.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS DENIED
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
4 DENIED moderate
App\Entity\Entry {#2419
  +user: Proxies\__CG__\App\Entity\User {#1970 …}
  +magazine: App\Entity\Magazine {#265
    +icon: Proxies\__CG__\App\Entity\Image {#246 …}
    +name: "piracy@lemmy.dbzer0.com"
    +title: "piracy"
    +description: """
      ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
      \n
      ---\n
      \n
      ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
      \n
      **1**. Posts must be related to the discussion of digital piracy\n
      \n
      **2**. Don’t request invites, trade, sell, or self-promote\n
      \n
      **3**. Don’t request or link to specific pirated titles, including DMs\n
      \n
      **4**. Don’t submit low-quality posts, be entitled, or harass others\n
      \n
      **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
      \n
      ---\n
      \n
      [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
      ---------------------------------------------------------------------------\n
      \n
      ### Loot, Pillage, &amp; Plunder\n
      \n
      - [📜 Megathread](https://rentry.co/megathread)\n
      - [🪶 FAQ](https://rentry.co/piracy-faq)\n
      - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
      - [🪶 Rules](https://rentry.co/piracy-rules)\n
      \n
      ---\n
      \n
      💰 Please help cover server costs.\n
      \n
      [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
      \n
      ---
      """
    +rules: null
    +subscriptionsCount: 1
    +entryCount: 866
    +entryCommentCount: 20194
    +postCount: 7
    +postCommentCount: 149
    +isAdult: false
    +customCss: null
    +lastActive: DateTime @1729581369 {#275
      date: 2024-10-22 09:16:09.0 +02:00
    }
    +markedForDeletionAt: null
    +tags: null
    +moderators: Doctrine\ORM\PersistentCollection {#237 …}
    +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
    +entries: Doctrine\ORM\PersistentCollection {#180 …}
    +posts: Doctrine\ORM\PersistentCollection {#138 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
    +bans: Doctrine\ORM\PersistentCollection {#117 …}
    +reports: Doctrine\ORM\PersistentCollection {#103 …}
    +badges: Doctrine\ORM\PersistentCollection {#81 …}
    +logs: Doctrine\ORM\PersistentCollection {#71 …}
    +awards: Doctrine\ORM\PersistentCollection {#1346 …}
    +categories: Doctrine\ORM\PersistentCollection {#1823 …}
    -id: 51
    +apId: "piracy@lemmy.dbzer0.com"
    +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
    +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
    +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
    +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
    +apDomain: "lemmy.dbzer0.com"
    +apPreferredUsername: "piracy"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: null
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1708748229 {#269
      date: 2024-02-24 05:17:09.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697197339 {#271
      date: 2023-10-13 13:42:19.0 +02:00
    }
  }
  +image: Proxies\__CG__\App\Entity\Image {#1943 …}
  +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
  +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
  +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
  +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
  +body: """
    The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
    ==============================================================================================\n
    \n
    *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
    \n
    ---\n
    \n
    We will setup the following applications in this guide:\n
    \n
    - **Docker**\n
    - **AdguardHome** - Adblocker for all your devices\n
    - **Jellyfin/Plex** - For watching the content you download\n
    - **Qbittorrent** - Torrent downloader\n
    - **Jackett** - Torrent indexers provider\n
    - **Flaresolverr** - For auto solving captcha in some of the indexers\n
    - **Sonarr** - *arr service for automatically downloading TV shows\n
    - **Radarr** - *arr service for movies\n
    - **Readarr** - *arr service for (audio)books\n
    - **lidarr** - *arr service for music\n
    - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
    - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
    - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
    \n
    Once you are done, your dashboard will look something like this.\n
    \n
    \u{200B}\n
    \n
    [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
    \n
    I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
    \n
    Hardware\n
    --------\n
    \n
    You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
    \n
    \u{200B}\n
    \n
    [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
    \n
    Operating system\n
    ----------------\n
    \n
    I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
    \n
    Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
    \n
    Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">ssh username@server-ip \n
    </span><span style="color:#323232;"># username you selected during installation\n
    </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
    </span>\n
    ```\n
    \n
    Create the directories for audiobooks, books, movies, music and tv.\n
    -------------------------------------------------------------------\n
    \n
    I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
    \n
    We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">mkdir ~/server\n
    </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
    </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;"># Creating the directories for torrents\n
    </span><span style="color:#323232;">cd ~/server/torrents\n
    </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;">cd ~/server/media\n
    </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
    </span>\n
    ```\n
    \n
    Installing docker and docker-compose\n
    ------------------------------------\n
    \n
    **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
    \n
    ```\n
    \n
    <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
    </span><span style="color:#323232;">sudo apt-get update\n
    </span><span style="color:#323232;">sudo apt-get install \n
    </span><span style="color:#323232;">    apt-transport-https \n
    </span><span style="color:#323232;">    ca-certificates \n
    </span><span style="color:#323232;">    curl \n
    </span><span style="color:#323232;">    gnupg \n
    </span><span style="color:#323232;">    lsb-release\n
    </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
    </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
    </span><span style="color:#323232;"># Setup the repository\n
    </span><span style="color:#323232;">echo \n
    </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
    </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
    </span><span style="color:#323232;"># Install Docker Engine\n
    </span><span style="color:#323232;">sudo apt-get update\n
    </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
    </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
    </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
    </span>\n
    ```\n
    \n
    > Sign out by typing exit in the console and then ssh back in\n
    \n
    **Docker compose** <https://docs.docker.com/compose/install/>\n
    \n
    ```\n
    \n
    <span style="color:#323232;"># Download the current stable release of Docker Compose\n
    </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
    </span><span style="color:#323232;"># Apply executable permissions to the binary\n
    </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
    </span>\n
    ```\n
    \n
    Creating the compose file for Adguard home\n
    ------------------------------------------\n
    \n
    First setup Adguard home in a new compose file.\n
    \n
    Docker compose uses a yml file. All of the files contain version and services object.\n
    \n
    Create a directory for keeping the compose files.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">mkdir ~/server/compose\n
    </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
    </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
    </span>\n
    ```\n
    \n
    Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">version: '3.3'\n
    </span><span style="color:#323232;">services:\n
    </span><span style="color:#323232;">    run:\n
    </span><span style="color:#323232;">        container_name: adguardhome\n
    </span><span style="color:#323232;">        restart: unless-stopped\n
    </span><span style="color:#323232;">        volumes:\n
    </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
    </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
    </span><span style="color:#323232;">        ports:\n
    </span><span style="color:#323232;">            - '53:53/tcp'\n
    </span><span style="color:#323232;">            - '53:53/udp'\n
    </span><span style="color:#323232;">            - '67:67/udp'\n
    </span><span style="color:#323232;">            - '68:68/udp'\n
    </span><span style="color:#323232;">            - '68:68/tcp'\n
    </span><span style="color:#323232;">            - '80:80/tcp'\n
    </span><span style="color:#323232;">            - '443:443/tcp'\n
    </span><span style="color:#323232;">            - '443:443/udp'\n
    </span><span style="color:#323232;">            - '3000:3000/tcp'\n
    </span><span style="color:#323232;">        image: adguard/adguardhome\n
    </span>\n
    ```\n
    \n
    Save the file and start the container using the following command.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">docker-compose up -d\n
    </span>\n
    ```\n
    \n
    Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
    \n
    Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
    \n
    [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
    \n
    Creating the compose file for media-server\n
    ------------------------------------------\n
    \n
    Jackett\n
    -------\n
    \n
    Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
    \n
    There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">jackett:\n
    </span><span style="color:#323232;">    container_name: jackett\n
    </span><span style="color:#323232;">    image: linuxserver/jackett\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '9117:9117'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span><span style="color:#323232;">prowlarr:\n
    </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
    </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '9696:9696'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Sonarr - TV\n
    -----------\n
    \n
    Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">sonarr:\n
    </span><span style="color:#323232;">    container_name: sonarr\n
    </span><span style="color:#323232;">    image: linuxserver/sonarr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8989:8989'\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Radarr - Movies\n
    ---------------\n
    \n
    Sonarr but for movies.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">radarr:\n
    </span><span style="color:#323232;">    container_name: radarr\n
    </span><span style="color:#323232;">    image: linuxserver/radarr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '7878:7878'\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Lidarr - Music\n
    --------------\n
    \n
    ```\n
    \n
    <span style="color:#323232;">lidarr:\n
    </span><span style="color:#323232;">    container_name: lidarr\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8686:8686'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Readarr - Books and AudioBooks\n
    ------------------------------\n
    \n
    ```\n
    \n
    <span style="color:#323232;"># Notice the different port for the audiobook container\n
    </span><span style="color:#323232;">readarr:\n
    </span><span style="color:#323232;">    container_name: readarr\n
    </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8787:8787'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;">readarr-audio-books:\n
    </span><span style="color:#323232;">    container_name: readarr-audio-books\n
    </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8786:8787'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Bazarr - Subtitles\n
    ------------------\n
    \n
    ```\n
    \n
    <span style="color:#323232;">bazarr:\n
    </span><span style="color:#323232;">    container_name: bazarr\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '6767:6767'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Jellyfin\n
    --------\n
    \n
    I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
    \n
    I will talk about the devices section later on.\n
    \n
    For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">jellyfin:\n
    </span><span style="color:#323232;">    container_name: jellyfin\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8096:8096'\n
    </span><span style="color:#323232;">    devices:\n
    </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
    </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;">plex:\n
    </span><span style="color:#323232;">    container_name: plex\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '32400:32400'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">      - VERSION=docker\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
    </span><span style="color:#323232;">    devices:\n
    </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
    </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Overseer/Ombi - Requesting Movies and TV shows\n
    ----------------------------------------------\n
    \n
    I use both. You can use ombi only if you don’t plan to install plex.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">ombi:\n
    </span><span style="color:#323232;">    container_name: ombi\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '3579:3579'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span><span style="color:#323232;">\n
    </span><span style="color:#323232;">overseerr:\n
    </span><span style="color:#323232;">    container_name: overseerr\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '5055:5055'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Qbittorrent - Torrent downloader\n
    --------------------------------\n
    \n
    I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
    \n
    Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">qflood:\n
    </span><span style="color:#323232;">    container_name: qflood\n
    </span><span style="color:#323232;">    image: hotio/qflood\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - "8080:8080"\n
    </span><span style="color:#323232;">      - "3005:3000"\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - UMASK=002\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Heimdall - Dashboard\n
    --------------------\n
    \n
    There are multiple dashboard applications but I use Heimdall.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">heimdall:\n
    </span><span style="color:#323232;">    container_name: heimdall\n
    </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    volumes:\n
    </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - 8090:80\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Flaresolverr - Solves cloudflare captcha\n
    ----------------------------------------\n
    \n
    If your indexers use captcha, you will need flaresolverr for them.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">flaresolverr:\n
    </span><span style="color:#323232;">    container_name: flaresolverr\n
    </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
    </span><span style="color:#323232;">    ports:\n
    </span><span style="color:#323232;">      - '8191:8191'\n
    </span><span style="color:#323232;">    environment:\n
    </span><span style="color:#323232;">      - PUID=1000\n
    </span><span style="color:#323232;">      - PGID=1000\n
    </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
    </span><span style="color:#323232;">    restart: unless-stopped\n
    </span>\n
    ```\n
    \n
    Transcoding\n
    -----------\n
    \n
    As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
    \n
    <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
    \n
    Generally, the devices are same for intel gpu transcoding.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">devices:\n
    </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
    </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
    </span>\n
    ```\n
    \n
    To monitor the gpu usage install `intel-gpu-tools`\n
    \n
    ```\n
    \n
    <span style="color:#323232;">sudo apt install intel-gpu-tools\n
    </span>\n
    ```\n
    \n
    Now, create a compose file for media server.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">mkdir ~/server/compose/media-server\n
    </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
    </span>\n
    ```\n
    \n
    And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
    \n
    Configuring the docker stack\n
    ----------------------------\n
    \n
    Start the containers using the same command we used to start the adguard home container.\n
    \n
    ```\n
    \n
    <span style="color:#323232;">docker-compose up -d\n
    </span>\n
    ```\n
    \n
    Jackett\n
    -------\n
    \n
    Navigate to `YOUR_SERVER_IP:9117`\n
    \n
    Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
    \n
    \u{200B}\n
    \n
    [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
    \n
    Qbittorrent\n
    -----------\n
    \n
    Navigate to `YOUR_SERVER_IP:8080`\n
    \n
    The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
    \n
    Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
    \n
    Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
    \n
    Sonarr\n
    ------\n
    \n
    Navigate to `YOUR_SERVER_IP:8989`\n
    \n
    - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
    - Under indexers, for each indexer you added in Jackett \n
        - Click on add button\n
        - Select Torzab\n
        - Copy the tornzab feed for the indexer from jackett\n
        - Copy the api key from jackett\n
        - Select the categories you want\n
        - Test and save\n
    - Under general, define the root folder as `/data/media/tv`\n
    \n
    > Repeat this process for Radarr, Lidarr and readarr.\n
    \n
    Use `/data/media/movies` as root for Radarr and so on.\n
    \n
    > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
    \n
    Bazarr\n
    ------\n
    \n
    Navigate to `YOUR_SERVER_IP:6767`\n
    \n
    Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
    \n
    Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
    \n
    Jellyfin\n
    --------\n
    \n
    Go to `YOUR_SERVER_IP:8096`\n
    \n
    - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
    - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
    \n
    Monitor GPU usage while playing content using\n
    \n
    ```\n
    \n
    <span style="color:#323232;">sudo intel_gpu_top\n
    </span>\n
    ```\n
    \n
    Heimdall\n
    --------\n
    \n
    Navigate to `YOUR_SERVER_IP:8090`\n
    \n
    Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
    \n
    Updating docker images\n
    ----------------------\n
    \n
    With docker compose updates are very easy.\n
    \n
    - Navigate to the compose file directory `~/server/compose/media-server`.\n
    - Then `docker-compose pull` to download the latest images.\n
    - And finally `docker-compose up -d` to use the latest images.\n
    - Remove old images by `docker system prune -a`\n
    \n
    What’s next\n
    -----------\n
    \n
    - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
    - You can read about port forwarding to access your server over the internet.
    """
  +type: "image"
  +lang: "en"
  +isOc: false
  +hasEmbed: true
  +commentCount: 39
  +favouriteCount: 125
  +score: 0
  +isAdult: false
  +sticky: false
  +lastActive: DateTime @1723385793 {#2414
    date: 2024-08-11 16:16:33.0 +02:00
  }
  +ip: null
  +adaAmount: 0
  +tags: null
  +mentions: null
  +comments: Doctrine\ORM\PersistentCollection {#1866 …}
  +votes: Doctrine\ORM\PersistentCollection {#1966 …}
  +reports: Doctrine\ORM\PersistentCollection {#1946 …}
  +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
  +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
  +badges: Doctrine\ORM\PersistentCollection {#2439 …}
  +children: []
  -id: 4934
  -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
  -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
  +cross: false
  +upVotes: 0
  +downVotes: 0
  +ranking: 1696933577
  +visibility: "visible             "
  +apId: "https://lemmy.dbzer0.com/post/5911320"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696847177 {#1793
    date: 2023-10-09 12:26:17.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS DENIED
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
5 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
6 DENIED moderate
App\Entity\EntryComment {#4959
  +user: App\Entity\User {#4907 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Look into jellyfin + jellyserr"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1698767930 {#4968
    date: 2023-10-31 16:58:50.0 +01:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#4957 …}
  +nested: Doctrine\ORM\PersistentCollection {#4955 …}
  +votes: Doctrine\ORM\PersistentCollection {#4953 …}
  +reports: Doctrine\ORM\PersistentCollection {#4951 …}
  +favourites: Doctrine\ORM\PersistentCollection {#4919 …}
  +notifications: Doctrine\ORM\PersistentCollection {#4923 …}
  -id: 81568
  -bodyTs: "'jellyfin':3 'jellyserr':4 'look':1"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/5014691"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698767930 {#4904
    date: 2023-10-31 16:58:50.0 +01:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
7 DENIED edit
App\Entity\EntryComment {#4959
  +user: App\Entity\User {#4907 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Look into jellyfin + jellyserr"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1698767930 {#4968
    date: 2023-10-31 16:58:50.0 +01:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#4957 …}
  +nested: Doctrine\ORM\PersistentCollection {#4955 …}
  +votes: Doctrine\ORM\PersistentCollection {#4953 …}
  +reports: Doctrine\ORM\PersistentCollection {#4951 …}
  +favourites: Doctrine\ORM\PersistentCollection {#4919 …}
  +notifications: Doctrine\ORM\PersistentCollection {#4923 …}
  -id: 81568
  -bodyTs: "'jellyfin':3 'jellyserr':4 'look':1"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/5014691"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698767930 {#4904
    date: 2023-10-31 16:58:50.0 +01:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
8 DENIED moderate
App\Entity\EntryComment {#4959
  +user: App\Entity\User {#4907 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Look into jellyfin + jellyserr"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1698767930 {#4968
    date: 2023-10-31 16:58:50.0 +01:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#4957 …}
  +nested: Doctrine\ORM\PersistentCollection {#4955 …}
  +votes: Doctrine\ORM\PersistentCollection {#4953 …}
  +reports: Doctrine\ORM\PersistentCollection {#4951 …}
  +favourites: Doctrine\ORM\PersistentCollection {#4919 …}
  +notifications: Doctrine\ORM\PersistentCollection {#4923 …}
  -id: 81568
  -bodyTs: "'jellyfin':3 'jellyserr':4 'look':1"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/5014691"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698767930 {#4904
    date: 2023-10-31 16:58:50.0 +01:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
9 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
10 DENIED moderate
App\Entity\EntryComment {#4991
  +user: App\Entity\User {#4980 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Saving"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1698415589 {#4997
    date: 2023-10-27 16:06:29.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#4996 …}
  +nested: Doctrine\ORM\PersistentCollection {#4995 …}
  +votes: Doctrine\ORM\PersistentCollection {#4986 …}
  +reports: Doctrine\ORM\PersistentCollection {#4989 …}
  +favourites: Doctrine\ORM\PersistentCollection {#4984 …}
  +notifications: Doctrine\ORM\PersistentCollection {#4982 …}
  -id: 74712
  -bodyTs: "'save':1"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.world/comment/4858842"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698415589 {#5002
    date: 2023-10-27 16:06:29.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
11 DENIED edit
App\Entity\EntryComment {#4991
  +user: App\Entity\User {#4980 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Saving"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1698415589 {#4997
    date: 2023-10-27 16:06:29.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#4996 …}
  +nested: Doctrine\ORM\PersistentCollection {#4995 …}
  +votes: Doctrine\ORM\PersistentCollection {#4986 …}
  +reports: Doctrine\ORM\PersistentCollection {#4989 …}
  +favourites: Doctrine\ORM\PersistentCollection {#4984 …}
  +notifications: Doctrine\ORM\PersistentCollection {#4982 …}
  -id: 74712
  -bodyTs: "'save':1"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.world/comment/4858842"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698415589 {#5002
    date: 2023-10-27 16:06:29.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
12 DENIED moderate
App\Entity\EntryComment {#4991
  +user: App\Entity\User {#4980 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Saving"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1698415589 {#4997
    date: 2023-10-27 16:06:29.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#4996 …}
  +nested: Doctrine\ORM\PersistentCollection {#4995 …}
  +votes: Doctrine\ORM\PersistentCollection {#4986 …}
  +reports: Doctrine\ORM\PersistentCollection {#4989 …}
  +favourites: Doctrine\ORM\PersistentCollection {#4984 …}
  +notifications: Doctrine\ORM\PersistentCollection {#4982 …}
  -id: 74712
  -bodyTs: "'save':1"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.world/comment/4858842"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698415589 {#5002
    date: 2023-10-27 16:06:29.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
13 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
14 DENIED moderate
App\Entity\EntryComment {#5076
  +user: App\Entity\User {#5089 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: """
    As an FYI to anyone trying this, I ran into the following problems and solved them.\n
    \n
    1. Port 53 (DNS) was already bound to systemd-resolved. This caused the Adguard container to fail. [hub.docker.com/r/adguard/adguardhome](https://hub.docker.com/r/adguard/adguardhome)From their documentation, do this. I added the commands I did below.\n
    \n
    sudo mkdir /etc/systemd/resolved.conf.d sudo touch /etc/systemd/resolved.conf.d/adguardhome.conf sudo nano /etc/systemd/resolved.conf.d/adguardhome.conf #Copy this in and save [Resolve] DNS=127.0.0.1 DNSStubListener=no\n
    \n
    2. DHCP on the interface I was using on my VM was already bound to DHCP. To resolve this, set a static IP. I used the following. sudo nano /etc/netplan/00-installer-config.yaml\n
    \n
    #Overwrite with the following. Make sure if your adapter isn’'t labeled ens33, you change it appropriately. network: renderer: networkd ethernets: ens33: addresses: - 192.168.1.200/24 nameservers: addresses: [192.168.1.1] routes: - to: default via: 192.168.1.1 version: 2
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 3
  +score: 0
  +lastActive: DateTime @1698303944 {#5071
    date: 2023-10-26 09:05:44.0 +02:00
  }
  +ip: null
  +tags: [
    "copy"
    "overwrite"
  ]
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5077 …}
  +nested: Doctrine\ORM\PersistentCollection {#5079 …}
  +votes: Doctrine\ORM\PersistentCollection {#5081 …}
  +reports: Doctrine\ORM\PersistentCollection {#5083 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5085 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5087 …}
  -id: 72680
  -bodyTs: "'/24':122 '/etc/netplan/00-installer-config.yaml':97 '/etc/systemd/resolved.conf.d':51 '/etc/systemd/resolved.conf.d/adguardhome.conf':54,57 '/r/adguard/adguardhome](https://hub.docker.com/r/adguard/adguardhome)from':37 '1':17 '127.0.0.1':65 '192.168.1.1':125,130 '192.168.1.200':121 '2':68,132 '53':19 'ad':43 'adapt':106 'address':120,124 'adguard':31 'alreadi':22,80 'anyon':5 'appropri':114 'bound':23,81 'caus':29 'chang':112 'command':45 'contain':32 'copi':58 'default':128 'dhcp':69,83 'dns':20,64 'dnsstublisten':66 'document':39 'ens33':110,119 'ethernet':118 'fail':34 'follow':12,94,101 'fyi':3 'hub.docker.com':36 'hub.docker.com/r/adguard/adguardhome](https://hub.docker.com/r/adguard/adguardhome)from':35 'interfac':72 'ip':90 'isn':107 'label':109 'make':102 'mkdir':50 'nameserv':123 'nano':56,96 'network':115 'networkd':117 'overwrit':98 'port':18 'problem':13 'ran':9 'render':116 'resolv':27,63,85 'rout':126 'save':62 'set':87 'solv':15 'static':89 'sudo':49,52,55,95 'sure':103 'systemd':26 'systemd-resolv':25 'touch':53 'tri':6 'use':75,92 'version':131 'via':129 'vm':78"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.world/comment/4823967"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698303944 {#5072
    date: 2023-10-26 09:05:44.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
15 DENIED edit
App\Entity\EntryComment {#5076
  +user: App\Entity\User {#5089 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: """
    As an FYI to anyone trying this, I ran into the following problems and solved them.\n
    \n
    1. Port 53 (DNS) was already bound to systemd-resolved. This caused the Adguard container to fail. [hub.docker.com/r/adguard/adguardhome](https://hub.docker.com/r/adguard/adguardhome)From their documentation, do this. I added the commands I did below.\n
    \n
    sudo mkdir /etc/systemd/resolved.conf.d sudo touch /etc/systemd/resolved.conf.d/adguardhome.conf sudo nano /etc/systemd/resolved.conf.d/adguardhome.conf #Copy this in and save [Resolve] DNS=127.0.0.1 DNSStubListener=no\n
    \n
    2. DHCP on the interface I was using on my VM was already bound to DHCP. To resolve this, set a static IP. I used the following. sudo nano /etc/netplan/00-installer-config.yaml\n
    \n
    #Overwrite with the following. Make sure if your adapter isn’'t labeled ens33, you change it appropriately. network: renderer: networkd ethernets: ens33: addresses: - 192.168.1.200/24 nameservers: addresses: [192.168.1.1] routes: - to: default via: 192.168.1.1 version: 2
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 3
  +score: 0
  +lastActive: DateTime @1698303944 {#5071
    date: 2023-10-26 09:05:44.0 +02:00
  }
  +ip: null
  +tags: [
    "copy"
    "overwrite"
  ]
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5077 …}
  +nested: Doctrine\ORM\PersistentCollection {#5079 …}
  +votes: Doctrine\ORM\PersistentCollection {#5081 …}
  +reports: Doctrine\ORM\PersistentCollection {#5083 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5085 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5087 …}
  -id: 72680
  -bodyTs: "'/24':122 '/etc/netplan/00-installer-config.yaml':97 '/etc/systemd/resolved.conf.d':51 '/etc/systemd/resolved.conf.d/adguardhome.conf':54,57 '/r/adguard/adguardhome](https://hub.docker.com/r/adguard/adguardhome)from':37 '1':17 '127.0.0.1':65 '192.168.1.1':125,130 '192.168.1.200':121 '2':68,132 '53':19 'ad':43 'adapt':106 'address':120,124 'adguard':31 'alreadi':22,80 'anyon':5 'appropri':114 'bound':23,81 'caus':29 'chang':112 'command':45 'contain':32 'copi':58 'default':128 'dhcp':69,83 'dns':20,64 'dnsstublisten':66 'document':39 'ens33':110,119 'ethernet':118 'fail':34 'follow':12,94,101 'fyi':3 'hub.docker.com':36 'hub.docker.com/r/adguard/adguardhome](https://hub.docker.com/r/adguard/adguardhome)from':35 'interfac':72 'ip':90 'isn':107 'label':109 'make':102 'mkdir':50 'nameserv':123 'nano':56,96 'network':115 'networkd':117 'overwrit':98 'port':18 'problem':13 'ran':9 'render':116 'resolv':27,63,85 'rout':126 'save':62 'set':87 'solv':15 'static':89 'sudo':49,52,55,95 'sure':103 'systemd':26 'systemd-resolv':25 'touch':53 'tri':6 'use':75,92 'version':131 'via':129 'vm':78"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.world/comment/4823967"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698303944 {#5072
    date: 2023-10-26 09:05:44.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
16 DENIED moderate
App\Entity\EntryComment {#5076
  +user: App\Entity\User {#5089 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: """
    As an FYI to anyone trying this, I ran into the following problems and solved them.\n
    \n
    1. Port 53 (DNS) was already bound to systemd-resolved. This caused the Adguard container to fail. [hub.docker.com/r/adguard/adguardhome](https://hub.docker.com/r/adguard/adguardhome)From their documentation, do this. I added the commands I did below.\n
    \n
    sudo mkdir /etc/systemd/resolved.conf.d sudo touch /etc/systemd/resolved.conf.d/adguardhome.conf sudo nano /etc/systemd/resolved.conf.d/adguardhome.conf #Copy this in and save [Resolve] DNS=127.0.0.1 DNSStubListener=no\n
    \n
    2. DHCP on the interface I was using on my VM was already bound to DHCP. To resolve this, set a static IP. I used the following. sudo nano /etc/netplan/00-installer-config.yaml\n
    \n
    #Overwrite with the following. Make sure if your adapter isn’'t labeled ens33, you change it appropriately. network: renderer: networkd ethernets: ens33: addresses: - 192.168.1.200/24 nameservers: addresses: [192.168.1.1] routes: - to: default via: 192.168.1.1 version: 2
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 3
  +score: 0
  +lastActive: DateTime @1698303944 {#5071
    date: 2023-10-26 09:05:44.0 +02:00
  }
  +ip: null
  +tags: [
    "copy"
    "overwrite"
  ]
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5077 …}
  +nested: Doctrine\ORM\PersistentCollection {#5079 …}
  +votes: Doctrine\ORM\PersistentCollection {#5081 …}
  +reports: Doctrine\ORM\PersistentCollection {#5083 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5085 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5087 …}
  -id: 72680
  -bodyTs: "'/24':122 '/etc/netplan/00-installer-config.yaml':97 '/etc/systemd/resolved.conf.d':51 '/etc/systemd/resolved.conf.d/adguardhome.conf':54,57 '/r/adguard/adguardhome](https://hub.docker.com/r/adguard/adguardhome)from':37 '1':17 '127.0.0.1':65 '192.168.1.1':125,130 '192.168.1.200':121 '2':68,132 '53':19 'ad':43 'adapt':106 'address':120,124 'adguard':31 'alreadi':22,80 'anyon':5 'appropri':114 'bound':23,81 'caus':29 'chang':112 'command':45 'contain':32 'copi':58 'default':128 'dhcp':69,83 'dns':20,64 'dnsstublisten':66 'document':39 'ens33':110,119 'ethernet':118 'fail':34 'follow':12,94,101 'fyi':3 'hub.docker.com':36 'hub.docker.com/r/adguard/adguardhome](https://hub.docker.com/r/adguard/adguardhome)from':35 'interfac':72 'ip':90 'isn':107 'label':109 'make':102 'mkdir':50 'nameserv':123 'nano':56,96 'network':115 'networkd':117 'overwrit':98 'port':18 'problem':13 'ran':9 'render':116 'resolv':27,63,85 'rout':126 'save':62 'set':87 'solv':15 'static':89 'sudo':49,52,55,95 'sure':103 'systemd':26 'systemd-resolv':25 'touch':53 'tri':6 'use':75,92 'version':131 'via':129 'vm':78"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.world/comment/4823967"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698303944 {#5072
    date: 2023-10-26 09:05:44.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
17 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
18 DENIED moderate
App\Entity\EntryComment {#5149
  +user: App\Entity\User {#5162 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "the hyphened “docker-compose” cmd is deprecated and does not receive updates anymore. Use “docker compose” (as in a subcommand of the docker cli) instead. You might docker compose files that the old thing refuses."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 2
  +score: 0
  +lastActive: DateTime @1697006965 {#5144
    date: 2023-10-11 08:49:25.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5150 …}
  +nested: Doctrine\ORM\PersistentCollection {#5152 …}
  +votes: Doctrine\ORM\PersistentCollection {#5154 …}
  +reports: Doctrine\ORM\PersistentCollection {#5156 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5158 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5160 …}
  -id: 51183
  -bodyTs: "'anymor':14 'cli':25 'cmd':6 'compos':5,17,30 'deprec':8 'docker':4,16,24,29 'docker-compos':3 'file':31 'hyphen':2 'instead':26 'might':28 'old':34 'receiv':12 'refus':36 'subcommand':21 'thing':35 'updat':13 'use':15"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://feddit.de/comment/3785007"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697006965 {#5145
    date: 2023-10-11 08:49:25.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
19 DENIED edit
App\Entity\EntryComment {#5149
  +user: App\Entity\User {#5162 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "the hyphened “docker-compose” cmd is deprecated and does not receive updates anymore. Use “docker compose” (as in a subcommand of the docker cli) instead. You might docker compose files that the old thing refuses."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 2
  +score: 0
  +lastActive: DateTime @1697006965 {#5144
    date: 2023-10-11 08:49:25.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5150 …}
  +nested: Doctrine\ORM\PersistentCollection {#5152 …}
  +votes: Doctrine\ORM\PersistentCollection {#5154 …}
  +reports: Doctrine\ORM\PersistentCollection {#5156 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5158 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5160 …}
  -id: 51183
  -bodyTs: "'anymor':14 'cli':25 'cmd':6 'compos':5,17,30 'deprec':8 'docker':4,16,24,29 'docker-compos':3 'file':31 'hyphen':2 'instead':26 'might':28 'old':34 'receiv':12 'refus':36 'subcommand':21 'thing':35 'updat':13 'use':15"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://feddit.de/comment/3785007"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697006965 {#5145
    date: 2023-10-11 08:49:25.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
20 DENIED moderate
App\Entity\EntryComment {#5149
  +user: App\Entity\User {#5162 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "the hyphened “docker-compose” cmd is deprecated and does not receive updates anymore. Use “docker compose” (as in a subcommand of the docker cli) instead. You might docker compose files that the old thing refuses."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 2
  +score: 0
  +lastActive: DateTime @1697006965 {#5144
    date: 2023-10-11 08:49:25.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5150 …}
  +nested: Doctrine\ORM\PersistentCollection {#5152 …}
  +votes: Doctrine\ORM\PersistentCollection {#5154 …}
  +reports: Doctrine\ORM\PersistentCollection {#5156 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5158 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5160 …}
  -id: 51183
  -bodyTs: "'anymor':14 'cli':25 'cmd':6 'compos':5,17,30 'deprec':8 'docker':4,16,24,29 'docker-compos':3 'file':31 'hyphen':2 'instead':26 'might':28 'old':34 'receiv':12 'refus':36 'subcommand':21 'thing':35 'updat':13 'use':15"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://feddit.de/comment/3785007"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697006965 {#5145
    date: 2023-10-11 08:49:25.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
21 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
22 DENIED moderate
App\Entity\EntryComment {#5222
  +user: App\Entity\User {#5235 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "👍👍"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1697003883 {#5217
    date: 2023-10-11 07:58:03.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5223 …}
  +nested: Doctrine\ORM\PersistentCollection {#5225 …}
  +votes: Doctrine\ORM\PersistentCollection {#5227 …}
  +reports: Doctrine\ORM\PersistentCollection {#5229 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5231 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5233 …}
  -id: 245731
  -bodyTs: ""
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemm.ee/comment/4717886"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697003883 {#5218
    date: 2023-10-11 07:58:03.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
23 DENIED edit
App\Entity\EntryComment {#5222
  +user: App\Entity\User {#5235 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "👍👍"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1697003883 {#5217
    date: 2023-10-11 07:58:03.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5223 …}
  +nested: Doctrine\ORM\PersistentCollection {#5225 …}
  +votes: Doctrine\ORM\PersistentCollection {#5227 …}
  +reports: Doctrine\ORM\PersistentCollection {#5229 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5231 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5233 …}
  -id: 245731
  -bodyTs: ""
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemm.ee/comment/4717886"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697003883 {#5218
    date: 2023-10-11 07:58:03.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
24 DENIED moderate
App\Entity\EntryComment {#5222
  +user: App\Entity\User {#5235 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "👍👍"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1697003883 {#5217
    date: 2023-10-11 07:58:03.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5223 …}
  +nested: Doctrine\ORM\PersistentCollection {#5225 …}
  +votes: Doctrine\ORM\PersistentCollection {#5227 …}
  +reports: Doctrine\ORM\PersistentCollection {#5229 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5231 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5233 …}
  -id: 245731
  -bodyTs: ""
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemm.ee/comment/4717886"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697003883 {#5218
    date: 2023-10-11 07:58:03.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
25 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
26 DENIED moderate
App\Entity\EntryComment {#5295
  +user: App\Entity\User {#5308 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: """
    Can anyone assist with an issue? I get to this part of the guide: &gt; Save the following content to the docker-compose.yml file.\n
    \n
    I am not quite sure how to “save” it. I tried the :wq thing and it seemed to work? But then when I tried starting the contaner by inputting &gt;docker-compose up -d\n
    \n
    I get &gt;usr/local/bin/docker-compose: line 1: Not: command not found\n
    \n
    I’m stuck at this point. Any tips would be appreciated!
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696995065 {#5290
    date: 2023-10-11 05:31:05.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5296 …}
  +nested: Doctrine\ORM\PersistentCollection {#5298 …}
  +votes: Doctrine\ORM\PersistentCollection {#5300 …}
  +reports: Doctrine\ORM\PersistentCollection {#5302 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5304 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5306 …}
  -id: 245744
  -bodyTs: "'1':61 'anyon':2 'appreci':76 'assist':3 'command':63 'compos':54 'contan':49 'content':18 'd':56 'docker':53 'docker-compos':52 'docker-compose.yml':21 'file':22 'follow':17 'found':65 'get':8,58 'guid':14 'input':51 'issu':6 'line':60 'm':67 'part':11 'point':71 'quit':26 'save':15,30 'seem':39 'start':47 'stuck':68 'sure':27 'thing':36 'tip':73 'tri':33,46 'usr/local/bin/docker-compose':59 'work':41 'would':74 'wq':35"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4297440"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696995065 {#5291
    date: 2023-10-11 05:31:05.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
27 DENIED edit
App\Entity\EntryComment {#5295
  +user: App\Entity\User {#5308 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: """
    Can anyone assist with an issue? I get to this part of the guide: &gt; Save the following content to the docker-compose.yml file.\n
    \n
    I am not quite sure how to “save” it. I tried the :wq thing and it seemed to work? But then when I tried starting the contaner by inputting &gt;docker-compose up -d\n
    \n
    I get &gt;usr/local/bin/docker-compose: line 1: Not: command not found\n
    \n
    I’m stuck at this point. Any tips would be appreciated!
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696995065 {#5290
    date: 2023-10-11 05:31:05.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5296 …}
  +nested: Doctrine\ORM\PersistentCollection {#5298 …}
  +votes: Doctrine\ORM\PersistentCollection {#5300 …}
  +reports: Doctrine\ORM\PersistentCollection {#5302 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5304 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5306 …}
  -id: 245744
  -bodyTs: "'1':61 'anyon':2 'appreci':76 'assist':3 'command':63 'compos':54 'contan':49 'content':18 'd':56 'docker':53 'docker-compos':52 'docker-compose.yml':21 'file':22 'follow':17 'found':65 'get':8,58 'guid':14 'input':51 'issu':6 'line':60 'm':67 'part':11 'point':71 'quit':26 'save':15,30 'seem':39 'start':47 'stuck':68 'sure':27 'thing':36 'tip':73 'tri':33,46 'usr/local/bin/docker-compose':59 'work':41 'would':74 'wq':35"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4297440"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696995065 {#5291
    date: 2023-10-11 05:31:05.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
28 DENIED moderate
App\Entity\EntryComment {#5295
  +user: App\Entity\User {#5308 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: """
    Can anyone assist with an issue? I get to this part of the guide: &gt; Save the following content to the docker-compose.yml file.\n
    \n
    I am not quite sure how to “save” it. I tried the :wq thing and it seemed to work? But then when I tried starting the contaner by inputting &gt;docker-compose up -d\n
    \n
    I get &gt;usr/local/bin/docker-compose: line 1: Not: command not found\n
    \n
    I’m stuck at this point. Any tips would be appreciated!
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696995065 {#5290
    date: 2023-10-11 05:31:05.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5296 …}
  +nested: Doctrine\ORM\PersistentCollection {#5298 …}
  +votes: Doctrine\ORM\PersistentCollection {#5300 …}
  +reports: Doctrine\ORM\PersistentCollection {#5302 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5304 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5306 …}
  -id: 245744
  -bodyTs: "'1':61 'anyon':2 'appreci':76 'assist':3 'command':63 'compos':54 'contan':49 'content':18 'd':56 'docker':53 'docker-compos':52 'docker-compose.yml':21 'file':22 'follow':17 'found':65 'get':8,58 'guid':14 'input':51 'issu':6 'line':60 'm':67 'part':11 'point':71 'quit':26 'save':15,30 'seem':39 'start':47 'stuck':68 'sure':27 'thing':36 'tip':73 'tri':33,46 'usr/local/bin/docker-compose':59 'work':41 'would':74 'wq':35"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4297440"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696995065 {#5291
    date: 2023-10-11 05:31:05.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
29 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
30 DENIED moderate
App\Entity\EntryComment {#5368
  +user: App\Entity\User {#5381 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Saving for later, this is the way everyone, try to be more like this legend."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696969540 {#5363
    date: 2023-10-10 22:25:40.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5369 …}
  +nested: Doctrine\ORM\PersistentCollection {#5371 …}
  +votes: Doctrine\ORM\PersistentCollection {#5373 …}
  +reports: Doctrine\ORM\PersistentCollection {#5375 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5377 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5379 …}
  -id: 137922
  -bodyTs: "'everyon':8 'later':3 'legend':15 'like':13 'save':1 'tri':9 'way':7"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemm.ee/comment/4698493"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696969540 {#5364
    date: 2023-10-10 22:25:40.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
31 DENIED edit
App\Entity\EntryComment {#5368
  +user: App\Entity\User {#5381 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Saving for later, this is the way everyone, try to be more like this legend."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696969540 {#5363
    date: 2023-10-10 22:25:40.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5369 …}
  +nested: Doctrine\ORM\PersistentCollection {#5371 …}
  +votes: Doctrine\ORM\PersistentCollection {#5373 …}
  +reports: Doctrine\ORM\PersistentCollection {#5375 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5377 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5379 …}
  -id: 137922
  -bodyTs: "'everyon':8 'later':3 'legend':15 'like':13 'save':1 'tri':9 'way':7"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemm.ee/comment/4698493"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696969540 {#5364
    date: 2023-10-10 22:25:40.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
32 DENIED moderate
App\Entity\EntryComment {#5368
  +user: App\Entity\User {#5381 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Saving for later, this is the way everyone, try to be more like this legend."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696969540 {#5363
    date: 2023-10-10 22:25:40.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5369 …}
  +nested: Doctrine\ORM\PersistentCollection {#5371 …}
  +votes: Doctrine\ORM\PersistentCollection {#5373 …}
  +reports: Doctrine\ORM\PersistentCollection {#5375 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5377 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5379 …}
  -id: 137922
  -bodyTs: "'everyon':8 'later':3 'legend':15 'like':13 'save':1 'tri':9 'way':7"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemm.ee/comment/4698493"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696969540 {#5364
    date: 2023-10-10 22:25:40.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
33 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
34 DENIED moderate
App\Entity\EntryComment {#5441
  +user: App\Entity\User {#5454 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: """
    I tried a few days ago but\n
    \n
    I couldn’t have docker containers on a separate drive\n
    \n
    And I couldn’t get Jellyfin to attach to my port through docker. The logs didn’t show anything was going wrong though
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1697922857 {#5436
    date: 2023-10-21 23:14:17.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5442 …}
  +nested: Doctrine\ORM\PersistentCollection {#5444 …}
  +votes: Doctrine\ORM\PersistentCollection {#5446 …}
  +reports: Doctrine\ORM\PersistentCollection {#5448 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5450 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5452 …}
  -id: 63610
  -bodyTs: "'ago':6 'anyth':36 'attach':25 'contain':13 'couldn':9,20 'day':5 'didn':33 'docker':12,30 'drive':17 'get':22 'go':38 'jellyfin':23 'log':32 'port':28 'separ':16 'show':35 'though':40 'tri':2 'wrong':39"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.ca/comment/3885938"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696959332 {#5437
    date: 2023-10-10 19:35:32.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
35 DENIED edit
App\Entity\EntryComment {#5441
  +user: App\Entity\User {#5454 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: """
    I tried a few days ago but\n
    \n
    I couldn’t have docker containers on a separate drive\n
    \n
    And I couldn’t get Jellyfin to attach to my port through docker. The logs didn’t show anything was going wrong though
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1697922857 {#5436
    date: 2023-10-21 23:14:17.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5442 …}
  +nested: Doctrine\ORM\PersistentCollection {#5444 …}
  +votes: Doctrine\ORM\PersistentCollection {#5446 …}
  +reports: Doctrine\ORM\PersistentCollection {#5448 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5450 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5452 …}
  -id: 63610
  -bodyTs: "'ago':6 'anyth':36 'attach':25 'contain':13 'couldn':9,20 'day':5 'didn':33 'docker':12,30 'drive':17 'get':22 'go':38 'jellyfin':23 'log':32 'port':28 'separ':16 'show':35 'though':40 'tri':2 'wrong':39"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.ca/comment/3885938"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696959332 {#5437
    date: 2023-10-10 19:35:32.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
36 DENIED moderate
App\Entity\EntryComment {#5441
  +user: App\Entity\User {#5454 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: """
    I tried a few days ago but\n
    \n
    I couldn’t have docker containers on a separate drive\n
    \n
    And I couldn’t get Jellyfin to attach to my port through docker. The logs didn’t show anything was going wrong though
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1697922857 {#5436
    date: 2023-10-21 23:14:17.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5442 …}
  +nested: Doctrine\ORM\PersistentCollection {#5444 …}
  +votes: Doctrine\ORM\PersistentCollection {#5446 …}
  +reports: Doctrine\ORM\PersistentCollection {#5448 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5450 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5452 …}
  -id: 63610
  -bodyTs: "'ago':6 'anyth':36 'attach':25 'contain':13 'couldn':9,20 'day':5 'didn':33 'docker':12,30 'drive':17 'get':22 'go':38 'jellyfin':23 'log':32 'port':28 'separ':16 'show':35 'though':40 'tri':2 'wrong':39"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.ca/comment/3885938"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696959332 {#5437
    date: 2023-10-10 19:35:32.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
37 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
38 DENIED moderate
App\Entity\EntryComment {#5968
  +user: App\Entity\User {#5308 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5441
    +user: App\Entity\User {#5454 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: """
      I tried a few days ago but\n
      \n
      I couldn’t have docker containers on a separate drive\n
      \n
      And I couldn’t get Jellyfin to attach to my port through docker. The logs didn’t show anything was going wrong though
      """
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1697922857 {#5436
      date: 2023-10-21 23:14:17.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5442 …}
    +nested: Doctrine\ORM\PersistentCollection {#5444 …}
    +votes: Doctrine\ORM\PersistentCollection {#5446 …}
    +reports: Doctrine\ORM\PersistentCollection {#5448 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5450 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5452 …}
    -id: 63610
    -bodyTs: "'ago':6 'anyth':36 'attach':25 'contain':13 'couldn':9,20 'day':5 'didn':33 'docker':12,30 'drive':17 'get':22 'go':38 'jellyfin':23 'log':32 'port':28 'separ':16 'show':35 'though':40 'tri':2 'wrong':39"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://lemmy.ca/comment/3885938"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696959332 {#5437
      date: 2023-10-10 19:35:32.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5441}
  +body: "Did you try again?"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1697922601 {#5966
    date: 2023-10-21 23:10:01.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@ILikeBoobies@lemmy.ca"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5969 …}
  +nested: Doctrine\ORM\PersistentCollection {#5971 …}
  +votes: Doctrine\ORM\PersistentCollection {#5973 …}
  +reports: Doctrine\ORM\PersistentCollection {#5975 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5977 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5979 …}
  -id: 63611
  -bodyTs: "'tri':3"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4665453"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697922601 {#5967
    date: 2023-10-21 23:10:01.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
39 DENIED edit
App\Entity\EntryComment {#5968
  +user: App\Entity\User {#5308 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5441
    +user: App\Entity\User {#5454 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: """
      I tried a few days ago but\n
      \n
      I couldn’t have docker containers on a separate drive\n
      \n
      And I couldn’t get Jellyfin to attach to my port through docker. The logs didn’t show anything was going wrong though
      """
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1697922857 {#5436
      date: 2023-10-21 23:14:17.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5442 …}
    +nested: Doctrine\ORM\PersistentCollection {#5444 …}
    +votes: Doctrine\ORM\PersistentCollection {#5446 …}
    +reports: Doctrine\ORM\PersistentCollection {#5448 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5450 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5452 …}
    -id: 63610
    -bodyTs: "'ago':6 'anyth':36 'attach':25 'contain':13 'couldn':9,20 'day':5 'didn':33 'docker':12,30 'drive':17 'get':22 'go':38 'jellyfin':23 'log':32 'port':28 'separ':16 'show':35 'though':40 'tri':2 'wrong':39"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://lemmy.ca/comment/3885938"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696959332 {#5437
      date: 2023-10-10 19:35:32.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5441}
  +body: "Did you try again?"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1697922601 {#5966
    date: 2023-10-21 23:10:01.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@ILikeBoobies@lemmy.ca"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5969 …}
  +nested: Doctrine\ORM\PersistentCollection {#5971 …}
  +votes: Doctrine\ORM\PersistentCollection {#5973 …}
  +reports: Doctrine\ORM\PersistentCollection {#5975 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5977 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5979 …}
  -id: 63611
  -bodyTs: "'tri':3"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4665453"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697922601 {#5967
    date: 2023-10-21 23:10:01.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
40 DENIED moderate
App\Entity\EntryComment {#5968
  +user: App\Entity\User {#5308 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5441
    +user: App\Entity\User {#5454 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: """
      I tried a few days ago but\n
      \n
      I couldn’t have docker containers on a separate drive\n
      \n
      And I couldn’t get Jellyfin to attach to my port through docker. The logs didn’t show anything was going wrong though
      """
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1697922857 {#5436
      date: 2023-10-21 23:14:17.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5442 …}
    +nested: Doctrine\ORM\PersistentCollection {#5444 …}
    +votes: Doctrine\ORM\PersistentCollection {#5446 …}
    +reports: Doctrine\ORM\PersistentCollection {#5448 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5450 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5452 …}
    -id: 63610
    -bodyTs: "'ago':6 'anyth':36 'attach':25 'contain':13 'couldn':9,20 'day':5 'didn':33 'docker':12,30 'drive':17 'get':22 'go':38 'jellyfin':23 'log':32 'port':28 'separ':16 'show':35 'though':40 'tri':2 'wrong':39"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://lemmy.ca/comment/3885938"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696959332 {#5437
      date: 2023-10-10 19:35:32.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5441}
  +body: "Did you try again?"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1697922601 {#5966
    date: 2023-10-21 23:10:01.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@ILikeBoobies@lemmy.ca"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5969 …}
  +nested: Doctrine\ORM\PersistentCollection {#5971 …}
  +votes: Doctrine\ORM\PersistentCollection {#5973 …}
  +reports: Doctrine\ORM\PersistentCollection {#5975 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5977 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5979 …}
  -id: 63611
  -bodyTs: "'tri':3"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4665453"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697922601 {#5967
    date: 2023-10-21 23:10:01.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
41 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
42 DENIED moderate
App\Entity\EntryComment {#6037
  +user: App\Entity\User {#5454 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5968
    +user: App\Entity\User {#5308 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5441
      +user: App\Entity\User {#5454 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: null
      +root: null
      +body: """
        I tried a few days ago but\n
        \n
        I couldn’t have docker containers on a separate drive\n
        \n
        And I couldn’t get Jellyfin to attach to my port through docker. The logs didn’t show anything was going wrong though
        """
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1697922857 {#5436
        date: 2023-10-21 23:14:17.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5442 …}
      +nested: Doctrine\ORM\PersistentCollection {#5444 …}
      +votes: Doctrine\ORM\PersistentCollection {#5446 …}
      +reports: Doctrine\ORM\PersistentCollection {#5448 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5450 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5452 …}
      -id: 63610
      -bodyTs: "'ago':6 'anyth':36 'attach':25 'contain':13 'couldn':9,20 'day':5 'didn':33 'docker':12,30 'drive':17 'get':22 'go':38 'jellyfin':23 'log':32 'port':28 'separ':16 'show':35 'though':40 'tri':2 'wrong':39"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://lemmy.ca/comment/3885938"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696959332 {#5437
        date: 2023-10-10 19:35:32.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5441}
    +body: "Did you try again?"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1697922601 {#5966
      date: 2023-10-21 23:10:01.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@ILikeBoobies@lemmy.ca"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5969 …}
    +nested: Doctrine\ORM\PersistentCollection {#5971 …}
    +votes: Doctrine\ORM\PersistentCollection {#5973 …}
    +reports: Doctrine\ORM\PersistentCollection {#5975 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5977 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5979 …}
    -id: 63611
    -bodyTs: "'tri':3"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4665453"
    +editedAt: null
    +createdAt: DateTimeImmutable @1697922601 {#5967
      date: 2023-10-21 23:10:01.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5441}
  +body: "I have it running outside of docker; I’ll eventually try again but I had people mad that they couldn’t watch their shows as I migrated from plex"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1697922852 {#6035
    date: 2023-10-21 23:14:12.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@ILikeBoobies@lemmy.ca"
    "@spacecowboy@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6038 …}
  +nested: Doctrine\ORM\PersistentCollection {#6040 …}
  +votes: Doctrine\ORM\PersistentCollection {#6042 …}
  +reports: Doctrine\ORM\PersistentCollection {#6044 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6046 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6048 …}
  -id: 63622
  -bodyTs: "'couldn':20 'docker':7 'eventu':10 'll':9 'mad':17 'migrat':27 'outsid':5 'peopl':16 'plex':29 'run':4 'show':24 'tri':11 'watch':22"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.ca/comment/4181172"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697922852 {#6036
    date: 2023-10-21 23:14:12.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
43 DENIED edit
App\Entity\EntryComment {#6037
  +user: App\Entity\User {#5454 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5968
    +user: App\Entity\User {#5308 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5441
      +user: App\Entity\User {#5454 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: null
      +root: null
      +body: """
        I tried a few days ago but\n
        \n
        I couldn’t have docker containers on a separate drive\n
        \n
        And I couldn’t get Jellyfin to attach to my port through docker. The logs didn’t show anything was going wrong though
        """
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1697922857 {#5436
        date: 2023-10-21 23:14:17.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5442 …}
      +nested: Doctrine\ORM\PersistentCollection {#5444 …}
      +votes: Doctrine\ORM\PersistentCollection {#5446 …}
      +reports: Doctrine\ORM\PersistentCollection {#5448 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5450 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5452 …}
      -id: 63610
      -bodyTs: "'ago':6 'anyth':36 'attach':25 'contain':13 'couldn':9,20 'day':5 'didn':33 'docker':12,30 'drive':17 'get':22 'go':38 'jellyfin':23 'log':32 'port':28 'separ':16 'show':35 'though':40 'tri':2 'wrong':39"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://lemmy.ca/comment/3885938"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696959332 {#5437
        date: 2023-10-10 19:35:32.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5441}
    +body: "Did you try again?"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1697922601 {#5966
      date: 2023-10-21 23:10:01.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@ILikeBoobies@lemmy.ca"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5969 …}
    +nested: Doctrine\ORM\PersistentCollection {#5971 …}
    +votes: Doctrine\ORM\PersistentCollection {#5973 …}
    +reports: Doctrine\ORM\PersistentCollection {#5975 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5977 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5979 …}
    -id: 63611
    -bodyTs: "'tri':3"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4665453"
    +editedAt: null
    +createdAt: DateTimeImmutable @1697922601 {#5967
      date: 2023-10-21 23:10:01.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5441}
  +body: "I have it running outside of docker; I’ll eventually try again but I had people mad that they couldn’t watch their shows as I migrated from plex"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1697922852 {#6035
    date: 2023-10-21 23:14:12.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@ILikeBoobies@lemmy.ca"
    "@spacecowboy@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6038 …}
  +nested: Doctrine\ORM\PersistentCollection {#6040 …}
  +votes: Doctrine\ORM\PersistentCollection {#6042 …}
  +reports: Doctrine\ORM\PersistentCollection {#6044 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6046 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6048 …}
  -id: 63622
  -bodyTs: "'couldn':20 'docker':7 'eventu':10 'll':9 'mad':17 'migrat':27 'outsid':5 'peopl':16 'plex':29 'run':4 'show':24 'tri':11 'watch':22"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.ca/comment/4181172"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697922852 {#6036
    date: 2023-10-21 23:14:12.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
44 DENIED moderate
App\Entity\EntryComment {#6037
  +user: App\Entity\User {#5454 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5968
    +user: App\Entity\User {#5308 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5441
      +user: App\Entity\User {#5454 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: null
      +root: null
      +body: """
        I tried a few days ago but\n
        \n
        I couldn’t have docker containers on a separate drive\n
        \n
        And I couldn’t get Jellyfin to attach to my port through docker. The logs didn’t show anything was going wrong though
        """
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1697922857 {#5436
        date: 2023-10-21 23:14:17.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5442 …}
      +nested: Doctrine\ORM\PersistentCollection {#5444 …}
      +votes: Doctrine\ORM\PersistentCollection {#5446 …}
      +reports: Doctrine\ORM\PersistentCollection {#5448 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5450 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5452 …}
      -id: 63610
      -bodyTs: "'ago':6 'anyth':36 'attach':25 'contain':13 'couldn':9,20 'day':5 'didn':33 'docker':12,30 'drive':17 'get':22 'go':38 'jellyfin':23 'log':32 'port':28 'separ':16 'show':35 'though':40 'tri':2 'wrong':39"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://lemmy.ca/comment/3885938"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696959332 {#5437
        date: 2023-10-10 19:35:32.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5441}
    +body: "Did you try again?"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1697922601 {#5966
      date: 2023-10-21 23:10:01.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@ILikeBoobies@lemmy.ca"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5969 …}
    +nested: Doctrine\ORM\PersistentCollection {#5971 …}
    +votes: Doctrine\ORM\PersistentCollection {#5973 …}
    +reports: Doctrine\ORM\PersistentCollection {#5975 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5977 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5979 …}
    -id: 63611
    -bodyTs: "'tri':3"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4665453"
    +editedAt: null
    +createdAt: DateTimeImmutable @1697922601 {#5967
      date: 2023-10-21 23:10:01.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5441}
  +body: "I have it running outside of docker; I’ll eventually try again but I had people mad that they couldn’t watch their shows as I migrated from plex"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1697922852 {#6035
    date: 2023-10-21 23:14:12.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@ILikeBoobies@lemmy.ca"
    "@spacecowboy@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6038 …}
  +nested: Doctrine\ORM\PersistentCollection {#6040 …}
  +votes: Doctrine\ORM\PersistentCollection {#6042 …}
  +reports: Doctrine\ORM\PersistentCollection {#6044 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6046 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6048 …}
  -id: 63622
  -bodyTs: "'couldn':20 'docker':7 'eventu':10 'll':9 'mad':17 'migrat':27 'outsid':5 'peopl':16 'plex':29 'run':4 'show':24 'tri':11 'watch':22"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.ca/comment/4181172"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697922852 {#6036
    date: 2023-10-21 23:14:12.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
45 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
46 DENIED moderate
App\Entity\EntryComment {#5514
  +user: App\Entity\User {#5527 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Any reason for not using Prowlarr?"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696921698 {#5509
    date: 2023-10-10 09:08:18.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5515 …}
  +nested: Doctrine\ORM\PersistentCollection {#5517 …}
  +votes: Doctrine\ORM\PersistentCollection {#5519 …}
  +reports: Doctrine\ORM\PersistentCollection {#5521 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5523 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5525 …}
  -id: 129341
  -bodyTs: "'prowlarr':6 'reason':2 'use':5"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.ml/comment/4749456"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696921698 {#5510
    date: 2023-10-10 09:08:18.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
47 DENIED edit
App\Entity\EntryComment {#5514
  +user: App\Entity\User {#5527 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Any reason for not using Prowlarr?"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696921698 {#5509
    date: 2023-10-10 09:08:18.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5515 …}
  +nested: Doctrine\ORM\PersistentCollection {#5517 …}
  +votes: Doctrine\ORM\PersistentCollection {#5519 …}
  +reports: Doctrine\ORM\PersistentCollection {#5521 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5523 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5525 …}
  -id: 129341
  -bodyTs: "'prowlarr':6 'reason':2 'use':5"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.ml/comment/4749456"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696921698 {#5510
    date: 2023-10-10 09:08:18.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
48 DENIED moderate
App\Entity\EntryComment {#5514
  +user: App\Entity\User {#5527 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Any reason for not using Prowlarr?"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696921698 {#5509
    date: 2023-10-10 09:08:18.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5515 …}
  +nested: Doctrine\ORM\PersistentCollection {#5517 …}
  +votes: Doctrine\ORM\PersistentCollection {#5519 …}
  +reports: Doctrine\ORM\PersistentCollection {#5521 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5523 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5525 …}
  -id: 129341
  -bodyTs: "'prowlarr':6 'reason':2 'use':5"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.ml/comment/4749456"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696921698 {#5510
    date: 2023-10-10 09:08:18.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
49 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
50 DENIED moderate
App\Entity\EntryComment {#5587
  +user: App\Entity\User {#5600 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "You can use Jellyseer and remove plex entirely. It’s a fork of overseer."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696915088 {#5582
    date: 2023-10-10 07:18:08.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5588 …}
  +nested: Doctrine\ORM\PersistentCollection {#5590 …}
  +votes: Doctrine\ORM\PersistentCollection {#5592 …}
  +reports: Doctrine\ORM\PersistentCollection {#5594 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5596 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5598 …}
  -id: 245898
  -bodyTs: "'entir':8 'fork':12 'jellys':4 'overs':14 'plex':7 'remov':6 'use':3"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemm.ee/comment/4661945"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696915088 {#5583
    date: 2023-10-10 07:18:08.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
51 DENIED edit
App\Entity\EntryComment {#5587
  +user: App\Entity\User {#5600 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "You can use Jellyseer and remove plex entirely. It’s a fork of overseer."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696915088 {#5582
    date: 2023-10-10 07:18:08.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5588 …}
  +nested: Doctrine\ORM\PersistentCollection {#5590 …}
  +votes: Doctrine\ORM\PersistentCollection {#5592 …}
  +reports: Doctrine\ORM\PersistentCollection {#5594 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5596 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5598 …}
  -id: 245898
  -bodyTs: "'entir':8 'fork':12 'jellys':4 'overs':14 'plex':7 'remov':6 'use':3"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemm.ee/comment/4661945"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696915088 {#5583
    date: 2023-10-10 07:18:08.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
52 DENIED moderate
App\Entity\EntryComment {#5587
  +user: App\Entity\User {#5600 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "You can use Jellyseer and remove plex entirely. It’s a fork of overseer."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696915088 {#5582
    date: 2023-10-10 07:18:08.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5588 …}
  +nested: Doctrine\ORM\PersistentCollection {#5590 …}
  +votes: Doctrine\ORM\PersistentCollection {#5592 …}
  +reports: Doctrine\ORM\PersistentCollection {#5594 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5596 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5598 …}
  -id: 245898
  -bodyTs: "'entir':8 'fork':12 'jellys':4 'overs':14 'plex':7 'remov':6 'use':3"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemm.ee/comment/4661945"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696915088 {#5583
    date: 2023-10-10 07:18:08.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
53 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
54 DENIED moderate
App\Entity\EntryComment {#5660
  +user: App\Entity\User {#4907 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "And now all of this, but in nixos 🤔"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1698056860 {#5655
    date: 2023-10-23 12:27:40.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5661 …}
  +nested: Doctrine\ORM\PersistentCollection {#5663 …}
  +votes: Doctrine\ORM\PersistentCollection {#5665 …}
  +reports: Doctrine\ORM\PersistentCollection {#5667 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5669 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5671 …}
  -id: 66878
  -bodyTs: "'nixo':8"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4224516"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696872559 {#5656
    date: 2023-10-09 19:29:19.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
55 DENIED edit
App\Entity\EntryComment {#5660
  +user: App\Entity\User {#4907 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "And now all of this, but in nixos 🤔"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1698056860 {#5655
    date: 2023-10-23 12:27:40.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5661 …}
  +nested: Doctrine\ORM\PersistentCollection {#5663 …}
  +votes: Doctrine\ORM\PersistentCollection {#5665 …}
  +reports: Doctrine\ORM\PersistentCollection {#5667 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5669 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5671 …}
  -id: 66878
  -bodyTs: "'nixo':8"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4224516"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696872559 {#5656
    date: 2023-10-09 19:29:19.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
56 DENIED moderate
App\Entity\EntryComment {#5660
  +user: App\Entity\User {#4907 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "And now all of this, but in nixos 🤔"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1698056860 {#5655
    date: 2023-10-23 12:27:40.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5661 …}
  +nested: Doctrine\ORM\PersistentCollection {#5663 …}
  +votes: Doctrine\ORM\PersistentCollection {#5665 …}
  +reports: Doctrine\ORM\PersistentCollection {#5667 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5669 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5671 …}
  -id: 66878
  -bodyTs: "'nixo':8"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4224516"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696872559 {#5656
    date: 2023-10-09 19:29:19.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
57 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
58 DENIED moderate
App\Entity\EntryComment {#5983
  +user: Proxies\__CG__\App\Entity\User {#5984 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5660
    +user: App\Entity\User {#4907 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: "And now all of this, but in nixos 🤔"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1698056860 {#5655
      date: 2023-10-23 12:27:40.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5661 …}
    +nested: Doctrine\ORM\PersistentCollection {#5663 …}
    +votes: Doctrine\ORM\PersistentCollection {#5665 …}
    +reports: Doctrine\ORM\PersistentCollection {#5667 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5669 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5671 …}
    -id: 66878
    -bodyTs: "'nixo':8"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4224516"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696872559 {#5656
      date: 2023-10-09 19:29:19.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5660}
  +body: "I’ve never used nixos but with nixos would it be possible to do all that with just the configuration file ?"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1696881817 {#5981
    date: 2023-10-09 22:03:37.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Gooey0210@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5985 …}
  +nested: Doctrine\ORM\PersistentCollection {#5987 …}
  +votes: Doctrine\ORM\PersistentCollection {#5989 …}
  +reports: Doctrine\ORM\PersistentCollection {#5991 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5993 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5995 …}
  -id: 66879
  -bodyTs: "'configur':20 'file':21 'never':3 'nixo':5,8 'possibl':12 'use':4 've':2 'would':9"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://slrpnk.net/comment/3112113"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696881817 {#5982
    date: 2023-10-09 22:03:37.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
59 DENIED edit
App\Entity\EntryComment {#5983
  +user: Proxies\__CG__\App\Entity\User {#5984 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5660
    +user: App\Entity\User {#4907 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: "And now all of this, but in nixos 🤔"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1698056860 {#5655
      date: 2023-10-23 12:27:40.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5661 …}
    +nested: Doctrine\ORM\PersistentCollection {#5663 …}
    +votes: Doctrine\ORM\PersistentCollection {#5665 …}
    +reports: Doctrine\ORM\PersistentCollection {#5667 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5669 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5671 …}
    -id: 66878
    -bodyTs: "'nixo':8"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4224516"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696872559 {#5656
      date: 2023-10-09 19:29:19.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5660}
  +body: "I’ve never used nixos but with nixos would it be possible to do all that with just the configuration file ?"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1696881817 {#5981
    date: 2023-10-09 22:03:37.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Gooey0210@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5985 …}
  +nested: Doctrine\ORM\PersistentCollection {#5987 …}
  +votes: Doctrine\ORM\PersistentCollection {#5989 …}
  +reports: Doctrine\ORM\PersistentCollection {#5991 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5993 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5995 …}
  -id: 66879
  -bodyTs: "'configur':20 'file':21 'never':3 'nixo':5,8 'possibl':12 'use':4 've':2 'would':9"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://slrpnk.net/comment/3112113"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696881817 {#5982
    date: 2023-10-09 22:03:37.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
60 DENIED moderate
App\Entity\EntryComment {#5983
  +user: Proxies\__CG__\App\Entity\User {#5984 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5660
    +user: App\Entity\User {#4907 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: "And now all of this, but in nixos 🤔"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1698056860 {#5655
      date: 2023-10-23 12:27:40.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5661 …}
    +nested: Doctrine\ORM\PersistentCollection {#5663 …}
    +votes: Doctrine\ORM\PersistentCollection {#5665 …}
    +reports: Doctrine\ORM\PersistentCollection {#5667 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5669 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5671 …}
    -id: 66878
    -bodyTs: "'nixo':8"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4224516"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696872559 {#5656
      date: 2023-10-09 19:29:19.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5660}
  +body: "I’ve never used nixos but with nixos would it be possible to do all that with just the configuration file ?"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1696881817 {#5981
    date: 2023-10-09 22:03:37.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Gooey0210@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5985 …}
  +nested: Doctrine\ORM\PersistentCollection {#5987 …}
  +votes: Doctrine\ORM\PersistentCollection {#5989 …}
  +reports: Doctrine\ORM\PersistentCollection {#5991 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5993 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5995 …}
  -id: 66879
  -bodyTs: "'configur':20 'file':21 'never':3 'nixo':5,8 'possibl':12 'use':4 've':2 'would':9"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://slrpnk.net/comment/3112113"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696881817 {#5982
    date: 2023-10-09 22:03:37.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
61 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
62 DENIED moderate
App\Entity\EntryComment {#6052
  +user: App\Entity\User {#4907 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5983
    +user: Proxies\__CG__\App\Entity\User {#5984 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5660
      +user: App\Entity\User {#4907 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: null
      +root: null
      +body: "And now all of this, but in nixos 🤔"
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1698056860 {#5655
        date: 2023-10-23 12:27:40.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5661 …}
      +nested: Doctrine\ORM\PersistentCollection {#5663 …}
      +votes: Doctrine\ORM\PersistentCollection {#5665 …}
      +reports: Doctrine\ORM\PersistentCollection {#5667 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5669 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5671 …}
      -id: 66878
      -bodyTs: "'nixo':8"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://sh.itjust.works/comment/4224516"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696872559 {#5656
        date: 2023-10-09 19:29:19.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5660}
    +body: "I’ve never used nixos but with nixos would it be possible to do all that with just the configuration file ?"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1696881817 {#5981
      date: 2023-10-09 22:03:37.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@Gooey0210@sh.itjust.works"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5985 …}
    +nested: Doctrine\ORM\PersistentCollection {#5987 …}
    +votes: Doctrine\ORM\PersistentCollection {#5989 …}
    +reports: Doctrine\ORM\PersistentCollection {#5991 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5993 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5995 …}
    -id: 66879
    -bodyTs: "'configur':20 'file':21 'never':3 'nixo':5,8 'possibl':12 'use':4 've':2 'would':9"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://slrpnk.net/comment/3112113"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696881817 {#5982
      date: 2023-10-09 22:03:37.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5660}
  +body: """
    Yes, without any docker, or with docker if you like\n
    \n
    But really the point is not to use docker, you just write an additional configuration file for the service you want. It looks like docker-compose but shorter, and you already have everything preconfigured (db, users, storage, etc)\n
    \n
    Docker is not safe if not ran rootless. With nixos you can write a docker-compose-like file for the service to be docker/podman/baremetal/VM/anything\n
    \n
    And you can find all the parameters/env variables on [search.nixos.org/options?channel=23.05&amp;amp;from=0…](https://search.nixos.org/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=Nextcloud)\n
    \n
    This search is for nextcloud, you can not only install the app and specify the login and password, but specify things like installed apps, default files, themes, which reverse proxyto use, and whether use some rules/headers/filtering\n
    \n
    Like that nixos is the future, really
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1696908161 {#6050
    date: 2023-10-10 05:22:41.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Gooey0210@sh.itjust.works"
    "@BastingChemina@slrpnk.net"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6053 …}
  +nested: Doctrine\ORM\PersistentCollection {#6055 …}
  +votes: Doctrine\ORM\PersistentCollection {#6057 …}
  +reports: Doctrine\ORM\PersistentCollection {#6059 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6061 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6063 …}
  -id: 66880
  -bodyTs: "'/options?channel=23.05&amp;amp;from=0':86 '/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=nextcloud)':89 'addit':24 'alreadi':42 'app':101,113 'compos':37,66 'configur':25 'db':46 'default':114 'docker':4,7,19,36,50,65 'docker-compos':35 'docker-compose-lik':64 'docker/podman/baremetal/vm/anything':74 'etc':49 'everyth':44 'file':26,68,115 'find':78 'futur':131 'instal':99,112 'like':10,34,67,111,126 'login':105 'look':33 'nextcloud':94 'nixo':59,128 'parameters/env':81 'password':107 'point':14 'preconfigur':45 'proxyto':119 'ran':56 'realli':12,132 'revers':118 'rootless':57 'rules/headers/filtering':125 'safe':53 'search':91 'search.nixos.org':85,88 'search.nixos.org/options?channel=23.05&amp;amp;from=0':84 'search.nixos.org/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=nextcloud)':87 'servic':29,71 'shorter':39 'specifi':103,109 'storag':48 'theme':116 'thing':110 'use':18,120,123 'user':47 'variabl':82 'want':31 'whether':122 'without':2 'write':22,62 'yes':1"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4247918"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696908161 {#6051
    date: 2023-10-10 05:22:41.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
63 DENIED edit
App\Entity\EntryComment {#6052
  +user: App\Entity\User {#4907 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5983
    +user: Proxies\__CG__\App\Entity\User {#5984 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5660
      +user: App\Entity\User {#4907 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: null
      +root: null
      +body: "And now all of this, but in nixos 🤔"
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1698056860 {#5655
        date: 2023-10-23 12:27:40.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5661 …}
      +nested: Doctrine\ORM\PersistentCollection {#5663 …}
      +votes: Doctrine\ORM\PersistentCollection {#5665 …}
      +reports: Doctrine\ORM\PersistentCollection {#5667 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5669 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5671 …}
      -id: 66878
      -bodyTs: "'nixo':8"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://sh.itjust.works/comment/4224516"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696872559 {#5656
        date: 2023-10-09 19:29:19.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5660}
    +body: "I’ve never used nixos but with nixos would it be possible to do all that with just the configuration file ?"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1696881817 {#5981
      date: 2023-10-09 22:03:37.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@Gooey0210@sh.itjust.works"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5985 …}
    +nested: Doctrine\ORM\PersistentCollection {#5987 …}
    +votes: Doctrine\ORM\PersistentCollection {#5989 …}
    +reports: Doctrine\ORM\PersistentCollection {#5991 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5993 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5995 …}
    -id: 66879
    -bodyTs: "'configur':20 'file':21 'never':3 'nixo':5,8 'possibl':12 'use':4 've':2 'would':9"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://slrpnk.net/comment/3112113"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696881817 {#5982
      date: 2023-10-09 22:03:37.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5660}
  +body: """
    Yes, without any docker, or with docker if you like\n
    \n
    But really the point is not to use docker, you just write an additional configuration file for the service you want. It looks like docker-compose but shorter, and you already have everything preconfigured (db, users, storage, etc)\n
    \n
    Docker is not safe if not ran rootless. With nixos you can write a docker-compose-like file for the service to be docker/podman/baremetal/VM/anything\n
    \n
    And you can find all the parameters/env variables on [search.nixos.org/options?channel=23.05&amp;amp;from=0…](https://search.nixos.org/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=Nextcloud)\n
    \n
    This search is for nextcloud, you can not only install the app and specify the login and password, but specify things like installed apps, default files, themes, which reverse proxyto use, and whether use some rules/headers/filtering\n
    \n
    Like that nixos is the future, really
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1696908161 {#6050
    date: 2023-10-10 05:22:41.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Gooey0210@sh.itjust.works"
    "@BastingChemina@slrpnk.net"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6053 …}
  +nested: Doctrine\ORM\PersistentCollection {#6055 …}
  +votes: Doctrine\ORM\PersistentCollection {#6057 …}
  +reports: Doctrine\ORM\PersistentCollection {#6059 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6061 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6063 …}
  -id: 66880
  -bodyTs: "'/options?channel=23.05&amp;amp;from=0':86 '/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=nextcloud)':89 'addit':24 'alreadi':42 'app':101,113 'compos':37,66 'configur':25 'db':46 'default':114 'docker':4,7,19,36,50,65 'docker-compos':35 'docker-compose-lik':64 'docker/podman/baremetal/vm/anything':74 'etc':49 'everyth':44 'file':26,68,115 'find':78 'futur':131 'instal':99,112 'like':10,34,67,111,126 'login':105 'look':33 'nextcloud':94 'nixo':59,128 'parameters/env':81 'password':107 'point':14 'preconfigur':45 'proxyto':119 'ran':56 'realli':12,132 'revers':118 'rootless':57 'rules/headers/filtering':125 'safe':53 'search':91 'search.nixos.org':85,88 'search.nixos.org/options?channel=23.05&amp;amp;from=0':84 'search.nixos.org/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=nextcloud)':87 'servic':29,71 'shorter':39 'specifi':103,109 'storag':48 'theme':116 'thing':110 'use':18,120,123 'user':47 'variabl':82 'want':31 'whether':122 'without':2 'write':22,62 'yes':1"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4247918"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696908161 {#6051
    date: 2023-10-10 05:22:41.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
64 DENIED moderate
App\Entity\EntryComment {#6052
  +user: App\Entity\User {#4907 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5983
    +user: Proxies\__CG__\App\Entity\User {#5984 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5660
      +user: App\Entity\User {#4907 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: null
      +root: null
      +body: "And now all of this, but in nixos 🤔"
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1698056860 {#5655
        date: 2023-10-23 12:27:40.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5661 …}
      +nested: Doctrine\ORM\PersistentCollection {#5663 …}
      +votes: Doctrine\ORM\PersistentCollection {#5665 …}
      +reports: Doctrine\ORM\PersistentCollection {#5667 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5669 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5671 …}
      -id: 66878
      -bodyTs: "'nixo':8"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://sh.itjust.works/comment/4224516"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696872559 {#5656
        date: 2023-10-09 19:29:19.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5660}
    +body: "I’ve never used nixos but with nixos would it be possible to do all that with just the configuration file ?"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1696881817 {#5981
      date: 2023-10-09 22:03:37.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@Gooey0210@sh.itjust.works"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5985 …}
    +nested: Doctrine\ORM\PersistentCollection {#5987 …}
    +votes: Doctrine\ORM\PersistentCollection {#5989 …}
    +reports: Doctrine\ORM\PersistentCollection {#5991 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5993 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5995 …}
    -id: 66879
    -bodyTs: "'configur':20 'file':21 'never':3 'nixo':5,8 'possibl':12 'use':4 've':2 'would':9"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://slrpnk.net/comment/3112113"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696881817 {#5982
      date: 2023-10-09 22:03:37.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5660}
  +body: """
    Yes, without any docker, or with docker if you like\n
    \n
    But really the point is not to use docker, you just write an additional configuration file for the service you want. It looks like docker-compose but shorter, and you already have everything preconfigured (db, users, storage, etc)\n
    \n
    Docker is not safe if not ran rootless. With nixos you can write a docker-compose-like file for the service to be docker/podman/baremetal/VM/anything\n
    \n
    And you can find all the parameters/env variables on [search.nixos.org/options?channel=23.05&amp;amp;from=0…](https://search.nixos.org/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=Nextcloud)\n
    \n
    This search is for nextcloud, you can not only install the app and specify the login and password, but specify things like installed apps, default files, themes, which reverse proxyto use, and whether use some rules/headers/filtering\n
    \n
    Like that nixos is the future, really
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1696908161 {#6050
    date: 2023-10-10 05:22:41.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Gooey0210@sh.itjust.works"
    "@BastingChemina@slrpnk.net"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6053 …}
  +nested: Doctrine\ORM\PersistentCollection {#6055 …}
  +votes: Doctrine\ORM\PersistentCollection {#6057 …}
  +reports: Doctrine\ORM\PersistentCollection {#6059 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6061 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6063 …}
  -id: 66880
  -bodyTs: "'/options?channel=23.05&amp;amp;from=0':86 '/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=nextcloud)':89 'addit':24 'alreadi':42 'app':101,113 'compos':37,66 'configur':25 'db':46 'default':114 'docker':4,7,19,36,50,65 'docker-compos':35 'docker-compose-lik':64 'docker/podman/baremetal/vm/anything':74 'etc':49 'everyth':44 'file':26,68,115 'find':78 'futur':131 'instal':99,112 'like':10,34,67,111,126 'login':105 'look':33 'nextcloud':94 'nixo':59,128 'parameters/env':81 'password':107 'point':14 'preconfigur':45 'proxyto':119 'ran':56 'realli':12,132 'revers':118 'rootless':57 'rules/headers/filtering':125 'safe':53 'search':91 'search.nixos.org':85,88 'search.nixos.org/options?channel=23.05&amp;amp;from=0':84 'search.nixos.org/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=nextcloud)':87 'servic':29,71 'shorter':39 'specifi':103,109 'storag':48 'theme':116 'thing':110 'use':18,120,123 'user':47 'variabl':82 'want':31 'whether':122 'without':2 'write':22,62 'yes':1"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4247918"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696908161 {#6051
    date: 2023-10-10 05:22:41.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
65 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
66 DENIED moderate
App\Entity\EntryComment {#6089
  +user: Proxies\__CG__\App\Entity\User {#6090 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#6052
    +user: App\Entity\User {#4907 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5983
      +user: Proxies\__CG__\App\Entity\User {#5984 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: App\Entity\EntryComment {#5660
        +user: App\Entity\User {#4907 …}
        +entry: App\Entity\Entry {#2419}
        +magazine: App\Entity\Magazine {#265}
        +image: null
        +parent: null
        +root: null
        +body: "And now all of this, but in nixos 🤔"
        +lang: "en"
        +isAdult: false
        +favouriteCount: 0
        +score: 0
        +lastActive: DateTime @1698056860 {#5655
          date: 2023-10-23 12:27:40.0 +02:00
        }
        +ip: null
        +tags: null
        +mentions: [
          "@db0@lemmy.dbzer0.com"
        ]
        +children: Doctrine\ORM\PersistentCollection {#5661 …}
        +nested: Doctrine\ORM\PersistentCollection {#5663 …}
        +votes: Doctrine\ORM\PersistentCollection {#5665 …}
        +reports: Doctrine\ORM\PersistentCollection {#5667 …}
        +favourites: Doctrine\ORM\PersistentCollection {#5669 …}
        +notifications: Doctrine\ORM\PersistentCollection {#5671 …}
        -id: 66878
        -bodyTs: "'nixo':8"
        +ranking: 0
        +commentCount: 0
        +upVotes: 0
        +downVotes: 0
        +visibility: "visible             "
        +apId: "https://sh.itjust.works/comment/4224516"
        +editedAt: null
        +createdAt: DateTimeImmutable @1696872559 {#5656
          date: 2023-10-09 19:29:19.0 +02:00
        }
      }
      +root: App\Entity\EntryComment {#5660}
      +body: "I’ve never used nixos but with nixos would it be possible to do all that with just the configuration file ?"
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1696881817 {#5981
        date: 2023-10-09 22:03:37.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
        "@Gooey0210@sh.itjust.works"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5985 …}
      +nested: Doctrine\ORM\PersistentCollection {#5987 …}
      +votes: Doctrine\ORM\PersistentCollection {#5989 …}
      +reports: Doctrine\ORM\PersistentCollection {#5991 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5993 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5995 …}
      -id: 66879
      -bodyTs: "'configur':20 'file':21 'never':3 'nixo':5,8 'possibl':12 'use':4 've':2 'would':9"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://slrpnk.net/comment/3112113"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696881817 {#5982
        date: 2023-10-09 22:03:37.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5660}
    +body: """
      Yes, without any docker, or with docker if you like\n
      \n
      But really the point is not to use docker, you just write an additional configuration file for the service you want. It looks like docker-compose but shorter, and you already have everything preconfigured (db, users, storage, etc)\n
      \n
      Docker is not safe if not ran rootless. With nixos you can write a docker-compose-like file for the service to be docker/podman/baremetal/VM/anything\n
      \n
      And you can find all the parameters/env variables on [search.nixos.org/options?channel=23.05&amp;amp;from=0…](https://search.nixos.org/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=Nextcloud)\n
      \n
      This search is for nextcloud, you can not only install the app and specify the login and password, but specify things like installed apps, default files, themes, which reverse proxyto use, and whether use some rules/headers/filtering\n
      \n
      Like that nixos is the future, really
      """
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1696908161 {#6050
      date: 2023-10-10 05:22:41.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@Gooey0210@sh.itjust.works"
      "@BastingChemina@slrpnk.net"
    ]
    +children: Doctrine\ORM\PersistentCollection {#6053 …}
    +nested: Doctrine\ORM\PersistentCollection {#6055 …}
    +votes: Doctrine\ORM\PersistentCollection {#6057 …}
    +reports: Doctrine\ORM\PersistentCollection {#6059 …}
    +favourites: Doctrine\ORM\PersistentCollection {#6061 …}
    +notifications: Doctrine\ORM\PersistentCollection {#6063 …}
    -id: 66880
    -bodyTs: "'/options?channel=23.05&amp;amp;from=0':86 '/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=nextcloud)':89 'addit':24 'alreadi':42 'app':101,113 'compos':37,66 'configur':25 'db':46 'default':114 'docker':4,7,19,36,50,65 'docker-compos':35 'docker-compose-lik':64 'docker/podman/baremetal/vm/anything':74 'etc':49 'everyth':44 'file':26,68,115 'find':78 'futur':131 'instal':99,112 'like':10,34,67,111,126 'login':105 'look':33 'nextcloud':94 'nixo':59,128 'parameters/env':81 'password':107 'point':14 'preconfigur':45 'proxyto':119 'ran':56 'realli':12,132 'revers':118 'rootless':57 'rules/headers/filtering':125 'safe':53 'search':91 'search.nixos.org':85,88 'search.nixos.org/options?channel=23.05&amp;amp;from=0':84 'search.nixos.org/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=nextcloud)':87 'servic':29,71 'shorter':39 'specifi':103,109 'storag':48 'theme':116 'thing':110 'use':18,120,123 'user':47 'variabl':82 'want':31 'whether':122 'without':2 'write':22,62 'yes':1"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4247918"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696908161 {#6051
      date: 2023-10-10 05:22:41.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5660}
  +body: "It’s going to be about as popular as Kubernetes for general use."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1698056853 {#6087
    date: 2023-10-23 12:27:33.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Gooey0210@sh.itjust.works"
    "@BastingChemina@slrpnk.net"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6091 …}
  +nested: Doctrine\ORM\PersistentCollection {#6093 …}
  +votes: Doctrine\ORM\PersistentCollection {#6095 …}
  +reports: Doctrine\ORM\PersistentCollection {#6097 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6099 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6101 …}
  -id: 66881
  -bodyTs: "'general':12 'go':3 'kubernet':10 'popular':8 'use':13"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://feddit.nl/comment/3973223"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698056853 {#6088
    date: 2023-10-23 12:27:33.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
67 DENIED edit
App\Entity\EntryComment {#6089
  +user: Proxies\__CG__\App\Entity\User {#6090 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#6052
    +user: App\Entity\User {#4907 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5983
      +user: Proxies\__CG__\App\Entity\User {#5984 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: App\Entity\EntryComment {#5660
        +user: App\Entity\User {#4907 …}
        +entry: App\Entity\Entry {#2419}
        +magazine: App\Entity\Magazine {#265}
        +image: null
        +parent: null
        +root: null
        +body: "And now all of this, but in nixos 🤔"
        +lang: "en"
        +isAdult: false
        +favouriteCount: 0
        +score: 0
        +lastActive: DateTime @1698056860 {#5655
          date: 2023-10-23 12:27:40.0 +02:00
        }
        +ip: null
        +tags: null
        +mentions: [
          "@db0@lemmy.dbzer0.com"
        ]
        +children: Doctrine\ORM\PersistentCollection {#5661 …}
        +nested: Doctrine\ORM\PersistentCollection {#5663 …}
        +votes: Doctrine\ORM\PersistentCollection {#5665 …}
        +reports: Doctrine\ORM\PersistentCollection {#5667 …}
        +favourites: Doctrine\ORM\PersistentCollection {#5669 …}
        +notifications: Doctrine\ORM\PersistentCollection {#5671 …}
        -id: 66878
        -bodyTs: "'nixo':8"
        +ranking: 0
        +commentCount: 0
        +upVotes: 0
        +downVotes: 0
        +visibility: "visible             "
        +apId: "https://sh.itjust.works/comment/4224516"
        +editedAt: null
        +createdAt: DateTimeImmutable @1696872559 {#5656
          date: 2023-10-09 19:29:19.0 +02:00
        }
      }
      +root: App\Entity\EntryComment {#5660}
      +body: "I’ve never used nixos but with nixos would it be possible to do all that with just the configuration file ?"
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1696881817 {#5981
        date: 2023-10-09 22:03:37.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
        "@Gooey0210@sh.itjust.works"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5985 …}
      +nested: Doctrine\ORM\PersistentCollection {#5987 …}
      +votes: Doctrine\ORM\PersistentCollection {#5989 …}
      +reports: Doctrine\ORM\PersistentCollection {#5991 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5993 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5995 …}
      -id: 66879
      -bodyTs: "'configur':20 'file':21 'never':3 'nixo':5,8 'possibl':12 'use':4 've':2 'would':9"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://slrpnk.net/comment/3112113"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696881817 {#5982
        date: 2023-10-09 22:03:37.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5660}
    +body: """
      Yes, without any docker, or with docker if you like\n
      \n
      But really the point is not to use docker, you just write an additional configuration file for the service you want. It looks like docker-compose but shorter, and you already have everything preconfigured (db, users, storage, etc)\n
      \n
      Docker is not safe if not ran rootless. With nixos you can write a docker-compose-like file for the service to be docker/podman/baremetal/VM/anything\n
      \n
      And you can find all the parameters/env variables on [search.nixos.org/options?channel=23.05&amp;amp;from=0…](https://search.nixos.org/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=Nextcloud)\n
      \n
      This search is for nextcloud, you can not only install the app and specify the login and password, but specify things like installed apps, default files, themes, which reverse proxyto use, and whether use some rules/headers/filtering\n
      \n
      Like that nixos is the future, really
      """
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1696908161 {#6050
      date: 2023-10-10 05:22:41.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@Gooey0210@sh.itjust.works"
      "@BastingChemina@slrpnk.net"
    ]
    +children: Doctrine\ORM\PersistentCollection {#6053 …}
    +nested: Doctrine\ORM\PersistentCollection {#6055 …}
    +votes: Doctrine\ORM\PersistentCollection {#6057 …}
    +reports: Doctrine\ORM\PersistentCollection {#6059 …}
    +favourites: Doctrine\ORM\PersistentCollection {#6061 …}
    +notifications: Doctrine\ORM\PersistentCollection {#6063 …}
    -id: 66880
    -bodyTs: "'/options?channel=23.05&amp;amp;from=0':86 '/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=nextcloud)':89 'addit':24 'alreadi':42 'app':101,113 'compos':37,66 'configur':25 'db':46 'default':114 'docker':4,7,19,36,50,65 'docker-compos':35 'docker-compose-lik':64 'docker/podman/baremetal/vm/anything':74 'etc':49 'everyth':44 'file':26,68,115 'find':78 'futur':131 'instal':99,112 'like':10,34,67,111,126 'login':105 'look':33 'nextcloud':94 'nixo':59,128 'parameters/env':81 'password':107 'point':14 'preconfigur':45 'proxyto':119 'ran':56 'realli':12,132 'revers':118 'rootless':57 'rules/headers/filtering':125 'safe':53 'search':91 'search.nixos.org':85,88 'search.nixos.org/options?channel=23.05&amp;amp;from=0':84 'search.nixos.org/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=nextcloud)':87 'servic':29,71 'shorter':39 'specifi':103,109 'storag':48 'theme':116 'thing':110 'use':18,120,123 'user':47 'variabl':82 'want':31 'whether':122 'without':2 'write':22,62 'yes':1"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4247918"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696908161 {#6051
      date: 2023-10-10 05:22:41.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5660}
  +body: "It’s going to be about as popular as Kubernetes for general use."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1698056853 {#6087
    date: 2023-10-23 12:27:33.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Gooey0210@sh.itjust.works"
    "@BastingChemina@slrpnk.net"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6091 …}
  +nested: Doctrine\ORM\PersistentCollection {#6093 …}
  +votes: Doctrine\ORM\PersistentCollection {#6095 …}
  +reports: Doctrine\ORM\PersistentCollection {#6097 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6099 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6101 …}
  -id: 66881
  -bodyTs: "'general':12 'go':3 'kubernet':10 'popular':8 'use':13"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://feddit.nl/comment/3973223"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698056853 {#6088
    date: 2023-10-23 12:27:33.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
68 DENIED moderate
App\Entity\EntryComment {#6089
  +user: Proxies\__CG__\App\Entity\User {#6090 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#6052
    +user: App\Entity\User {#4907 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5983
      +user: Proxies\__CG__\App\Entity\User {#5984 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: App\Entity\EntryComment {#5660
        +user: App\Entity\User {#4907 …}
        +entry: App\Entity\Entry {#2419}
        +magazine: App\Entity\Magazine {#265}
        +image: null
        +parent: null
        +root: null
        +body: "And now all of this, but in nixos 🤔"
        +lang: "en"
        +isAdult: false
        +favouriteCount: 0
        +score: 0
        +lastActive: DateTime @1698056860 {#5655
          date: 2023-10-23 12:27:40.0 +02:00
        }
        +ip: null
        +tags: null
        +mentions: [
          "@db0@lemmy.dbzer0.com"
        ]
        +children: Doctrine\ORM\PersistentCollection {#5661 …}
        +nested: Doctrine\ORM\PersistentCollection {#5663 …}
        +votes: Doctrine\ORM\PersistentCollection {#5665 …}
        +reports: Doctrine\ORM\PersistentCollection {#5667 …}
        +favourites: Doctrine\ORM\PersistentCollection {#5669 …}
        +notifications: Doctrine\ORM\PersistentCollection {#5671 …}
        -id: 66878
        -bodyTs: "'nixo':8"
        +ranking: 0
        +commentCount: 0
        +upVotes: 0
        +downVotes: 0
        +visibility: "visible             "
        +apId: "https://sh.itjust.works/comment/4224516"
        +editedAt: null
        +createdAt: DateTimeImmutable @1696872559 {#5656
          date: 2023-10-09 19:29:19.0 +02:00
        }
      }
      +root: App\Entity\EntryComment {#5660}
      +body: "I’ve never used nixos but with nixos would it be possible to do all that with just the configuration file ?"
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1696881817 {#5981
        date: 2023-10-09 22:03:37.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
        "@Gooey0210@sh.itjust.works"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5985 …}
      +nested: Doctrine\ORM\PersistentCollection {#5987 …}
      +votes: Doctrine\ORM\PersistentCollection {#5989 …}
      +reports: Doctrine\ORM\PersistentCollection {#5991 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5993 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5995 …}
      -id: 66879
      -bodyTs: "'configur':20 'file':21 'never':3 'nixo':5,8 'possibl':12 'use':4 've':2 'would':9"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://slrpnk.net/comment/3112113"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696881817 {#5982
        date: 2023-10-09 22:03:37.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5660}
    +body: """
      Yes, without any docker, or with docker if you like\n
      \n
      But really the point is not to use docker, you just write an additional configuration file for the service you want. It looks like docker-compose but shorter, and you already have everything preconfigured (db, users, storage, etc)\n
      \n
      Docker is not safe if not ran rootless. With nixos you can write a docker-compose-like file for the service to be docker/podman/baremetal/VM/anything\n
      \n
      And you can find all the parameters/env variables on [search.nixos.org/options?channel=23.05&amp;amp;from=0…](https://search.nixos.org/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=Nextcloud)\n
      \n
      This search is for nextcloud, you can not only install the app and specify the login and password, but specify things like installed apps, default files, themes, which reverse proxyto use, and whether use some rules/headers/filtering\n
      \n
      Like that nixos is the future, really
      """
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1696908161 {#6050
      date: 2023-10-10 05:22:41.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@Gooey0210@sh.itjust.works"
      "@BastingChemina@slrpnk.net"
    ]
    +children: Doctrine\ORM\PersistentCollection {#6053 …}
    +nested: Doctrine\ORM\PersistentCollection {#6055 …}
    +votes: Doctrine\ORM\PersistentCollection {#6057 …}
    +reports: Doctrine\ORM\PersistentCollection {#6059 …}
    +favourites: Doctrine\ORM\PersistentCollection {#6061 …}
    +notifications: Doctrine\ORM\PersistentCollection {#6063 …}
    -id: 66880
    -bodyTs: "'/options?channel=23.05&amp;amp;from=0':86 '/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=nextcloud)':89 'addit':24 'alreadi':42 'app':101,113 'compos':37,66 'configur':25 'db':46 'default':114 'docker':4,7,19,36,50,65 'docker-compos':35 'docker-compose-lik':64 'docker/podman/baremetal/vm/anything':74 'etc':49 'everyth':44 'file':26,68,115 'find':78 'futur':131 'instal':99,112 'like':10,34,67,111,126 'login':105 'look':33 'nextcloud':94 'nixo':59,128 'parameters/env':81 'password':107 'point':14 'preconfigur':45 'proxyto':119 'ran':56 'realli':12,132 'revers':118 'rootless':57 'rules/headers/filtering':125 'safe':53 'search':91 'search.nixos.org':85,88 'search.nixos.org/options?channel=23.05&amp;amp;from=0':84 'search.nixos.org/options?channel=23.05&amp;from=0&amp;size=50&amp;sort=relevance&amp;type=packages&amp;query=nextcloud)':87 'servic':29,71 'shorter':39 'specifi':103,109 'storag':48 'theme':116 'thing':110 'use':18,120,123 'user':47 'variabl':82 'want':31 'whether':122 'without':2 'write':22,62 'yes':1"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4247918"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696908161 {#6051
      date: 2023-10-10 05:22:41.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5660}
  +body: "It’s going to be about as popular as Kubernetes for general use."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1698056853 {#6087
    date: 2023-10-23 12:27:33.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Gooey0210@sh.itjust.works"
    "@BastingChemina@slrpnk.net"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6091 …}
  +nested: Doctrine\ORM\PersistentCollection {#6093 …}
  +votes: Doctrine\ORM\PersistentCollection {#6095 …}
  +reports: Doctrine\ORM\PersistentCollection {#6097 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6099 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6101 …}
  -id: 66881
  -bodyTs: "'general':12 'go':3 'kubernet':10 'popular':8 'use':13"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://feddit.nl/comment/3973223"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698056853 {#6088
    date: 2023-10-23 12:27:33.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
69 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
70 DENIED moderate
App\Entity\EntryComment {#5675
  +user: App\Entity\User {#5308 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1698028928 {#5659
    date: 2023-10-23 04:42:08.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5676 …}
  +nested: Doctrine\ORM\PersistentCollection {#5678 …}
  +votes: Doctrine\ORM\PersistentCollection {#5680 …}
  +reports: Doctrine\ORM\PersistentCollection {#5682 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
  -id: 47011
  -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4221044"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696869014 {#5658
    date: 2023-10-09 18:30:14.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
71 DENIED edit
App\Entity\EntryComment {#5675
  +user: App\Entity\User {#5308 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1698028928 {#5659
    date: 2023-10-23 04:42:08.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5676 …}
  +nested: Doctrine\ORM\PersistentCollection {#5678 …}
  +votes: Doctrine\ORM\PersistentCollection {#5680 …}
  +reports: Doctrine\ORM\PersistentCollection {#5682 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
  -id: 47011
  -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4221044"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696869014 {#5658
    date: 2023-10-09 18:30:14.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
72 DENIED moderate
App\Entity\EntryComment {#5675
  +user: App\Entity\User {#5308 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1698028928 {#5659
    date: 2023-10-23 04:42:08.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5676 …}
  +nested: Doctrine\ORM\PersistentCollection {#5678 …}
  +votes: Doctrine\ORM\PersistentCollection {#5680 …}
  +reports: Doctrine\ORM\PersistentCollection {#5682 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
  -id: 47011
  -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4221044"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696869014 {#5658
    date: 2023-10-09 18:30:14.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
73 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
74 DENIED moderate
App\Entity\EntryComment {#5921
  +user: Proxies\__CG__\App\Entity\User {#5918 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5675
    +user: App\Entity\User {#5308 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1698028928 {#5659
      date: 2023-10-23 04:42:08.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5676 …}
    +nested: Doctrine\ORM\PersistentCollection {#5678 …}
    +votes: Doctrine\ORM\PersistentCollection {#5680 …}
    +reports: Doctrine\ORM\PersistentCollection {#5682 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
    -id: 47011
    -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4221044"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696869014 {#5658
      date: 2023-10-09 18:30:14.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5675}
  +body: "I’d like to know this too. I planned to use my laptop as the server , but I have a spare rpi4 that I would prefer."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1696869582 {#5922
    date: 2023-10-09 18:39:42.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@spacecowboy@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5915 …}
  +nested: Doctrine\ORM\PersistentCollection {#5913 …}
  +votes: Doctrine\ORM\PersistentCollection {#5917 …}
  +reports: Doctrine\ORM\PersistentCollection {#5928 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5930 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5932 …}
  -id: 47012
  -bodyTs: "'d':2 'know':5 'laptop':13 'like':3 'plan':9 'prefer':26 'rpi4':22 'server':16 'spare':21 'use':11 'would':25"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.ca/comment/3839724"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696869582 {#5925
    date: 2023-10-09 18:39:42.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
75 DENIED edit
App\Entity\EntryComment {#5921
  +user: Proxies\__CG__\App\Entity\User {#5918 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5675
    +user: App\Entity\User {#5308 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1698028928 {#5659
      date: 2023-10-23 04:42:08.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5676 …}
    +nested: Doctrine\ORM\PersistentCollection {#5678 …}
    +votes: Doctrine\ORM\PersistentCollection {#5680 …}
    +reports: Doctrine\ORM\PersistentCollection {#5682 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
    -id: 47011
    -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4221044"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696869014 {#5658
      date: 2023-10-09 18:30:14.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5675}
  +body: "I’d like to know this too. I planned to use my laptop as the server , but I have a spare rpi4 that I would prefer."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1696869582 {#5922
    date: 2023-10-09 18:39:42.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@spacecowboy@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5915 …}
  +nested: Doctrine\ORM\PersistentCollection {#5913 …}
  +votes: Doctrine\ORM\PersistentCollection {#5917 …}
  +reports: Doctrine\ORM\PersistentCollection {#5928 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5930 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5932 …}
  -id: 47012
  -bodyTs: "'d':2 'know':5 'laptop':13 'like':3 'plan':9 'prefer':26 'rpi4':22 'server':16 'spare':21 'use':11 'would':25"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.ca/comment/3839724"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696869582 {#5925
    date: 2023-10-09 18:39:42.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
76 DENIED moderate
App\Entity\EntryComment {#5921
  +user: Proxies\__CG__\App\Entity\User {#5918 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5675
    +user: App\Entity\User {#5308 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1698028928 {#5659
      date: 2023-10-23 04:42:08.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5676 …}
    +nested: Doctrine\ORM\PersistentCollection {#5678 …}
    +votes: Doctrine\ORM\PersistentCollection {#5680 …}
    +reports: Doctrine\ORM\PersistentCollection {#5682 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
    -id: 47011
    -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4221044"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696869014 {#5658
      date: 2023-10-09 18:30:14.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5675}
  +body: "I’d like to know this too. I planned to use my laptop as the server , but I have a spare rpi4 that I would prefer."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1696869582 {#5922
    date: 2023-10-09 18:39:42.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@spacecowboy@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5915 …}
  +nested: Doctrine\ORM\PersistentCollection {#5913 …}
  +votes: Doctrine\ORM\PersistentCollection {#5917 …}
  +reports: Doctrine\ORM\PersistentCollection {#5928 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5930 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5932 …}
  -id: 47012
  -bodyTs: "'d':2 'know':5 'laptop':13 'like':3 'plan':9 'prefer':26 'rpi4':22 'server':16 'spare':21 'use':11 'would':25"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.ca/comment/3839724"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696869582 {#5925
    date: 2023-10-09 18:39:42.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
77 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
78 DENIED moderate
App\Entity\EntryComment {#6008
  +user: Proxies\__CG__\App\Entity\User {#6004 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5921
    +user: Proxies\__CG__\App\Entity\User {#5918 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5675
      +user: App\Entity\User {#5308 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: null
      +root: null
      +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1698028928 {#5659
        date: 2023-10-23 04:42:08.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5676 …}
      +nested: Doctrine\ORM\PersistentCollection {#5678 …}
      +votes: Doctrine\ORM\PersistentCollection {#5680 …}
      +reports: Doctrine\ORM\PersistentCollection {#5682 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
      -id: 47011
      -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://sh.itjust.works/comment/4221044"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696869014 {#5658
        date: 2023-10-09 18:30:14.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5675}
    +body: "I’d like to know this too. I planned to use my laptop as the server , but I have a spare rpi4 that I would prefer."
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1696869582 {#5922
      date: 2023-10-09 18:39:42.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@spacecowboy@sh.itjust.works"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5915 …}
    +nested: Doctrine\ORM\PersistentCollection {#5913 …}
    +votes: Doctrine\ORM\PersistentCollection {#5917 …}
    +reports: Doctrine\ORM\PersistentCollection {#5928 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5930 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5932 …}
    -id: 47012
    -bodyTs: "'d':2 'know':5 'laptop':13 'like':3 'plan':9 'prefer':26 'rpi4':22 'server':16 'spare':21 'use':11 'would':25"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://lemmy.ca/comment/3839724"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696869582 {#5925
      date: 2023-10-09 18:39:42.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5675}
  +body: """
    Yes, you can use a Pi4 to accomplish the results of this guide, I used a Pi3B+ for a few years without any major issues. However, you will not be able to follow this guide to get it set up, as Pi's are a different architecture and so you need different images for the initial setup regarding Ubuntu. Mostly everything after that will be the same though.\n
    \n
    Just keep some spare copies of your setup mirror imaged to another SD card once you're all done and you are golden. Configure your download settings in Sonarr/Radarr to avoid 4k content, that's the only real limitation of the Pi's, outside of the SD card lifespan (solved mostly by just not logging).\n
    \n
    @spacecowboy - not being able to write an image will make the Pi4 as a server a biiit more difficult. Do you have an android phone? There's etchdroid or Pi SD Card imager, which materials to use for can cost under $10 (you'd want the SD card reader that can plug into your phones port, for example). It's fleeting otherwise, chances are high that you will get it set up and then the SD card will die and you'd be out of luck regardless.. If the Pi is your only computer for now, then I'd keep it that way. Either way, I do highly suggest some backup SD cards, they are cheap and you rarely need more than 32gb for the operating system and basic usage - anything with heavy logging or storage should be kept on an external hard drive.\n
    \n
    While it's possible with an android device, even maybe a library computer with permission for USB devices and temporary downloads would be a good option. It's really nice to be able to get your server all setup and then make a duplicate of the SD card, which I don't believe is possible on android. It's imperative to have a backup since SD cards do have a lifespan, using it as a main server with no backups is putting all your eggs in one basket. All it takes is forgetting to disable logging and the clock starts ticking.\n
    \n
    It's also nice to be able to test out different operating systems, as you might find that Buster has more overhead than something like DietPi, a command line based OS, as well as being slightly less straightforward for your needs if the Pi is going to be a headless server. But like I said, if you're using the Pi as a regular computer, DietPi won't be a viable option since it has no GUI.
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1696898485 {#6009
    date: 2023-10-10 02:41:25.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@spacecowboy@sh.itjust.works"
    "@spacecowboy"
    "@FunderPants@lemmy.ca"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6000 …}
  +nested: Doctrine\ORM\PersistentCollection {#5998 …}
  +votes: Doctrine\ORM\PersistentCollection {#6002 …}
  +reports: Doctrine\ORM\PersistentCollection {#6014 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6016 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6018 …}
  -id: 47013
  -bodyTs: "'..':211 '10':165 '32gb':247 '4k':100 'abl':31,127,301,376 'accomplish':8 'also':372 'android':147,275,325 'anoth':80 'anyth':255 'architectur':47 'avoid':99 'backup':235,332,348 'base':399 'basic':253 'basket':356 'believ':321 'biiit':140 'buster':388 'card':82,116,155,171,200,237,316,335 'chanc':186 'cheap':240 'clock':367 'command':397 'comput':218,281,434 'configur':92 'content':101 'copi':73 'cost':163 'd':167,205,223 'devic':276,286 'die':202 'dietpi':395,435 'differ':46,52,380 'difficult':142 'disabl':363 'done':87 'download':94,289 'drive':268 'duplic':312 'egg':353 'either':228 'etchdroid':151 'even':277 'everyth':61 'exampl':181 'extern':266 'find':386 'fleet':184 'follow':33 'forget':361 'get':37,192,303 'go':415 'golden':91 'good':293 'gui':446 'guid':13,35 'hard':267 'headless':419 'heavi':257 'high':188,232 'howev':26 'imag':53,78,131,156 'imper':328 'initi':56 'issu':25 'keep':70,224 'kept':263 'less':406 'librari':280 'lifespan':117,339 'like':394,422 'limit':107 'line':398 'log':123,258,364 'luck':209 'main':344 'major':24 'make':133,310 'materi':158 'mayb':278 'might':385 'mirror':77 'most':60,119 'need':51,244,410 'nice':298,373 'one':355 'oper':250,381 'option':294,441 'os':400 'otherwis':185 'outsid':112 'overhead':391 'permiss':283 'phone':148,178 'pi':42,110,153,214,413,430 'pi3b':17 'pi4':6,135 'plug':175 'port':179 'possibl':272,323 'put':350 'rare':243 're':85,427 'reader':172 'real':106 'realli':297 'regard':58 'regardless':210 'regular':433 'result':10 'said':424 'sd':81,115,154,170,199,236,315,334 'server':138,305,345,420 'set':39,95,194 'setup':57,76,307 'sinc':333,442 'slight':405 'solv':118 'someth':393 'sonarr/radarr':97 'spacecowboy':124 'spare':72 'start':368 'storag':260 'straightforward':407 'suggest':233 'system':251,382 'take':359 'temporari':288 'test':378 'though':68 'tick':369 'ubuntu':59 'usag':254 'usb':285 'use':4,15,160,340,428 'viabl':440 'want':168 'way':227,229 'well':402 'without':22 'won':436 'would':290 'write':129 'year':21 'yes':1"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://kbin.social/m/piracy@lemmy.dbzer0.com/t/525384/-/comment/2863798"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696898485 {#6012
    date: 2023-10-10 02:41:25.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
79 DENIED edit
App\Entity\EntryComment {#6008
  +user: Proxies\__CG__\App\Entity\User {#6004 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5921
    +user: Proxies\__CG__\App\Entity\User {#5918 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5675
      +user: App\Entity\User {#5308 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: null
      +root: null
      +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1698028928 {#5659
        date: 2023-10-23 04:42:08.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5676 …}
      +nested: Doctrine\ORM\PersistentCollection {#5678 …}
      +votes: Doctrine\ORM\PersistentCollection {#5680 …}
      +reports: Doctrine\ORM\PersistentCollection {#5682 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
      -id: 47011
      -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://sh.itjust.works/comment/4221044"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696869014 {#5658
        date: 2023-10-09 18:30:14.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5675}
    +body: "I’d like to know this too. I planned to use my laptop as the server , but I have a spare rpi4 that I would prefer."
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1696869582 {#5922
      date: 2023-10-09 18:39:42.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@spacecowboy@sh.itjust.works"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5915 …}
    +nested: Doctrine\ORM\PersistentCollection {#5913 …}
    +votes: Doctrine\ORM\PersistentCollection {#5917 …}
    +reports: Doctrine\ORM\PersistentCollection {#5928 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5930 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5932 …}
    -id: 47012
    -bodyTs: "'d':2 'know':5 'laptop':13 'like':3 'plan':9 'prefer':26 'rpi4':22 'server':16 'spare':21 'use':11 'would':25"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://lemmy.ca/comment/3839724"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696869582 {#5925
      date: 2023-10-09 18:39:42.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5675}
  +body: """
    Yes, you can use a Pi4 to accomplish the results of this guide, I used a Pi3B+ for a few years without any major issues. However, you will not be able to follow this guide to get it set up, as Pi's are a different architecture and so you need different images for the initial setup regarding Ubuntu. Mostly everything after that will be the same though.\n
    \n
    Just keep some spare copies of your setup mirror imaged to another SD card once you're all done and you are golden. Configure your download settings in Sonarr/Radarr to avoid 4k content, that's the only real limitation of the Pi's, outside of the SD card lifespan (solved mostly by just not logging).\n
    \n
    @spacecowboy - not being able to write an image will make the Pi4 as a server a biiit more difficult. Do you have an android phone? There's etchdroid or Pi SD Card imager, which materials to use for can cost under $10 (you'd want the SD card reader that can plug into your phones port, for example). It's fleeting otherwise, chances are high that you will get it set up and then the SD card will die and you'd be out of luck regardless.. If the Pi is your only computer for now, then I'd keep it that way. Either way, I do highly suggest some backup SD cards, they are cheap and you rarely need more than 32gb for the operating system and basic usage - anything with heavy logging or storage should be kept on an external hard drive.\n
    \n
    While it's possible with an android device, even maybe a library computer with permission for USB devices and temporary downloads would be a good option. It's really nice to be able to get your server all setup and then make a duplicate of the SD card, which I don't believe is possible on android. It's imperative to have a backup since SD cards do have a lifespan, using it as a main server with no backups is putting all your eggs in one basket. All it takes is forgetting to disable logging and the clock starts ticking.\n
    \n
    It's also nice to be able to test out different operating systems, as you might find that Buster has more overhead than something like DietPi, a command line based OS, as well as being slightly less straightforward for your needs if the Pi is going to be a headless server. But like I said, if you're using the Pi as a regular computer, DietPi won't be a viable option since it has no GUI.
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1696898485 {#6009
    date: 2023-10-10 02:41:25.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@spacecowboy@sh.itjust.works"
    "@spacecowboy"
    "@FunderPants@lemmy.ca"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6000 …}
  +nested: Doctrine\ORM\PersistentCollection {#5998 …}
  +votes: Doctrine\ORM\PersistentCollection {#6002 …}
  +reports: Doctrine\ORM\PersistentCollection {#6014 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6016 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6018 …}
  -id: 47013
  -bodyTs: "'..':211 '10':165 '32gb':247 '4k':100 'abl':31,127,301,376 'accomplish':8 'also':372 'android':147,275,325 'anoth':80 'anyth':255 'architectur':47 'avoid':99 'backup':235,332,348 'base':399 'basic':253 'basket':356 'believ':321 'biiit':140 'buster':388 'card':82,116,155,171,200,237,316,335 'chanc':186 'cheap':240 'clock':367 'command':397 'comput':218,281,434 'configur':92 'content':101 'copi':73 'cost':163 'd':167,205,223 'devic':276,286 'die':202 'dietpi':395,435 'differ':46,52,380 'difficult':142 'disabl':363 'done':87 'download':94,289 'drive':268 'duplic':312 'egg':353 'either':228 'etchdroid':151 'even':277 'everyth':61 'exampl':181 'extern':266 'find':386 'fleet':184 'follow':33 'forget':361 'get':37,192,303 'go':415 'golden':91 'good':293 'gui':446 'guid':13,35 'hard':267 'headless':419 'heavi':257 'high':188,232 'howev':26 'imag':53,78,131,156 'imper':328 'initi':56 'issu':25 'keep':70,224 'kept':263 'less':406 'librari':280 'lifespan':117,339 'like':394,422 'limit':107 'line':398 'log':123,258,364 'luck':209 'main':344 'major':24 'make':133,310 'materi':158 'mayb':278 'might':385 'mirror':77 'most':60,119 'need':51,244,410 'nice':298,373 'one':355 'oper':250,381 'option':294,441 'os':400 'otherwis':185 'outsid':112 'overhead':391 'permiss':283 'phone':148,178 'pi':42,110,153,214,413,430 'pi3b':17 'pi4':6,135 'plug':175 'port':179 'possibl':272,323 'put':350 'rare':243 're':85,427 'reader':172 'real':106 'realli':297 'regard':58 'regardless':210 'regular':433 'result':10 'said':424 'sd':81,115,154,170,199,236,315,334 'server':138,305,345,420 'set':39,95,194 'setup':57,76,307 'sinc':333,442 'slight':405 'solv':118 'someth':393 'sonarr/radarr':97 'spacecowboy':124 'spare':72 'start':368 'storag':260 'straightforward':407 'suggest':233 'system':251,382 'take':359 'temporari':288 'test':378 'though':68 'tick':369 'ubuntu':59 'usag':254 'usb':285 'use':4,15,160,340,428 'viabl':440 'want':168 'way':227,229 'well':402 'without':22 'won':436 'would':290 'write':129 'year':21 'yes':1"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://kbin.social/m/piracy@lemmy.dbzer0.com/t/525384/-/comment/2863798"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696898485 {#6012
    date: 2023-10-10 02:41:25.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
80 DENIED moderate
App\Entity\EntryComment {#6008
  +user: Proxies\__CG__\App\Entity\User {#6004 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5921
    +user: Proxies\__CG__\App\Entity\User {#5918 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5675
      +user: App\Entity\User {#5308 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: null
      +root: null
      +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1698028928 {#5659
        date: 2023-10-23 04:42:08.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5676 …}
      +nested: Doctrine\ORM\PersistentCollection {#5678 …}
      +votes: Doctrine\ORM\PersistentCollection {#5680 …}
      +reports: Doctrine\ORM\PersistentCollection {#5682 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
      -id: 47011
      -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://sh.itjust.works/comment/4221044"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696869014 {#5658
        date: 2023-10-09 18:30:14.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5675}
    +body: "I’d like to know this too. I planned to use my laptop as the server , but I have a spare rpi4 that I would prefer."
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1696869582 {#5922
      date: 2023-10-09 18:39:42.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@spacecowboy@sh.itjust.works"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5915 …}
    +nested: Doctrine\ORM\PersistentCollection {#5913 …}
    +votes: Doctrine\ORM\PersistentCollection {#5917 …}
    +reports: Doctrine\ORM\PersistentCollection {#5928 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5930 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5932 …}
    -id: 47012
    -bodyTs: "'d':2 'know':5 'laptop':13 'like':3 'plan':9 'prefer':26 'rpi4':22 'server':16 'spare':21 'use':11 'would':25"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://lemmy.ca/comment/3839724"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696869582 {#5925
      date: 2023-10-09 18:39:42.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5675}
  +body: """
    Yes, you can use a Pi4 to accomplish the results of this guide, I used a Pi3B+ for a few years without any major issues. However, you will not be able to follow this guide to get it set up, as Pi's are a different architecture and so you need different images for the initial setup regarding Ubuntu. Mostly everything after that will be the same though.\n
    \n
    Just keep some spare copies of your setup mirror imaged to another SD card once you're all done and you are golden. Configure your download settings in Sonarr/Radarr to avoid 4k content, that's the only real limitation of the Pi's, outside of the SD card lifespan (solved mostly by just not logging).\n
    \n
    @spacecowboy - not being able to write an image will make the Pi4 as a server a biiit more difficult. Do you have an android phone? There's etchdroid or Pi SD Card imager, which materials to use for can cost under $10 (you'd want the SD card reader that can plug into your phones port, for example). It's fleeting otherwise, chances are high that you will get it set up and then the SD card will die and you'd be out of luck regardless.. If the Pi is your only computer for now, then I'd keep it that way. Either way, I do highly suggest some backup SD cards, they are cheap and you rarely need more than 32gb for the operating system and basic usage - anything with heavy logging or storage should be kept on an external hard drive.\n
    \n
    While it's possible with an android device, even maybe a library computer with permission for USB devices and temporary downloads would be a good option. It's really nice to be able to get your server all setup and then make a duplicate of the SD card, which I don't believe is possible on android. It's imperative to have a backup since SD cards do have a lifespan, using it as a main server with no backups is putting all your eggs in one basket. All it takes is forgetting to disable logging and the clock starts ticking.\n
    \n
    It's also nice to be able to test out different operating systems, as you might find that Buster has more overhead than something like DietPi, a command line based OS, as well as being slightly less straightforward for your needs if the Pi is going to be a headless server. But like I said, if you're using the Pi as a regular computer, DietPi won't be a viable option since it has no GUI.
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1696898485 {#6009
    date: 2023-10-10 02:41:25.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@spacecowboy@sh.itjust.works"
    "@spacecowboy"
    "@FunderPants@lemmy.ca"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6000 …}
  +nested: Doctrine\ORM\PersistentCollection {#5998 …}
  +votes: Doctrine\ORM\PersistentCollection {#6002 …}
  +reports: Doctrine\ORM\PersistentCollection {#6014 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6016 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6018 …}
  -id: 47013
  -bodyTs: "'..':211 '10':165 '32gb':247 '4k':100 'abl':31,127,301,376 'accomplish':8 'also':372 'android':147,275,325 'anoth':80 'anyth':255 'architectur':47 'avoid':99 'backup':235,332,348 'base':399 'basic':253 'basket':356 'believ':321 'biiit':140 'buster':388 'card':82,116,155,171,200,237,316,335 'chanc':186 'cheap':240 'clock':367 'command':397 'comput':218,281,434 'configur':92 'content':101 'copi':73 'cost':163 'd':167,205,223 'devic':276,286 'die':202 'dietpi':395,435 'differ':46,52,380 'difficult':142 'disabl':363 'done':87 'download':94,289 'drive':268 'duplic':312 'egg':353 'either':228 'etchdroid':151 'even':277 'everyth':61 'exampl':181 'extern':266 'find':386 'fleet':184 'follow':33 'forget':361 'get':37,192,303 'go':415 'golden':91 'good':293 'gui':446 'guid':13,35 'hard':267 'headless':419 'heavi':257 'high':188,232 'howev':26 'imag':53,78,131,156 'imper':328 'initi':56 'issu':25 'keep':70,224 'kept':263 'less':406 'librari':280 'lifespan':117,339 'like':394,422 'limit':107 'line':398 'log':123,258,364 'luck':209 'main':344 'major':24 'make':133,310 'materi':158 'mayb':278 'might':385 'mirror':77 'most':60,119 'need':51,244,410 'nice':298,373 'one':355 'oper':250,381 'option':294,441 'os':400 'otherwis':185 'outsid':112 'overhead':391 'permiss':283 'phone':148,178 'pi':42,110,153,214,413,430 'pi3b':17 'pi4':6,135 'plug':175 'port':179 'possibl':272,323 'put':350 'rare':243 're':85,427 'reader':172 'real':106 'realli':297 'regard':58 'regardless':210 'regular':433 'result':10 'said':424 'sd':81,115,154,170,199,236,315,334 'server':138,305,345,420 'set':39,95,194 'setup':57,76,307 'sinc':333,442 'slight':405 'solv':118 'someth':393 'sonarr/radarr':97 'spacecowboy':124 'spare':72 'start':368 'storag':260 'straightforward':407 'suggest':233 'system':251,382 'take':359 'temporari':288 'test':378 'though':68 'tick':369 'ubuntu':59 'usag':254 'usb':285 'use':4,15,160,340,428 'viabl':440 'want':168 'way':227,229 'well':402 'without':22 'won':436 'would':290 'write':129 'year':21 'yes':1"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://kbin.social/m/piracy@lemmy.dbzer0.com/t/525384/-/comment/2863798"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696898485 {#6012
    date: 2023-10-10 02:41:25.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
81 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
82 DENIED moderate
App\Entity\EntryComment {#6071
  +user: App\Entity\User {#5308 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#6008
    +user: Proxies\__CG__\App\Entity\User {#6004 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5921
      +user: Proxies\__CG__\App\Entity\User {#5918 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: App\Entity\EntryComment {#5675
        +user: App\Entity\User {#5308 …}
        +entry: App\Entity\Entry {#2419}
        +magazine: App\Entity\Magazine {#265}
        +image: null
        +parent: null
        +root: null
        +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
        +lang: "en"
        +isAdult: false
        +favouriteCount: 0
        +score: 0
        +lastActive: DateTime @1698028928 {#5659
          date: 2023-10-23 04:42:08.0 +02:00
        }
        +ip: null
        +tags: null
        +mentions: [
          "@db0@lemmy.dbzer0.com"
        ]
        +children: Doctrine\ORM\PersistentCollection {#5676 …}
        +nested: Doctrine\ORM\PersistentCollection {#5678 …}
        +votes: Doctrine\ORM\PersistentCollection {#5680 …}
        +reports: Doctrine\ORM\PersistentCollection {#5682 …}
        +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
        +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
        -id: 47011
        -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
        +ranking: 0
        +commentCount: 0
        +upVotes: 0
        +downVotes: 0
        +visibility: "visible             "
        +apId: "https://sh.itjust.works/comment/4221044"
        +editedAt: null
        +createdAt: DateTimeImmutable @1696869014 {#5658
          date: 2023-10-09 18:30:14.0 +02:00
        }
      }
      +root: App\Entity\EntryComment {#5675}
      +body: "I’d like to know this too. I planned to use my laptop as the server , but I have a spare rpi4 that I would prefer."
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1696869582 {#5922
        date: 2023-10-09 18:39:42.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
        "@spacecowboy@sh.itjust.works"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5915 …}
      +nested: Doctrine\ORM\PersistentCollection {#5913 …}
      +votes: Doctrine\ORM\PersistentCollection {#5917 …}
      +reports: Doctrine\ORM\PersistentCollection {#5928 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5930 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5932 …}
      -id: 47012
      -bodyTs: "'d':2 'know':5 'laptop':13 'like':3 'plan':9 'prefer':26 'rpi4':22 'server':16 'spare':21 'use':11 'would':25"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://lemmy.ca/comment/3839724"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696869582 {#5925
        date: 2023-10-09 18:39:42.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5675}
    +body: """
      Yes, you can use a Pi4 to accomplish the results of this guide, I used a Pi3B+ for a few years without any major issues. However, you will not be able to follow this guide to get it set up, as Pi's are a different architecture and so you need different images for the initial setup regarding Ubuntu. Mostly everything after that will be the same though.\n
      \n
      Just keep some spare copies of your setup mirror imaged to another SD card once you're all done and you are golden. Configure your download settings in Sonarr/Radarr to avoid 4k content, that's the only real limitation of the Pi's, outside of the SD card lifespan (solved mostly by just not logging).\n
      \n
      @spacecowboy - not being able to write an image will make the Pi4 as a server a biiit more difficult. Do you have an android phone? There's etchdroid or Pi SD Card imager, which materials to use for can cost under $10 (you'd want the SD card reader that can plug into your phones port, for example). It's fleeting otherwise, chances are high that you will get it set up and then the SD card will die and you'd be out of luck regardless.. If the Pi is your only computer for now, then I'd keep it that way. Either way, I do highly suggest some backup SD cards, they are cheap and you rarely need more than 32gb for the operating system and basic usage - anything with heavy logging or storage should be kept on an external hard drive.\n
      \n
      While it's possible with an android device, even maybe a library computer with permission for USB devices and temporary downloads would be a good option. It's really nice to be able to get your server all setup and then make a duplicate of the SD card, which I don't believe is possible on android. It's imperative to have a backup since SD cards do have a lifespan, using it as a main server with no backups is putting all your eggs in one basket. All it takes is forgetting to disable logging and the clock starts ticking.\n
      \n
      It's also nice to be able to test out different operating systems, as you might find that Buster has more overhead than something like DietPi, a command line based OS, as well as being slightly less straightforward for your needs if the Pi is going to be a headless server. But like I said, if you're using the Pi as a regular computer, DietPi won't be a viable option since it has no GUI.
      """
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1696898485 {#6009
      date: 2023-10-10 02:41:25.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@spacecowboy@sh.itjust.works"
      "@spacecowboy"
      "@FunderPants@lemmy.ca"
    ]
    +children: Doctrine\ORM\PersistentCollection {#6000 …}
    +nested: Doctrine\ORM\PersistentCollection {#5998 …}
    +votes: Doctrine\ORM\PersistentCollection {#6002 …}
    +reports: Doctrine\ORM\PersistentCollection {#6014 …}
    +favourites: Doctrine\ORM\PersistentCollection {#6016 …}
    +notifications: Doctrine\ORM\PersistentCollection {#6018 …}
    -id: 47013
    -bodyTs: "'..':211 '10':165 '32gb':247 '4k':100 'abl':31,127,301,376 'accomplish':8 'also':372 'android':147,275,325 'anoth':80 'anyth':255 'architectur':47 'avoid':99 'backup':235,332,348 'base':399 'basic':253 'basket':356 'believ':321 'biiit':140 'buster':388 'card':82,116,155,171,200,237,316,335 'chanc':186 'cheap':240 'clock':367 'command':397 'comput':218,281,434 'configur':92 'content':101 'copi':73 'cost':163 'd':167,205,223 'devic':276,286 'die':202 'dietpi':395,435 'differ':46,52,380 'difficult':142 'disabl':363 'done':87 'download':94,289 'drive':268 'duplic':312 'egg':353 'either':228 'etchdroid':151 'even':277 'everyth':61 'exampl':181 'extern':266 'find':386 'fleet':184 'follow':33 'forget':361 'get':37,192,303 'go':415 'golden':91 'good':293 'gui':446 'guid':13,35 'hard':267 'headless':419 'heavi':257 'high':188,232 'howev':26 'imag':53,78,131,156 'imper':328 'initi':56 'issu':25 'keep':70,224 'kept':263 'less':406 'librari':280 'lifespan':117,339 'like':394,422 'limit':107 'line':398 'log':123,258,364 'luck':209 'main':344 'major':24 'make':133,310 'materi':158 'mayb':278 'might':385 'mirror':77 'most':60,119 'need':51,244,410 'nice':298,373 'one':355 'oper':250,381 'option':294,441 'os':400 'otherwis':185 'outsid':112 'overhead':391 'permiss':283 'phone':148,178 'pi':42,110,153,214,413,430 'pi3b':17 'pi4':6,135 'plug':175 'port':179 'possibl':272,323 'put':350 'rare':243 're':85,427 'reader':172 'real':106 'realli':297 'regard':58 'regardless':210 'regular':433 'result':10 'said':424 'sd':81,115,154,170,199,236,315,334 'server':138,305,345,420 'set':39,95,194 'setup':57,76,307 'sinc':333,442 'slight':405 'solv':118 'someth':393 'sonarr/radarr':97 'spacecowboy':124 'spare':72 'start':368 'storag':260 'straightforward':407 'suggest':233 'system':251,382 'take':359 'temporari':288 'test':378 'though':68 'tick':369 'ubuntu':59 'usag':254 'usb':285 'use':4,15,160,340,428 'viabl':440 'want':168 'way':227,229 'well':402 'without':22 'won':436 'would':290 'write':129 'year':21 'yes':1"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://kbin.social/m/piracy@lemmy.dbzer0.com/t/525384/-/comment/2863798"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696898485 {#6012
      date: 2023-10-10 02:41:25.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5675}
  +body: """
    Thank you for this detailed response. I was able to buy a USB-stick-style SD/mSD reader/writer and a couple of 128gb cards to go with it. I have ubuntu up and running now and a backup as well. I tried following this guide but I keep running into issues around the docker compose part. I think I am in over my head at this point and will just make a local setup the way I know how and try again in the future.\n
    \n
    Thanks for the tips about saving my bacon with multiple SD cards.
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1697233896 {#6070
    date: 2023-10-13 23:51:36.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@spacecowboy@sh.itjust.works"
    "@spacecowboy"
    "@FunderPants@lemmy.ca"
    "@wolfshadowheart@kbin.social"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6074 …}
  +nested: Doctrine\ORM\PersistentCollection {#6079 …}
  +votes: Doctrine\ORM\PersistentCollection {#6075 …}
  +reports: Doctrine\ORM\PersistentCollection {#6081 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6083 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6085 …}
  -id: 47014
  -bodyTs: "'128gb':23 'abl':9 'around':52 'backup':38 'bacon':93 'buy':11 'card':24,97 'compos':55 'coupl':21 'detail':5 'docker':54 'follow':43 'futur':85 'go':26 'guid':45 'head':64 'issu':51 'keep':48 'know':78 'local':73 'make':71 'multipl':95 'part':56 'point':67 'reader/writer':18 'respons':6 'run':34,49 'save':91 'sd':96 'sd/msd':17 'setup':74 'stick':15 'style':16 'thank':1,86 'think':58 'tip':89 'tri':42,81 'ubuntu':31 'usb':14 'usb-stick-styl':13 'way':76 'well':40"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4404630"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697233896 {#6067
    date: 2023-10-13 23:51:36.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
83 DENIED edit
App\Entity\EntryComment {#6071
  +user: App\Entity\User {#5308 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#6008
    +user: Proxies\__CG__\App\Entity\User {#6004 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5921
      +user: Proxies\__CG__\App\Entity\User {#5918 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: App\Entity\EntryComment {#5675
        +user: App\Entity\User {#5308 …}
        +entry: App\Entity\Entry {#2419}
        +magazine: App\Entity\Magazine {#265}
        +image: null
        +parent: null
        +root: null
        +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
        +lang: "en"
        +isAdult: false
        +favouriteCount: 0
        +score: 0
        +lastActive: DateTime @1698028928 {#5659
          date: 2023-10-23 04:42:08.0 +02:00
        }
        +ip: null
        +tags: null
        +mentions: [
          "@db0@lemmy.dbzer0.com"
        ]
        +children: Doctrine\ORM\PersistentCollection {#5676 …}
        +nested: Doctrine\ORM\PersistentCollection {#5678 …}
        +votes: Doctrine\ORM\PersistentCollection {#5680 …}
        +reports: Doctrine\ORM\PersistentCollection {#5682 …}
        +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
        +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
        -id: 47011
        -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
        +ranking: 0
        +commentCount: 0
        +upVotes: 0
        +downVotes: 0
        +visibility: "visible             "
        +apId: "https://sh.itjust.works/comment/4221044"
        +editedAt: null
        +createdAt: DateTimeImmutable @1696869014 {#5658
          date: 2023-10-09 18:30:14.0 +02:00
        }
      }
      +root: App\Entity\EntryComment {#5675}
      +body: "I’d like to know this too. I planned to use my laptop as the server , but I have a spare rpi4 that I would prefer."
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1696869582 {#5922
        date: 2023-10-09 18:39:42.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
        "@spacecowboy@sh.itjust.works"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5915 …}
      +nested: Doctrine\ORM\PersistentCollection {#5913 …}
      +votes: Doctrine\ORM\PersistentCollection {#5917 …}
      +reports: Doctrine\ORM\PersistentCollection {#5928 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5930 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5932 …}
      -id: 47012
      -bodyTs: "'d':2 'know':5 'laptop':13 'like':3 'plan':9 'prefer':26 'rpi4':22 'server':16 'spare':21 'use':11 'would':25"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://lemmy.ca/comment/3839724"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696869582 {#5925
        date: 2023-10-09 18:39:42.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5675}
    +body: """
      Yes, you can use a Pi4 to accomplish the results of this guide, I used a Pi3B+ for a few years without any major issues. However, you will not be able to follow this guide to get it set up, as Pi's are a different architecture and so you need different images for the initial setup regarding Ubuntu. Mostly everything after that will be the same though.\n
      \n
      Just keep some spare copies of your setup mirror imaged to another SD card once you're all done and you are golden. Configure your download settings in Sonarr/Radarr to avoid 4k content, that's the only real limitation of the Pi's, outside of the SD card lifespan (solved mostly by just not logging).\n
      \n
      @spacecowboy - not being able to write an image will make the Pi4 as a server a biiit more difficult. Do you have an android phone? There's etchdroid or Pi SD Card imager, which materials to use for can cost under $10 (you'd want the SD card reader that can plug into your phones port, for example). It's fleeting otherwise, chances are high that you will get it set up and then the SD card will die and you'd be out of luck regardless.. If the Pi is your only computer for now, then I'd keep it that way. Either way, I do highly suggest some backup SD cards, they are cheap and you rarely need more than 32gb for the operating system and basic usage - anything with heavy logging or storage should be kept on an external hard drive.\n
      \n
      While it's possible with an android device, even maybe a library computer with permission for USB devices and temporary downloads would be a good option. It's really nice to be able to get your server all setup and then make a duplicate of the SD card, which I don't believe is possible on android. It's imperative to have a backup since SD cards do have a lifespan, using it as a main server with no backups is putting all your eggs in one basket. All it takes is forgetting to disable logging and the clock starts ticking.\n
      \n
      It's also nice to be able to test out different operating systems, as you might find that Buster has more overhead than something like DietPi, a command line based OS, as well as being slightly less straightforward for your needs if the Pi is going to be a headless server. But like I said, if you're using the Pi as a regular computer, DietPi won't be a viable option since it has no GUI.
      """
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1696898485 {#6009
      date: 2023-10-10 02:41:25.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@spacecowboy@sh.itjust.works"
      "@spacecowboy"
      "@FunderPants@lemmy.ca"
    ]
    +children: Doctrine\ORM\PersistentCollection {#6000 …}
    +nested: Doctrine\ORM\PersistentCollection {#5998 …}
    +votes: Doctrine\ORM\PersistentCollection {#6002 …}
    +reports: Doctrine\ORM\PersistentCollection {#6014 …}
    +favourites: Doctrine\ORM\PersistentCollection {#6016 …}
    +notifications: Doctrine\ORM\PersistentCollection {#6018 …}
    -id: 47013
    -bodyTs: "'..':211 '10':165 '32gb':247 '4k':100 'abl':31,127,301,376 'accomplish':8 'also':372 'android':147,275,325 'anoth':80 'anyth':255 'architectur':47 'avoid':99 'backup':235,332,348 'base':399 'basic':253 'basket':356 'believ':321 'biiit':140 'buster':388 'card':82,116,155,171,200,237,316,335 'chanc':186 'cheap':240 'clock':367 'command':397 'comput':218,281,434 'configur':92 'content':101 'copi':73 'cost':163 'd':167,205,223 'devic':276,286 'die':202 'dietpi':395,435 'differ':46,52,380 'difficult':142 'disabl':363 'done':87 'download':94,289 'drive':268 'duplic':312 'egg':353 'either':228 'etchdroid':151 'even':277 'everyth':61 'exampl':181 'extern':266 'find':386 'fleet':184 'follow':33 'forget':361 'get':37,192,303 'go':415 'golden':91 'good':293 'gui':446 'guid':13,35 'hard':267 'headless':419 'heavi':257 'high':188,232 'howev':26 'imag':53,78,131,156 'imper':328 'initi':56 'issu':25 'keep':70,224 'kept':263 'less':406 'librari':280 'lifespan':117,339 'like':394,422 'limit':107 'line':398 'log':123,258,364 'luck':209 'main':344 'major':24 'make':133,310 'materi':158 'mayb':278 'might':385 'mirror':77 'most':60,119 'need':51,244,410 'nice':298,373 'one':355 'oper':250,381 'option':294,441 'os':400 'otherwis':185 'outsid':112 'overhead':391 'permiss':283 'phone':148,178 'pi':42,110,153,214,413,430 'pi3b':17 'pi4':6,135 'plug':175 'port':179 'possibl':272,323 'put':350 'rare':243 're':85,427 'reader':172 'real':106 'realli':297 'regard':58 'regardless':210 'regular':433 'result':10 'said':424 'sd':81,115,154,170,199,236,315,334 'server':138,305,345,420 'set':39,95,194 'setup':57,76,307 'sinc':333,442 'slight':405 'solv':118 'someth':393 'sonarr/radarr':97 'spacecowboy':124 'spare':72 'start':368 'storag':260 'straightforward':407 'suggest':233 'system':251,382 'take':359 'temporari':288 'test':378 'though':68 'tick':369 'ubuntu':59 'usag':254 'usb':285 'use':4,15,160,340,428 'viabl':440 'want':168 'way':227,229 'well':402 'without':22 'won':436 'would':290 'write':129 'year':21 'yes':1"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://kbin.social/m/piracy@lemmy.dbzer0.com/t/525384/-/comment/2863798"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696898485 {#6012
      date: 2023-10-10 02:41:25.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5675}
  +body: """
    Thank you for this detailed response. I was able to buy a USB-stick-style SD/mSD reader/writer and a couple of 128gb cards to go with it. I have ubuntu up and running now and a backup as well. I tried following this guide but I keep running into issues around the docker compose part. I think I am in over my head at this point and will just make a local setup the way I know how and try again in the future.\n
    \n
    Thanks for the tips about saving my bacon with multiple SD cards.
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1697233896 {#6070
    date: 2023-10-13 23:51:36.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@spacecowboy@sh.itjust.works"
    "@spacecowboy"
    "@FunderPants@lemmy.ca"
    "@wolfshadowheart@kbin.social"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6074 …}
  +nested: Doctrine\ORM\PersistentCollection {#6079 …}
  +votes: Doctrine\ORM\PersistentCollection {#6075 …}
  +reports: Doctrine\ORM\PersistentCollection {#6081 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6083 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6085 …}
  -id: 47014
  -bodyTs: "'128gb':23 'abl':9 'around':52 'backup':38 'bacon':93 'buy':11 'card':24,97 'compos':55 'coupl':21 'detail':5 'docker':54 'follow':43 'futur':85 'go':26 'guid':45 'head':64 'issu':51 'keep':48 'know':78 'local':73 'make':71 'multipl':95 'part':56 'point':67 'reader/writer':18 'respons':6 'run':34,49 'save':91 'sd':96 'sd/msd':17 'setup':74 'stick':15 'style':16 'thank':1,86 'think':58 'tip':89 'tri':42,81 'ubuntu':31 'usb':14 'usb-stick-styl':13 'way':76 'well':40"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4404630"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697233896 {#6067
    date: 2023-10-13 23:51:36.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
84 DENIED moderate
App\Entity\EntryComment {#6071
  +user: App\Entity\User {#5308 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#6008
    +user: Proxies\__CG__\App\Entity\User {#6004 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5921
      +user: Proxies\__CG__\App\Entity\User {#5918 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: App\Entity\EntryComment {#5675
        +user: App\Entity\User {#5308 …}
        +entry: App\Entity\Entry {#2419}
        +magazine: App\Entity\Magazine {#265}
        +image: null
        +parent: null
        +root: null
        +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
        +lang: "en"
        +isAdult: false
        +favouriteCount: 0
        +score: 0
        +lastActive: DateTime @1698028928 {#5659
          date: 2023-10-23 04:42:08.0 +02:00
        }
        +ip: null
        +tags: null
        +mentions: [
          "@db0@lemmy.dbzer0.com"
        ]
        +children: Doctrine\ORM\PersistentCollection {#5676 …}
        +nested: Doctrine\ORM\PersistentCollection {#5678 …}
        +votes: Doctrine\ORM\PersistentCollection {#5680 …}
        +reports: Doctrine\ORM\PersistentCollection {#5682 …}
        +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
        +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
        -id: 47011
        -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
        +ranking: 0
        +commentCount: 0
        +upVotes: 0
        +downVotes: 0
        +visibility: "visible             "
        +apId: "https://sh.itjust.works/comment/4221044"
        +editedAt: null
        +createdAt: DateTimeImmutable @1696869014 {#5658
          date: 2023-10-09 18:30:14.0 +02:00
        }
      }
      +root: App\Entity\EntryComment {#5675}
      +body: "I’d like to know this too. I planned to use my laptop as the server , but I have a spare rpi4 that I would prefer."
      +lang: "en"
      +isAdult: false
      +favouriteCount: 0
      +score: 0
      +lastActive: DateTime @1696869582 {#5922
        date: 2023-10-09 18:39:42.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
        "@spacecowboy@sh.itjust.works"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5915 …}
      +nested: Doctrine\ORM\PersistentCollection {#5913 …}
      +votes: Doctrine\ORM\PersistentCollection {#5917 …}
      +reports: Doctrine\ORM\PersistentCollection {#5928 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5930 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5932 …}
      -id: 47012
      -bodyTs: "'d':2 'know':5 'laptop':13 'like':3 'plan':9 'prefer':26 'rpi4':22 'server':16 'spare':21 'use':11 'would':25"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://lemmy.ca/comment/3839724"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696869582 {#5925
        date: 2023-10-09 18:39:42.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5675}
    +body: """
      Yes, you can use a Pi4 to accomplish the results of this guide, I used a Pi3B+ for a few years without any major issues. However, you will not be able to follow this guide to get it set up, as Pi's are a different architecture and so you need different images for the initial setup regarding Ubuntu. Mostly everything after that will be the same though.\n
      \n
      Just keep some spare copies of your setup mirror imaged to another SD card once you're all done and you are golden. Configure your download settings in Sonarr/Radarr to avoid 4k content, that's the only real limitation of the Pi's, outside of the SD card lifespan (solved mostly by just not logging).\n
      \n
      @spacecowboy - not being able to write an image will make the Pi4 as a server a biiit more difficult. Do you have an android phone? There's etchdroid or Pi SD Card imager, which materials to use for can cost under $10 (you'd want the SD card reader that can plug into your phones port, for example). It's fleeting otherwise, chances are high that you will get it set up and then the SD card will die and you'd be out of luck regardless.. If the Pi is your only computer for now, then I'd keep it that way. Either way, I do highly suggest some backup SD cards, they are cheap and you rarely need more than 32gb for the operating system and basic usage - anything with heavy logging or storage should be kept on an external hard drive.\n
      \n
      While it's possible with an android device, even maybe a library computer with permission for USB devices and temporary downloads would be a good option. It's really nice to be able to get your server all setup and then make a duplicate of the SD card, which I don't believe is possible on android. It's imperative to have a backup since SD cards do have a lifespan, using it as a main server with no backups is putting all your eggs in one basket. All it takes is forgetting to disable logging and the clock starts ticking.\n
      \n
      It's also nice to be able to test out different operating systems, as you might find that Buster has more overhead than something like DietPi, a command line based OS, as well as being slightly less straightforward for your needs if the Pi is going to be a headless server. But like I said, if you're using the Pi as a regular computer, DietPi won't be a viable option since it has no GUI.
      """
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1696898485 {#6009
      date: 2023-10-10 02:41:25.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@spacecowboy@sh.itjust.works"
      "@spacecowboy"
      "@FunderPants@lemmy.ca"
    ]
    +children: Doctrine\ORM\PersistentCollection {#6000 …}
    +nested: Doctrine\ORM\PersistentCollection {#5998 …}
    +votes: Doctrine\ORM\PersistentCollection {#6002 …}
    +reports: Doctrine\ORM\PersistentCollection {#6014 …}
    +favourites: Doctrine\ORM\PersistentCollection {#6016 …}
    +notifications: Doctrine\ORM\PersistentCollection {#6018 …}
    -id: 47013
    -bodyTs: "'..':211 '10':165 '32gb':247 '4k':100 'abl':31,127,301,376 'accomplish':8 'also':372 'android':147,275,325 'anoth':80 'anyth':255 'architectur':47 'avoid':99 'backup':235,332,348 'base':399 'basic':253 'basket':356 'believ':321 'biiit':140 'buster':388 'card':82,116,155,171,200,237,316,335 'chanc':186 'cheap':240 'clock':367 'command':397 'comput':218,281,434 'configur':92 'content':101 'copi':73 'cost':163 'd':167,205,223 'devic':276,286 'die':202 'dietpi':395,435 'differ':46,52,380 'difficult':142 'disabl':363 'done':87 'download':94,289 'drive':268 'duplic':312 'egg':353 'either':228 'etchdroid':151 'even':277 'everyth':61 'exampl':181 'extern':266 'find':386 'fleet':184 'follow':33 'forget':361 'get':37,192,303 'go':415 'golden':91 'good':293 'gui':446 'guid':13,35 'hard':267 'headless':419 'heavi':257 'high':188,232 'howev':26 'imag':53,78,131,156 'imper':328 'initi':56 'issu':25 'keep':70,224 'kept':263 'less':406 'librari':280 'lifespan':117,339 'like':394,422 'limit':107 'line':398 'log':123,258,364 'luck':209 'main':344 'major':24 'make':133,310 'materi':158 'mayb':278 'might':385 'mirror':77 'most':60,119 'need':51,244,410 'nice':298,373 'one':355 'oper':250,381 'option':294,441 'os':400 'otherwis':185 'outsid':112 'overhead':391 'permiss':283 'phone':148,178 'pi':42,110,153,214,413,430 'pi3b':17 'pi4':6,135 'plug':175 'port':179 'possibl':272,323 'put':350 'rare':243 're':85,427 'reader':172 'real':106 'realli':297 'regard':58 'regardless':210 'regular':433 'result':10 'said':424 'sd':81,115,154,170,199,236,315,334 'server':138,305,345,420 'set':39,95,194 'setup':57,76,307 'sinc':333,442 'slight':405 'solv':118 'someth':393 'sonarr/radarr':97 'spacecowboy':124 'spare':72 'start':368 'storag':260 'straightforward':407 'suggest':233 'system':251,382 'take':359 'temporari':288 'test':378 'though':68 'tick':369 'ubuntu':59 'usag':254 'usb':285 'use':4,15,160,340,428 'viabl':440 'want':168 'way':227,229 'well':402 'without':22 'won':436 'would':290 'write':129 'year':21 'yes':1"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://kbin.social/m/piracy@lemmy.dbzer0.com/t/525384/-/comment/2863798"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696898485 {#6012
      date: 2023-10-10 02:41:25.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5675}
  +body: """
    Thank you for this detailed response. I was able to buy a USB-stick-style SD/mSD reader/writer and a couple of 128gb cards to go with it. I have ubuntu up and running now and a backup as well. I tried following this guide but I keep running into issues around the docker compose part. I think I am in over my head at this point and will just make a local setup the way I know how and try again in the future.\n
    \n
    Thanks for the tips about saving my bacon with multiple SD cards.
    """
  +lang: "en"
  +isAdult: false
  +favouriteCount: 0
  +score: 0
  +lastActive: DateTime @1697233896 {#6070
    date: 2023-10-13 23:51:36.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@spacecowboy@sh.itjust.works"
    "@spacecowboy"
    "@FunderPants@lemmy.ca"
    "@wolfshadowheart@kbin.social"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6074 …}
  +nested: Doctrine\ORM\PersistentCollection {#6079 …}
  +votes: Doctrine\ORM\PersistentCollection {#6075 …}
  +reports: Doctrine\ORM\PersistentCollection {#6081 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6083 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6085 …}
  -id: 47014
  -bodyTs: "'128gb':23 'abl':9 'around':52 'backup':38 'bacon':93 'buy':11 'card':24,97 'compos':55 'coupl':21 'detail':5 'docker':54 'follow':43 'futur':85 'go':26 'guid':45 'head':64 'issu':51 'keep':48 'know':78 'local':73 'make':71 'multipl':95 'part':56 'point':67 'reader/writer':18 'respons':6 'run':34,49 'save':91 'sd':96 'sd/msd':17 'setup':74 'stick':15 'style':16 'thank':1,86 'think':58 'tip':89 'tri':42,81 'ubuntu':31 'usb':14 'usb-stick-styl':13 'way':76 'well':40"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4404630"
  +editedAt: null
  +createdAt: DateTimeImmutable @1697233896 {#6067
    date: 2023-10-13 23:51:36.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
85 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
86 DENIED moderate
App\Entity\EntryComment {#5936
  +user: Proxies\__CG__\App\Entity\User {#5937 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5675
    +user: App\Entity\User {#5308 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1698028928 {#5659
      date: 2023-10-23 04:42:08.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5676 …}
    +nested: Doctrine\ORM\PersistentCollection {#5678 …}
    +votes: Doctrine\ORM\PersistentCollection {#5680 …}
    +reports: Doctrine\ORM\PersistentCollection {#5682 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
    -id: 47011
    -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4221044"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696869014 {#5658
      date: 2023-10-09 18:30:14.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5675}
  +body: "I’m working on getting this up and running on my pi 4. If I’m successful, I will post a guide"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1698028923 {#5934
    date: 2023-10-23 04:42:03.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@spacecowboy@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5938 …}
  +nested: Doctrine\ORM\PersistentCollection {#5940 …}
  +votes: Doctrine\ORM\PersistentCollection {#5942 …}
  +reports: Doctrine\ORM\PersistentCollection {#5944 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5946 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5948 …}
  -id: 66416
  -bodyTs: "'4':13 'get':5 'guid':22 'm':2,16 'pi':12 'post':20 'run':9 'success':17 'work':3"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.world/comment/4745987"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698028923 {#5935
    date: 2023-10-23 04:42:03.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
87 DENIED edit
App\Entity\EntryComment {#5936
  +user: Proxies\__CG__\App\Entity\User {#5937 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5675
    +user: App\Entity\User {#5308 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1698028928 {#5659
      date: 2023-10-23 04:42:08.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5676 …}
    +nested: Doctrine\ORM\PersistentCollection {#5678 …}
    +votes: Doctrine\ORM\PersistentCollection {#5680 …}
    +reports: Doctrine\ORM\PersistentCollection {#5682 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
    -id: 47011
    -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4221044"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696869014 {#5658
      date: 2023-10-09 18:30:14.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5675}
  +body: "I’m working on getting this up and running on my pi 4. If I’m successful, I will post a guide"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1698028923 {#5934
    date: 2023-10-23 04:42:03.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@spacecowboy@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5938 …}
  +nested: Doctrine\ORM\PersistentCollection {#5940 …}
  +votes: Doctrine\ORM\PersistentCollection {#5942 …}
  +reports: Doctrine\ORM\PersistentCollection {#5944 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5946 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5948 …}
  -id: 66416
  -bodyTs: "'4':13 'get':5 'guid':22 'm':2,16 'pi':12 'post':20 'run':9 'success':17 'work':3"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.world/comment/4745987"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698028923 {#5935
    date: 2023-10-23 04:42:03.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
88 DENIED moderate
App\Entity\EntryComment {#5936
  +user: Proxies\__CG__\App\Entity\User {#5937 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5675
    +user: App\Entity\User {#5308 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: "Is it possible to do this all on Raspberry Pi OS? I purchased an 8GB RPi 4 and it came with Buster pre-installed. I don’t have any other computer. I have no way of writing Ubuntu onto a micro SD. :/"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 0
    +score: 0
    +lastActive: DateTime @1698028928 {#5659
      date: 2023-10-23 04:42:08.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5676 …}
    +nested: Doctrine\ORM\PersistentCollection {#5678 …}
    +votes: Doctrine\ORM\PersistentCollection {#5680 …}
    +reports: Doctrine\ORM\PersistentCollection {#5682 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5684 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5686 …}
    -id: 47011
    -bodyTs: "'4':17 '8gb':15 'buster':22 'came':20 'comput':32 'instal':25 'micro':42 'onto':40 'os':11 'pi':10 'possibl':3 'pre':24 'pre-instal':23 'purchas':13 'raspberri':9 'rpi':16 'sd':43 'ubuntu':39 'way':36 'write':38"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4221044"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696869014 {#5658
      date: 2023-10-09 18:30:14.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5675}
  +body: "I’m working on getting this up and running on my pi 4. If I’m successful, I will post a guide"
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1698028923 {#5934
    date: 2023-10-23 04:42:03.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@spacecowboy@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5938 …}
  +nested: Doctrine\ORM\PersistentCollection {#5940 …}
  +votes: Doctrine\ORM\PersistentCollection {#5942 …}
  +reports: Doctrine\ORM\PersistentCollection {#5944 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5946 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5948 …}
  -id: 66416
  -bodyTs: "'4':13 'get':5 'guid':22 'm':2,16 'pi':12 'post':20 'run':9 'success':17 'work':3"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.world/comment/4745987"
  +editedAt: null
  +createdAt: DateTimeImmutable @1698028923 {#5935
    date: 2023-10-23 04:42:03.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
89 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
90 DENIED moderate
App\Entity\EntryComment {#5690
  +user: App\Entity\User {#5703 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "I find Organizrr to be much more comprehensive dashboard. And Lol at running plex just to use overseerr but still streaming with Jelly 😂 just use Jellyseerr, delete plex/over, and save a TON of system resources."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696868139 {#5674
    date: 2023-10-09 18:15:39.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5691 …}
  +nested: Doctrine\ORM\PersistentCollection {#5693 …}
  +votes: Doctrine\ORM\PersistentCollection {#5695 …}
  +reports: Doctrine\ORM\PersistentCollection {#5697 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5699 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5701 …}
  -id: 52957
  -bodyTs: "'comprehens':8 'dashboard':9 'delet':27 'find':2 'jelli':23 'jellyseerr':26 'lol':11 'much':6 'organizrr':3 'overseerr':18 'plex':14 'plex/over':28 'resourc':35 'run':13 'save':30 'still':20 'stream':21 'system':34 'ton':32 'use':17,25"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.dbzer0.com/comment/3953359"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696868139 {#5673
    date: 2023-10-09 18:15:39.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
91 DENIED edit
App\Entity\EntryComment {#5690
  +user: App\Entity\User {#5703 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "I find Organizrr to be much more comprehensive dashboard. And Lol at running plex just to use overseerr but still streaming with Jelly 😂 just use Jellyseerr, delete plex/over, and save a TON of system resources."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696868139 {#5674
    date: 2023-10-09 18:15:39.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5691 …}
  +nested: Doctrine\ORM\PersistentCollection {#5693 …}
  +votes: Doctrine\ORM\PersistentCollection {#5695 …}
  +reports: Doctrine\ORM\PersistentCollection {#5697 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5699 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5701 …}
  -id: 52957
  -bodyTs: "'comprehens':8 'dashboard':9 'delet':27 'find':2 'jelli':23 'jellyseerr':26 'lol':11 'much':6 'organizrr':3 'overseerr':18 'plex':14 'plex/over':28 'resourc':35 'run':13 'save':30 'still':20 'stream':21 'system':34 'ton':32 'use':17,25"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.dbzer0.com/comment/3953359"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696868139 {#5673
    date: 2023-10-09 18:15:39.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
92 DENIED moderate
App\Entity\EntryComment {#5690
  +user: App\Entity\User {#5703 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "I find Organizrr to be much more comprehensive dashboard. And Lol at running plex just to use overseerr but still streaming with Jelly 😂 just use Jellyseerr, delete plex/over, and save a TON of system resources."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696868139 {#5674
    date: 2023-10-09 18:15:39.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5691 …}
  +nested: Doctrine\ORM\PersistentCollection {#5693 …}
  +votes: Doctrine\ORM\PersistentCollection {#5695 …}
  +reports: Doctrine\ORM\PersistentCollection {#5697 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5699 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5701 …}
  -id: 52957
  -bodyTs: "'comprehens':8 'dashboard':9 'delet':27 'find':2 'jelli':23 'jellyseerr':26 'lol':11 'much':6 'organizrr':3 'overseerr':18 'plex':14 'plex/over':28 'resourc':35 'run':13 'save':30 'still':20 'stream':21 'system':34 'ton':32 'use':17,25"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemmy.dbzer0.com/comment/3953359"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696868139 {#5673
    date: 2023-10-09 18:15:39.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
93 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
94 DENIED moderate
App\Entity\EntryComment {#5764
  +user: App\Entity\User {#5777 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Awesome guide! I will say, Jackett isn’t maintained anymore so you should probably be recommending [Prowlarr](https://prowlarr.com/) instead."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1697480717 {#5759
    date: 2023-10-16 20:25:17.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5765 …}
  +nested: Doctrine\ORM\PersistentCollection {#5767 …}
  +votes: Doctrine\ORM\PersistentCollection {#5769 …}
  +reports: Doctrine\ORM\PersistentCollection {#5771 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5773 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5775 …}
  -id: 52954
  -bodyTs: "'/)':20 'anymor':10 'awesom':1 'guid':2 'instead':21 'isn':7 'jackett':6 'maintain':9 'probabl':14 'prowlarr':17 'prowlarr.com':19 'prowlarr.com/)':18 'recommend':16 'say':5"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://programming.dev/comment/3717870"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696864648 {#5760
    date: 2023-10-09 17:17:28.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
95 DENIED edit
App\Entity\EntryComment {#5764
  +user: App\Entity\User {#5777 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Awesome guide! I will say, Jackett isn’t maintained anymore so you should probably be recommending [Prowlarr](https://prowlarr.com/) instead."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1697480717 {#5759
    date: 2023-10-16 20:25:17.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5765 …}
  +nested: Doctrine\ORM\PersistentCollection {#5767 …}
  +votes: Doctrine\ORM\PersistentCollection {#5769 …}
  +reports: Doctrine\ORM\PersistentCollection {#5771 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5773 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5775 …}
  -id: 52954
  -bodyTs: "'/)':20 'anymor':10 'awesom':1 'guid':2 'instead':21 'isn':7 'jackett':6 'maintain':9 'probabl':14 'prowlarr':17 'prowlarr.com':19 'prowlarr.com/)':18 'recommend':16 'say':5"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://programming.dev/comment/3717870"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696864648 {#5760
    date: 2023-10-09 17:17:28.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
96 DENIED moderate
App\Entity\EntryComment {#5764
  +user: App\Entity\User {#5777 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "Awesome guide! I will say, Jackett isn’t maintained anymore so you should probably be recommending [Prowlarr](https://prowlarr.com/) instead."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1697480717 {#5759
    date: 2023-10-16 20:25:17.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5765 …}
  +nested: Doctrine\ORM\PersistentCollection {#5767 …}
  +votes: Doctrine\ORM\PersistentCollection {#5769 …}
  +reports: Doctrine\ORM\PersistentCollection {#5771 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5773 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5775 …}
  -id: 52954
  -bodyTs: "'/)':20 'anymor':10 'awesom':1 'guid':2 'instead':21 'isn':7 'jackett':6 'maintain':9 'probabl':14 'prowlarr':17 'prowlarr.com':19 'prowlarr.com/)':18 'recommend':16 'say':5"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://programming.dev/comment/3717870"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696864648 {#5760
    date: 2023-10-09 17:17:28.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
97 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
98 DENIED moderate
App\Entity\EntryComment {#5952
  +user: Proxies\__CG__\App\Entity\User {#5953 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5764
    +user: App\Entity\User {#5777 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: "Awesome guide! I will say, Jackett isn’t maintained anymore so you should probably be recommending [Prowlarr](https://prowlarr.com/) instead."
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1697480717 {#5759
      date: 2023-10-16 20:25:17.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5765 …}
    +nested: Doctrine\ORM\PersistentCollection {#5767 …}
    +votes: Doctrine\ORM\PersistentCollection {#5769 …}
    +reports: Doctrine\ORM\PersistentCollection {#5771 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5773 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5775 …}
    -id: 52954
    -bodyTs: "'/)':20 'anymor':10 'awesom':1 'guid':2 'instead':21 'isn':7 'jackett':6 'maintain':9 'probabl':14 'prowlarr':17 'prowlarr.com':19 'prowlarr.com/)':18 'recommend':16 'say':5"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://programming.dev/comment/3717870"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696864648 {#5760
      date: 2023-10-09 17:17:28.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5764}
  +body: "Jackett GitHub shows activity in the last day, so I’m not sure where you got the idea that it wasn’t maintained."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696872580 {#5950
    date: 2023-10-09 19:29:40.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Dhs92@programming.dev"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5954 …}
  +nested: Doctrine\ORM\PersistentCollection {#5956 …}
  +votes: Doctrine\ORM\PersistentCollection {#5958 …}
  +reports: Doctrine\ORM\PersistentCollection {#5960 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5962 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5964 …}
  -id: 52955
  -bodyTs: "'activ':4 'day':8 'github':2 'got':16 'idea':18 'jackett':1 'last':7 'm':11 'maintain':23 'show':3 'sure':13 'wasn':21"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4224530"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696872580 {#5951
    date: 2023-10-09 19:29:40.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
99 DENIED edit
App\Entity\EntryComment {#5952
  +user: Proxies\__CG__\App\Entity\User {#5953 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5764
    +user: App\Entity\User {#5777 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: "Awesome guide! I will say, Jackett isn’t maintained anymore so you should probably be recommending [Prowlarr](https://prowlarr.com/) instead."
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1697480717 {#5759
      date: 2023-10-16 20:25:17.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5765 …}
    +nested: Doctrine\ORM\PersistentCollection {#5767 …}
    +votes: Doctrine\ORM\PersistentCollection {#5769 …}
    +reports: Doctrine\ORM\PersistentCollection {#5771 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5773 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5775 …}
    -id: 52954
    -bodyTs: "'/)':20 'anymor':10 'awesom':1 'guid':2 'instead':21 'isn':7 'jackett':6 'maintain':9 'probabl':14 'prowlarr':17 'prowlarr.com':19 'prowlarr.com/)':18 'recommend':16 'say':5"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://programming.dev/comment/3717870"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696864648 {#5760
      date: 2023-10-09 17:17:28.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5764}
  +body: "Jackett GitHub shows activity in the last day, so I’m not sure where you got the idea that it wasn’t maintained."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696872580 {#5950
    date: 2023-10-09 19:29:40.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Dhs92@programming.dev"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5954 …}
  +nested: Doctrine\ORM\PersistentCollection {#5956 …}
  +votes: Doctrine\ORM\PersistentCollection {#5958 …}
  +reports: Doctrine\ORM\PersistentCollection {#5960 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5962 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5964 …}
  -id: 52955
  -bodyTs: "'activ':4 'day':8 'github':2 'got':16 'idea':18 'jackett':1 'last':7 'm':11 'maintain':23 'show':3 'sure':13 'wasn':21"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4224530"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696872580 {#5951
    date: 2023-10-09 19:29:40.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
100 DENIED moderate
App\Entity\EntryComment {#5952
  +user: Proxies\__CG__\App\Entity\User {#5953 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5764
    +user: App\Entity\User {#5777 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: null
    +root: null
    +body: "Awesome guide! I will say, Jackett isn’t maintained anymore so you should probably be recommending [Prowlarr](https://prowlarr.com/) instead."
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1697480717 {#5759
      date: 2023-10-16 20:25:17.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5765 …}
    +nested: Doctrine\ORM\PersistentCollection {#5767 …}
    +votes: Doctrine\ORM\PersistentCollection {#5769 …}
    +reports: Doctrine\ORM\PersistentCollection {#5771 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5773 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5775 …}
    -id: 52954
    -bodyTs: "'/)':20 'anymor':10 'awesom':1 'guid':2 'instead':21 'isn':7 'jackett':6 'maintain':9 'probabl':14 'prowlarr':17 'prowlarr.com':19 'prowlarr.com/)':18 'recommend':16 'say':5"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://programming.dev/comment/3717870"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696864648 {#5760
      date: 2023-10-09 17:17:28.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5764}
  +body: "Jackett GitHub shows activity in the last day, so I’m not sure where you got the idea that it wasn’t maintained."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696872580 {#5950
    date: 2023-10-09 19:29:40.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Dhs92@programming.dev"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5954 …}
  +nested: Doctrine\ORM\PersistentCollection {#5956 …}
  +votes: Doctrine\ORM\PersistentCollection {#5958 …}
  +reports: Doctrine\ORM\PersistentCollection {#5960 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5962 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5964 …}
  -id: 52955
  -bodyTs: "'activ':4 'day':8 'github':2 'got':16 'idea':18 'jackett':1 'last':7 'm':11 'maintain':23 'show':3 'sure':13 'wasn':21"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://sh.itjust.works/comment/4224530"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696872580 {#5951
    date: 2023-10-09 19:29:40.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
101 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
102 DENIED moderate
App\Entity\EntryComment {#6022
  +user: App\Entity\User {#5777 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5952
    +user: Proxies\__CG__\App\Entity\User {#5953 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5764
      +user: App\Entity\User {#5777 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: null
      +root: null
      +body: "Awesome guide! I will say, Jackett isn’t maintained anymore so you should probably be recommending [Prowlarr](https://prowlarr.com/) instead."
      +lang: "en"
      +isAdult: false
      +favouriteCount: 1
      +score: 0
      +lastActive: DateTime @1697480717 {#5759
        date: 2023-10-16 20:25:17.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5765 …}
      +nested: Doctrine\ORM\PersistentCollection {#5767 …}
      +votes: Doctrine\ORM\PersistentCollection {#5769 …}
      +reports: Doctrine\ORM\PersistentCollection {#5771 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5773 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5775 …}
      -id: 52954
      -bodyTs: "'/)':20 'anymor':10 'awesom':1 'guid':2 'instead':21 'isn':7 'jackett':6 'maintain':9 'probabl':14 'prowlarr':17 'prowlarr.com':19 'prowlarr.com/)':18 'recommend':16 'say':5"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://programming.dev/comment/3717870"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696864648 {#5760
        date: 2023-10-09 17:17:28.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5764}
    +body: "Jackett GitHub shows activity in the last day, so I’m not sure where you got the idea that it wasn’t maintained."
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1696872580 {#5950
      date: 2023-10-09 19:29:40.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@Dhs92@programming.dev"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5954 …}
    +nested: Doctrine\ORM\PersistentCollection {#5956 …}
    +votes: Doctrine\ORM\PersistentCollection {#5958 …}
    +reports: Doctrine\ORM\PersistentCollection {#5960 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5962 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5964 …}
    -id: 52955
    -bodyTs: "'activ':4 'day':8 'github':2 'got':16 'idea':18 'jackett':1 'last':7 'm':11 'maintain':23 'show':3 'sure':13 'wasn':21"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4224530"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696872580 {#5951
      date: 2023-10-09 19:29:40.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5764}
  +body: "Hm, maybe that was purely for TrueCharts. If so, that’s my bad. However, after moving to Prowlarr I’d say it is much nicer and tends to be more reliable for my use case."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696875328 {#6020
    date: 2023-10-09 20:15:28.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Dhs92@programming.dev"
    "@ElderWendigo@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6023 …}
  +nested: Doctrine\ORM\PersistentCollection {#6025 …}
  +votes: Doctrine\ORM\PersistentCollection {#6027 …}
  +reports: Doctrine\ORM\PersistentCollection {#6029 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6031 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6033 …}
  -id: 52956
  -bodyTs: "'bad':13 'case':35 'd':20 'hm':1 'howev':14 'mayb':2 'move':16 'much':24 'nicer':25 'prowlarr':18 'pure':5 'reliabl':31 'say':21 'tend':27 'truechart':7 'use':34"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://programming.dev/comment/3725893"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696875328 {#6021
    date: 2023-10-09 20:15:28.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
103 DENIED edit
App\Entity\EntryComment {#6022
  +user: App\Entity\User {#5777 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5952
    +user: Proxies\__CG__\App\Entity\User {#5953 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5764
      +user: App\Entity\User {#5777 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: null
      +root: null
      +body: "Awesome guide! I will say, Jackett isn’t maintained anymore so you should probably be recommending [Prowlarr](https://prowlarr.com/) instead."
      +lang: "en"
      +isAdult: false
      +favouriteCount: 1
      +score: 0
      +lastActive: DateTime @1697480717 {#5759
        date: 2023-10-16 20:25:17.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5765 …}
      +nested: Doctrine\ORM\PersistentCollection {#5767 …}
      +votes: Doctrine\ORM\PersistentCollection {#5769 …}
      +reports: Doctrine\ORM\PersistentCollection {#5771 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5773 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5775 …}
      -id: 52954
      -bodyTs: "'/)':20 'anymor':10 'awesom':1 'guid':2 'instead':21 'isn':7 'jackett':6 'maintain':9 'probabl':14 'prowlarr':17 'prowlarr.com':19 'prowlarr.com/)':18 'recommend':16 'say':5"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://programming.dev/comment/3717870"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696864648 {#5760
        date: 2023-10-09 17:17:28.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5764}
    +body: "Jackett GitHub shows activity in the last day, so I’m not sure where you got the idea that it wasn’t maintained."
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1696872580 {#5950
      date: 2023-10-09 19:29:40.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@Dhs92@programming.dev"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5954 …}
    +nested: Doctrine\ORM\PersistentCollection {#5956 …}
    +votes: Doctrine\ORM\PersistentCollection {#5958 …}
    +reports: Doctrine\ORM\PersistentCollection {#5960 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5962 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5964 …}
    -id: 52955
    -bodyTs: "'activ':4 'day':8 'github':2 'got':16 'idea':18 'jackett':1 'last':7 'm':11 'maintain':23 'show':3 'sure':13 'wasn':21"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4224530"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696872580 {#5951
      date: 2023-10-09 19:29:40.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5764}
  +body: "Hm, maybe that was purely for TrueCharts. If so, that’s my bad. However, after moving to Prowlarr I’d say it is much nicer and tends to be more reliable for my use case."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696875328 {#6020
    date: 2023-10-09 20:15:28.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Dhs92@programming.dev"
    "@ElderWendigo@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6023 …}
  +nested: Doctrine\ORM\PersistentCollection {#6025 …}
  +votes: Doctrine\ORM\PersistentCollection {#6027 …}
  +reports: Doctrine\ORM\PersistentCollection {#6029 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6031 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6033 …}
  -id: 52956
  -bodyTs: "'bad':13 'case':35 'd':20 'hm':1 'howev':14 'mayb':2 'move':16 'much':24 'nicer':25 'prowlarr':18 'pure':5 'reliabl':31 'say':21 'tend':27 'truechart':7 'use':34"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://programming.dev/comment/3725893"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696875328 {#6021
    date: 2023-10-09 20:15:28.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
104 DENIED moderate
App\Entity\EntryComment {#6022
  +user: App\Entity\User {#5777 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: App\Entity\EntryComment {#5952
    +user: Proxies\__CG__\App\Entity\User {#5953 …}
    +entry: App\Entity\Entry {#2419}
    +magazine: App\Entity\Magazine {#265}
    +image: null
    +parent: App\Entity\EntryComment {#5764
      +user: App\Entity\User {#5777 …}
      +entry: App\Entity\Entry {#2419}
      +magazine: App\Entity\Magazine {#265}
      +image: null
      +parent: null
      +root: null
      +body: "Awesome guide! I will say, Jackett isn’t maintained anymore so you should probably be recommending [Prowlarr](https://prowlarr.com/) instead."
      +lang: "en"
      +isAdult: false
      +favouriteCount: 1
      +score: 0
      +lastActive: DateTime @1697480717 {#5759
        date: 2023-10-16 20:25:17.0 +02:00
      }
      +ip: null
      +tags: null
      +mentions: [
        "@db0@lemmy.dbzer0.com"
      ]
      +children: Doctrine\ORM\PersistentCollection {#5765 …}
      +nested: Doctrine\ORM\PersistentCollection {#5767 …}
      +votes: Doctrine\ORM\PersistentCollection {#5769 …}
      +reports: Doctrine\ORM\PersistentCollection {#5771 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5773 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5775 …}
      -id: 52954
      -bodyTs: "'/)':20 'anymor':10 'awesom':1 'guid':2 'instead':21 'isn':7 'jackett':6 'maintain':9 'probabl':14 'prowlarr':17 'prowlarr.com':19 'prowlarr.com/)':18 'recommend':16 'say':5"
      +ranking: 0
      +commentCount: 0
      +upVotes: 0
      +downVotes: 0
      +visibility: "visible             "
      +apId: "https://programming.dev/comment/3717870"
      +editedAt: null
      +createdAt: DateTimeImmutable @1696864648 {#5760
        date: 2023-10-09 17:17:28.0 +02:00
      }
    }
    +root: App\Entity\EntryComment {#5764}
    +body: "Jackett GitHub shows activity in the last day, so I’m not sure where you got the idea that it wasn’t maintained."
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1696872580 {#5950
      date: 2023-10-09 19:29:40.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
      "@Dhs92@programming.dev"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5954 …}
    +nested: Doctrine\ORM\PersistentCollection {#5956 …}
    +votes: Doctrine\ORM\PersistentCollection {#5958 …}
    +reports: Doctrine\ORM\PersistentCollection {#5960 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5962 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5964 …}
    -id: 52955
    -bodyTs: "'activ':4 'day':8 'github':2 'got':16 'idea':18 'jackett':1 'last':7 'm':11 'maintain':23 'show':3 'sure':13 'wasn':21"
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://sh.itjust.works/comment/4224530"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696872580 {#5951
      date: 2023-10-09 19:29:40.0 +02:00
    }
  }
  +root: App\Entity\EntryComment {#5764}
  +body: "Hm, maybe that was purely for TrueCharts. If so, that’s my bad. However, after moving to Prowlarr I’d say it is much nicer and tends to be more reliable for my use case."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696875328 {#6020
    date: 2023-10-09 20:15:28.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
    "@Dhs92@programming.dev"
    "@ElderWendigo@sh.itjust.works"
  ]
  +children: Doctrine\ORM\PersistentCollection {#6023 …}
  +nested: Doctrine\ORM\PersistentCollection {#6025 …}
  +votes: Doctrine\ORM\PersistentCollection {#6027 …}
  +reports: Doctrine\ORM\PersistentCollection {#6029 …}
  +favourites: Doctrine\ORM\PersistentCollection {#6031 …}
  +notifications: Doctrine\ORM\PersistentCollection {#6033 …}
  -id: 52956
  -bodyTs: "'bad':13 'case':35 'd':20 'hm':1 'howev':14 'mayb':2 'move':16 'much':24 'nicer':25 'prowlarr':18 'pure':5 'reliabl':31 'say':21 'tend':27 'truechart':7 'use':34"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://programming.dev/comment/3725893"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696875328 {#6021
    date: 2023-10-09 20:15:28.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
105 DENIED ROLE_USER
null
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter"
ACCESS DENIED
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
106 DENIED moderate
App\Entity\EntryComment {#5837
  +user: App\Entity\User {#5850 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "everything goes somewhere, and i go everywhere."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696862521 {#5832
    date: 2023-10-09 16:42:01.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5838 …}
  +nested: Doctrine\ORM\PersistentCollection {#5840 …}
  +votes: Doctrine\ORM\PersistentCollection {#5842 …}
  +reports: Doctrine\ORM\PersistentCollection {#5844 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5846 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5848 …}
  -id: 245751
  -bodyTs: "'everyth':1 'everywher':7 'go':6 'goe':2 'somewher':3"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemm.ee/comment/4621664"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696862521 {#5833
    date: 2023-10-09 16:42:01.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
107 DENIED edit
App\Entity\EntryComment {#5837
  +user: App\Entity\User {#5850 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "everything goes somewhere, and i go everywhere."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696862521 {#5832
    date: 2023-10-09 16:42:01.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5838 …}
  +nested: Doctrine\ORM\PersistentCollection {#5840 …}
  +votes: Doctrine\ORM\PersistentCollection {#5842 …}
  +reports: Doctrine\ORM\PersistentCollection {#5844 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5846 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5848 …}
  -id: 245751
  -bodyTs: "'everyth':1 'everywher':7 'go':6 'goe':2 'somewher':3"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemm.ee/comment/4621664"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696862521 {#5833
    date: 2023-10-09 16:42:01.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
108 DENIED moderate
App\Entity\EntryComment {#5837
  +user: App\Entity\User {#5850 …}
  +entry: App\Entity\Entry {#2419
    +user: Proxies\__CG__\App\Entity\User {#1970 …}
    +magazine: App\Entity\Magazine {#265
      +icon: Proxies\__CG__\App\Entity\Image {#246 …}
      +name: "piracy@lemmy.dbzer0.com"
      +title: "piracy"
      +description: """
        ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
        \n
        ---\n
        \n
        ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
        \n
        **1**. Posts must be related to the discussion of digital piracy\n
        \n
        **2**. Don’t request invites, trade, sell, or self-promote\n
        \n
        **3**. Don’t request or link to specific pirated titles, including DMs\n
        \n
        **4**. Don’t submit low-quality posts, be entitled, or harass others\n
        \n
        **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
        \n
        ---\n
        \n
        [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
        ---------------------------------------------------------------------------\n
        \n
        ### Loot, Pillage, &amp; Plunder\n
        \n
        - [📜 Megathread](https://rentry.co/megathread)\n
        - [🪶 FAQ](https://rentry.co/piracy-faq)\n
        - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
        - [🪶 Rules](https://rentry.co/piracy-rules)\n
        \n
        ---\n
        \n
        💰 Please help cover server costs.\n
        \n
        [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
        \n
        ---
        """
      +rules: null
      +subscriptionsCount: 1
      +entryCount: 866
      +entryCommentCount: 20194
      +postCount: 7
      +postCommentCount: 149
      +isAdult: false
      +customCss: null
      +lastActive: DateTime @1729581369 {#275
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#237 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
      +entries: Doctrine\ORM\PersistentCollection {#180 …}
      +posts: Doctrine\ORM\PersistentCollection {#138 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
      +bans: Doctrine\ORM\PersistentCollection {#117 …}
      +reports: Doctrine\ORM\PersistentCollection {#103 …}
      +badges: Doctrine\ORM\PersistentCollection {#81 …}
      +logs: Doctrine\ORM\PersistentCollection {#71 …}
      +awards: Doctrine\ORM\PersistentCollection {#1346 …}
      +categories: Doctrine\ORM\PersistentCollection {#1823 …}
      -id: 51
      +apId: "piracy@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
      +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
      +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "piracy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: null
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1708748229 {#269
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#271
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1943 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1912 …}
    +slug: "The-complete-guide-to-building-your-personal-self-hosted-server"
    +title: "The complete guide to building your personal self hosted server for streaming and ad-blocking powered by Plex, Jellyfin, Adguard Home and Docker."
    +url: "https://lemmy.dbzer0.com/pictrs/image/648d65c6-110d-4644-ba44-1561ad35e4de.png"
    +body: """
      The complete guide to building your personal self hosted server for streaming and ad-blocking.\n
      ==============================================================================================\n
      \n
      *Captain’s note: This `OC` [was originally posted in reddit](https://www.reddit.com/r/Piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/) but its quality makes me wants to ensure a copy survices in lemmy as well.*\n
      \n
      ---\n
      \n
      We will setup the following applications in this guide:\n
      \n
      - **Docker**\n
      - **AdguardHome** - Adblocker for all your devices\n
      - **Jellyfin/Plex** - For watching the content you download\n
      - **Qbittorrent** - Torrent downloader\n
      - **Jackett** - Torrent indexers provider\n
      - **Flaresolverr** - For auto solving captcha in some of the indexers\n
      - **Sonarr** - *arr service for automatically downloading TV shows\n
      - **Radarr** - *arr service for movies\n
      - **Readarr** - *arr service for (audio)books\n
      - **lidarr** - *arr service for music\n
      - **Bazarr** - Automatically downloads subtitles for Sonarr and Radarr\n
      - **Ombi/Overseer** - For requesting movies and tv shows through Sonarr and Radarr\n
      - **Heimdall** - Dashboard for all the services so you don’t need to remember all the ports\n
      \n
      Once you are done, your dashboard will look something like this.\n
      \n
      \u{200B}\n
      \n
      [Heimdall Dashboard](https://lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)\n
      \n
      I started building my setup after reading this guide [https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/Piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).\n
      \n
      Hardware\n
      --------\n
      \n
      You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.\n
      \n
      \u{200B}\n
      \n
      [Hardware](https://lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)\n
      \n
      Operating system\n
      ----------------\n
      \n
      I will be using **Ubuntu** **server** in this guide. You can select whatever linux distro you prefer.\n
      \n
      Download ubuntu server from <https://ubuntu.com/download/server>. Create a bootable USB drive using [rufus](https://rufus.ie/en/) or any other software(I prefer [ventoy](https://www.ventoy.net/en/index.html)). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “**Install OpenSSH server**”. Don’t install docker during the setup as the snap version is installed.\n
      \n
      Once installation finishes you can now reboot and connect to your machine remotely using ssh.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ssh username@server-ip \n
      </span><span style="color:#323232;"># username you selected during installation\n
      </span><span style="color:#323232;"># Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.\n
      </span>\n
      ```\n
      \n
      Create the directories for audiobooks, books, movies, music and tv.\n
      -------------------------------------------------------------------\n
      \n
      I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.\n
      \n
      We will be using [hardlinks](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the [trash-guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/) to have a better understanding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server\n
      </span><span style="color:#323232;">mkdir ~/server/media # Media directory\n
      </span><span style="color:#323232;">mkdir ~/server/torrents # Torrents\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;"># Creating the directories for torrents\n
      </span><span style="color:#323232;">cd ~/server/torrents\n
      </span><span style="color:#323232;">mkdir audiobooks  books  incomplete  movies  music  tv \n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">cd ~/server/media\n
      </span><span style="color:#323232;">mkdir audiobooks  books  movies  music  tv\n
      </span>\n
      ```\n
      \n
      Installing docker and docker-compose\n
      ------------------------------------\n
      \n
      **Docker** <https://docs.docker.com/engine/install/ubuntu/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># install packages to allow apt to use a repository over HTTPS\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install \n
      </span><span style="color:#323232;">    apt-transport-https \n
      </span><span style="color:#323232;">    ca-certificates \n
      </span><span style="color:#323232;">    curl \n
      </span><span style="color:#323232;">    gnupg \n
      </span><span style="color:#323232;">    lsb-release\n
      </span><span style="color:#323232;"># Add Docker’s official GPG key:\n
      </span><span style="color:#323232;">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
      </span><span style="color:#323232;"># Setup the repository\n
      </span><span style="color:#323232;">echo \n
      </span><span style="color:#323232;">  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \n
      </span><span style="color:#323232;">  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
      </span><span style="color:#323232;"># Install Docker Engine\n
      </span><span style="color:#323232;">sudo apt-get update\n
      </span><span style="color:#323232;">sudo apt-get install docker-ce docker-ce-cli containerd.io\n
      </span><span style="color:#323232;"># Add user to the docker group to run docker commands without requiring root\n
      </span><span style="color:#323232;">sudo usermod -aG docker $(whoami) \n
      </span>\n
      ```\n
      \n
      > Sign out by typing exit in the console and then ssh back in\n
      \n
      **Docker compose** <https://docs.docker.com/compose/install/>\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Download the current stable release of Docker Compose\n
      </span><span style="color:#323232;">sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose\n
      </span><span style="color:#323232;"># Apply executable permissions to the binary\n
      </span><span style="color:#323232;">sudo chmod +x /usr/local/bin/docker-compose\n
      </span>\n
      ```\n
      \n
      Creating the compose file for Adguard home\n
      ------------------------------------------\n
      \n
      First setup Adguard home in a new compose file.\n
      \n
      Docker compose uses a yml file. All of the files contain version and services object.\n
      \n
      Create a directory for keeping the compose files.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose\n
      </span><span style="color:#323232;">mkdir ~/server/compose/adguard-home\n
      </span><span style="color:#323232;">vi ~/server/compose/adguard-home/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      Save the following content to the docker-compose.yml file. You can see [here](https://hub.docker.com/r/adguard/adguardhome) what each port does.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">version: '3.3'\n
      </span><span style="color:#323232;">services:\n
      </span><span style="color:#323232;">    run:\n
      </span><span style="color:#323232;">        container_name: adguardhome\n
      </span><span style="color:#323232;">        restart: unless-stopped\n
      </span><span style="color:#323232;">        volumes:\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'\n
      </span><span style="color:#323232;">            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'\n
      </span><span style="color:#323232;">        ports:\n
      </span><span style="color:#323232;">            - '53:53/tcp'\n
      </span><span style="color:#323232;">            - '53:53/udp'\n
      </span><span style="color:#323232;">            - '67:67/udp'\n
      </span><span style="color:#323232;">            - '68:68/udp'\n
      </span><span style="color:#323232;">            - '68:68/tcp'\n
      </span><span style="color:#323232;">            - '80:80/tcp'\n
      </span><span style="color:#323232;">            - '443:443/tcp'\n
      </span><span style="color:#323232;">            - '443:443/udp'\n
      </span><span style="color:#323232;">            - '3000:3000/tcp'\n
      </span><span style="color:#323232;">        image: adguard/adguardhome\n
      </span>\n
      ```\n
      \n
      Save the file and start the container using the following command.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Open up the Adguard home setup on `YOUR_SERVER_IP:3000`.\n
      \n
      Enable the default filter list from filters→DNS blocklist. You can then add custom filters.\n
      \n
      [Filters](https://lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)\n
      \n
      Creating the compose file for media-server\n
      ------------------------------------------\n
      \n
      Jackett\n
      -------\n
      \n
      Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.\n
      \n
      There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jackett:\n
      </span><span style="color:#323232;">    container_name: jackett\n
      </span><span style="color:#323232;">    image: linuxserver/jackett\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jackett:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/downloads'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9117:9117'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">prowlarr:\n
      </span><span style="color:#323232;">\t\tcontainer_name: prowlarr\n
      </span><span style="color:#323232;">    image: 'hotio/prowlarr:testing'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '9696:9696'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/prowlarr:/config'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Sonarr - TV\n
      -----------\n
      \n
      Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sonarr:\n
      </span><span style="color:#323232;">    container_name: sonarr\n
      </span><span style="color:#323232;">    image: linuxserver/sonarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8989:8989'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/sonarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Radarr - Movies\n
      ---------------\n
      \n
      Sonarr but for movies.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">radarr:\n
      </span><span style="color:#323232;">    container_name: radarr\n
      </span><span style="color:#323232;">    image: linuxserver/radarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '7878:7878'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/radarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Lidarr - Music\n
      --------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">lidarr:\n
      </span><span style="color:#323232;">    container_name: lidarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/lidarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/liadarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8686:8686'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Readarr - Books and AudioBooks\n
      ------------------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;"># Notice the different port for the audiobook container\n
      </span><span style="color:#323232;">readarr:\n
      </span><span style="color:#323232;">    container_name: readarr\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8787:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">readarr-audio-books:\n
      </span><span style="color:#323232;">    container_name: readarr-audio-books\n
      </span><span style="color:#323232;">    image: 'hotio/readarr:nightly'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8786:8787'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/readarr-audio-books:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Bazarr - Subtitles\n
      ------------------\n
      \n
      ```\n
      \n
      <span style="color:#323232;">bazarr:\n
      </span><span style="color:#323232;">    container_name: bazarr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/bazarr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/bazarr:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server:/data'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '6767:6767'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Jellyfin\n
      --------\n
      \n
      I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.\n
      \n
      I will talk about the devices section later on.\n
      \n
      For the media volume you only need to provide access to the `/data/media` directory instead of `/data` as jellyfin doesn’t need to know about the torrents.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">jellyfin:\n
      </span><span style="color:#323232;">    container_name: jellyfin\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/jellyfin\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8096:8096'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/jellyfin:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">plex:\n
      </span><span style="color:#323232;">    container_name: plex\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/plex\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '32400:32400'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - VERSION=docker\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/plex:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/media:/data/media'\n
      </span><span style="color:#323232;">    devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Overseer/Ombi - Requesting Movies and TV shows\n
      ----------------------------------------------\n
      \n
      I use both. You can use ombi only if you don’t plan to install plex.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">ombi:\n
      </span><span style="color:#323232;">    container_name: ombi\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/ombi\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/ombi:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '3579:3579'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span><span style="color:#323232;">\n
      </span><span style="color:#323232;">overseerr:\n
      </span><span style="color:#323232;">    container_name: overseerr\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/overseerr\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/overseerr:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '5055:5055'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Qbittorrent - Torrent downloader\n
      --------------------------------\n
      \n
      I use [qflood](https://hotio.dev/containers/qflood/) container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.\n
      \n
      Qbittorrent only needs access to torrent directory, and not the complete data directory.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">qflood:\n
      </span><span style="color:#323232;">    container_name: qflood\n
      </span><span style="color:#323232;">    image: hotio/qflood\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - "8080:8080"\n
      </span><span style="color:#323232;">      - "3005:3000"\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - UMASK=002\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">      - FLOOD_AUTH=false\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/qflood:/config'\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/torrents:/data/torrents'\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Heimdall - Dashboard\n
      --------------------\n
      \n
      There are multiple dashboard applications but I use Heimdall.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">heimdall:\n
      </span><span style="color:#323232;">    container_name: heimdall\n
      </span><span style="color:#323232;">    image: ghcr.io/linuxserver/heimdall\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    volumes:\n
      </span><span style="color:#323232;">      - '/home/${USER}/server/configs/heimdall:/config'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - 8090:80\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Flaresolverr - Solves cloudflare captcha\n
      ----------------------------------------\n
      \n
      If your indexers use captcha, you will need flaresolverr for them.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">flaresolverr:\n
      </span><span style="color:#323232;">    container_name: flaresolverr\n
      </span><span style="color:#323232;">    image: 'ghcr.io/flaresolverr/flaresolverr:latest'\n
      </span><span style="color:#323232;">    ports:\n
      </span><span style="color:#323232;">      - '8191:8191'\n
      </span><span style="color:#323232;">    environment:\n
      </span><span style="color:#323232;">      - PUID=1000\n
      </span><span style="color:#323232;">      - PGID=1000\n
      </span><span style="color:#323232;">      - TZ=Asia/Kolkata\n
      </span><span style="color:#323232;">    restart: unless-stopped\n
      </span>\n
      ```\n
      \n
      Transcoding\n
      -----------\n
      \n
      As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for [transcoding](https://en.wikipedia.org/wiki/Transcoding). If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.\n
      \n
      <https://jellyfin.org/docs/general/administration/hardware-acceleration.html> Read up this guide to setup hardware acceleration for your gpu.\n
      \n
      Generally, the devices are same for intel gpu transcoding.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">devices:\n
      </span><span style="color:#323232;">      - '/dev/dri/renderD128:/dev/dri/renderD128'\n
      </span><span style="color:#323232;">      - '/dev/dri/card0:/dev/dri/card0'\n
      </span>\n
      ```\n
      \n
      To monitor the gpu usage install `intel-gpu-tools`\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo apt install intel-gpu-tools\n
      </span>\n
      ```\n
      \n
      Now, create a compose file for media server.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">mkdir ~/server/compose/media-server\n
      </span><span style="color:#323232;">vi ~/server/compose/media-server/docker-compose.yml\n
      </span>\n
      ```\n
      \n
      And copy all the containers you want to use under **services**. Remember to add the **version** string just like adguard home compose file.\n
      \n
      Configuring the docker stack\n
      ----------------------------\n
      \n
      Start the containers using the same command we used to start the adguard home container.\n
      \n
      ```\n
      \n
      <span style="color:#323232;">docker-compose up -d\n
      </span>\n
      ```\n
      \n
      Jackett\n
      -------\n
      \n
      Navigate to `YOUR_SERVER_IP:9117`\n
      \n
      Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.\n
      \n
      \u{200B}\n
      \n
      [Indexers](https://lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)\n
      \n
      Qbittorrent\n
      -----------\n
      \n
      Navigate to `YOUR_SERVER_IP:8080`\n
      \n
      The default username is `admin` and password `adminadmin`. You can change the user and password by going to `Tools → Options → WebUI`\n
      \n
      Change “Default Save Path” in WebUI section to `/data/torrents/` and “Keep incomplete torrents in” to `/data/torrents/incomplete/`\n
      \n
      Create categories by right clicking on sidebar under category. Type category as `TV` and path as `tv`. Path needs to be same as the folder you created to store your media. Similarly for movies type `Movies` as category and path as `movies`. This will enable to automatically move the media to its correct folder.\n
      \n
      Sonarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:8989`\n
      \n
      - Under “Download Clients” add qbittorrent. Enter the host as `YOUR_SERVER_IP` port as `**8080`,** and the username and password you used for qbittorrent. In category type `TV` (or whatever you selected as **category** **name**(not path) on qbittorent). Test the connection and then save.\n
      - Under indexers, for each indexer you added in Jackett \n
          - Click on add button\n
          - Select Torzab\n
          - Copy the tornzab feed for the indexer from jackett\n
          - Copy the api key from jackett\n
          - Select the categories you want\n
          - Test and save\n
      - Under general, define the root folder as `/data/media/tv`\n
      \n
      > Repeat this process for Radarr, Lidarr and readarr.\n
      \n
      Use `/data/media/movies` as root for Radarr and so on.\n
      \n
      > The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.\n
      \n
      Bazarr\n
      ------\n
      \n
      Navigate to `YOUR_SERVER_IP:6767`\n
      \n
      Go to settings and then sonarr. Enter the host as `YOUR_SERVER_IP` port as `8989`. Copy the api key from sonarr settings→general.\n
      \n
      Similarly for radarr, enter the host as `YOUR_SERVER_IP` port as `7878`. Copy the api key from radarr settings→general.\n
      \n
      Jellyfin\n
      --------\n
      \n
      Go to `YOUR_SERVER_IP:8096`\n
      \n
      - Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from `/data/media`. Repeat this for movies, tv, music, books and audiobooks.\n
      - Go to dashboard→playback, and enable transcoding by selecting as `VAAPI` and enter the device as `/dev/dri/renderD128`\n
      \n
      Monitor GPU usage while playing content using\n
      \n
      ```\n
      \n
      <span style="color:#323232;">sudo intel_gpu_top\n
      </span>\n
      ```\n
      \n
      Heimdall\n
      --------\n
      \n
      Navigate to `YOUR_SERVER_IP:8090`\n
      \n
      Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.\n
      \n
      Updating docker images\n
      ----------------------\n
      \n
      With docker compose updates are very easy.\n
      \n
      - Navigate to the compose file directory `~/server/compose/media-server`.\n
      - Then `docker-compose pull` to download the latest images.\n
      - And finally `docker-compose up -d` to use the latest images.\n
      - Remove old images by `docker system prune -a`\n
      \n
      What’s next\n
      -----------\n
      \n
      - You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.\n
      - You can read about port forwarding to access your server over the internet.
      """
    +type: "image"
    +lang: "en"
    +isOc: false
    +hasEmbed: true
    +commentCount: 39
    +favouriteCount: 125
    +score: 0
    +isAdult: false
    +sticky: false
    +lastActive: DateTime @1723385793 {#2414
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1866 …}
    +votes: Doctrine\ORM\PersistentCollection {#1966 …}
    +reports: Doctrine\ORM\PersistentCollection {#1946 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1368 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2426 …}
    +badges: Doctrine\ORM\PersistentCollection {#2439 …}
    +children: []
    -id: 4934
    -titleTs: "'ad':15 'ad-block':14 'adguard':21 'block':16 'build':5 'complet':2 'docker':24 'guid':3 'home':22 'host':9 'jellyfin':20 'person':7 'plex':19 'power':17 'self':8 'server':10 'stream':12"
    -bodyTs: "'/compose/install/':586 '/config':877,910,967,1002,1032,1077,1113,1143,1258,1291,1346,1373,1447,1486 '/containers/qflood/)':1389 '/data':971,1006,1036,1081,1117,1147,1220 '/data/media':1216,1262,1295,2035 '/data/media/movies':1929 '/data/media/tv':1919 '/data/torrents':1451,1760 '/data/torrents/incomplete':1767 '/dev/dri/card0':1252,1253,1299,1300,1613,1614 '/dev/dri/renderd128':1250,1251,1297,1298,1611,1612,2061 '/dev/null':529 '/docker/compose/releases/download/1.29.2/docker-compose-$(uname':600 '/docs/general/administration/hardware-acceleration.html':1589 '/download/server':226 '/downloads':881 '/en/)':236 '/en/index.html)).':246 '/engine/install/ubuntu/':458 '/etc/apt/sources.list.d/docker.list':528 '/flaresolverr/flaresolverr:latest''':1516 '/hardlinks/hardlinks-and-instant-moves/)':381,412 '/home':692,696,874,878,907,964,968,999,1003,1029,1033,1074,1078,1110,1114,1140,1144,1255,1259,1288,1292,1343,1370,1444,1448,1483 '/linux/ubuntu':521 '/linux/ubuntu/gpg':502 '/linuxserver/bazarr':1131 '/linuxserver/heimdall':1474 '/linuxserver/jellyfin':1238 '/linuxserver/lidarr':1020 '/linuxserver/ombi':1334 '/linuxserver/overseerr':1361 '/linuxserver/plex':1274 '/opt/adguardhome/conf':699 '/opt/adguardhome/work':695 '/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':200 '/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':766 '/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1723 '/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':159 '/r/adguard/adguardhome)':675 '/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':171 '/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':29 '/server':419,970,1005,1035,1080,1116,1146 '/server/compose':656 '/server/compose/adguard-home':658 '/server/compose/adguard-home/docker-compose.yml':660 '/server/compose/media-server':1641,2118 '/server/compose/media-server/docker-compose.yml':1643 '/server/configs/adguardhome/confdir':698 '/server/configs/adguardhome/workdir':694 '/server/configs/bazarr':1142 '/server/configs/heimdall':1485 '/server/configs/jackett':876 '/server/configs/jellyfin':1257 '/server/configs/liadarr':1031 '/server/configs/ombi':1345 '/server/configs/overseerr':1372 '/server/configs/plex':1290 '/server/configs/prowlarr':909 '/server/configs/qflood':1446 '/server/configs/radarr':1001 '/server/configs/readarr':1076 '/server/configs/readarr-audio-books':1112 '/server/configs/sonarr':966 '/server/media':358,421,442,1261,1294 '/server/torrents':425,433,880,1450 '/usr/local/bin/docker-compose':605,615 '/usr/share/keyrings/docker-archive-keyring.gpg':507,518 '/wiki/transcoding).':1556 '002':1437 '1000':868,870,901,903,955,957,990,992,1023,1025,1068,1070,1104,1106,1134,1136,1241,1243,1280,1282,1337,1339,1364,1366,1433,1435,1477,1479,1522,1524 '192.168':341 '3.3':681 '3000':717,747,1430 '3000/tcp':718 '3005':1429 '32400':1276,1277 '3579':1348,1349 '443':713,715 '443/tcp':714 '443/udp':716 '5055':1375,1376 '53':701,703 '53/tcp':702 '53/udp':704 '67':705 '67/udp':706 '6767':1149,1150,1960 '68':707,709 '68/tcp':710 '68/udp':708 '7878':996,997,1997 '80':711,1489 '80/tcp':712 '8080':1427,1428,1730,1843 '8090':1488,2079 '8096':1247,1248,2012 '8191':1518,1519 '8686':1038,1039 '8786':1100 '8787':1064,1065,1101 '8989':961,962,1828,1976 '9117':883,884,1697 '9696':897,898 'acceler':1597 'access':1213,1410,2194 'ad':15,826,1880 'ad-block':14 'adblock':56 'add':492,551,760,940,1657,1698,1706,1832,1885,2013 'address':328 'adguard':621,625,740,1663,1683 'adguard/adguardhome':720 'adguardhom':55,686 'admin':1735 'adminadmin':1738 'ag':566 'allow':462 'amd64':514 'api':1900,1979,2000 'app':788,804 'appli':606 'applic':50,1462 'apt':463,472,477,481,535,540,1626 'apt-get':471,476,534,539 'apt-transport-http':480 'arch':513 'arr':86,94,99,105,787,803 'asia/kolkata':872,905,959,994,1027,1072,1108,1138,1245,1284,1341,1368,1439,1481,1526 'audio':102,1088,1094 'audiobook':346,435,444,1047,1054,2044 'auth':1441 'auto':77,821 'automat':89,110,1399,1814 'back':580 'bazarr':109,1122,1124,1127,1954 'better':416 'binari':611 'block':16,2159 'blocklist':756 'book':103,347,436,445,1045,1089,1095,2042 'boot':260 'bootabl':229 'build':5,162 'button':1708,1886 'ca':485 'ca-certif':484 'call':805 'captain':17 'captcha':79,823,859,1497,1502 'categori':1769,1776,1778,1805,1854,1862,1906 'cd':432,441 'ce':545,548 'certif':486 'chang':1741,1752 'check':278 'chmod':613 'cli':549 'click':1772,1883 'client':1831 'cloudflar':1496 'command':560,731,1677 'compar':836 'complet':2,1164,1417 'compos':454,583,594,618,630,633,653,734,769,1635,1665,1688,2107,2115,2122,2133 'comput':188,252 'configur':272,1667 'conmpos':1545 'connect':303,1402,1870 'consol':576 'contain':642,684,727,861,890,948,983,1014,1055,1057,1090,1125,1232,1268,1328,1355,1390,1421,1468,1510,1586,1648,1673,1685 'containerd.io':550 'content':65,664,2019,2067 'copi':39,1645,1889,1898,1977,1998 'correct':1820 'cpu':1571 'creat':227,342,427,616,647,767,1633,1768,1794 'cs':524 'curl':487,498,596 'current':589 'custom':761 'd':736,1690,2135 'dashboard':129,149,156,1457,1461,2047 'data':1418 'dearmor':505 'deb':512 'decad':186 'default':750,1732,1753 'defin':780,1914 'devic':60,336,1200,1249,1296,1548,1579,1603,1610,2059 'differ':1050 'directori':344,393,398,423,429,649,1217,1413,1419,2117 'distro':217 'dns':755 'docker':54,285,450,453,455,493,531,544,547,555,559,567,582,593,632,733,1286,1669,1687,2103,2106,2121,2132,2145 'docker-c':543 'docker-ce-c':546 'docker-compos':452,732,1686,2120,2131 'docker-compose.yml':667 'docs.docker.com':457,585 'docs.docker.com/compose/install/':584 'docs.docker.com/engine/install/ubuntu/':456 'doesn':830,1223 'done':147 'doubl':401 'download':67,70,90,111,220,387,587,925,945,1383,1830,2125 'download.docker.com':501,520 'download.docker.com/linux/ubuntu':519 'download.docker.com/linux/ubuntu/gpg':500 'drive':231,257,365,373 'easi':2111 'echo':511 'en.wikipedia.org':1555 'en.wikipedia.org/wiki/transcoding).':1554 'enabl':748,1812,2050 'engin':532 'enjoy':935 'enp4s0':338 'ensur':37 'enter':1834,1967,1988,2057 'environ':866,899,953,988,1021,1066,1102,1132,1239,1278,1335,1362,1431,1475,1520 'execut':607 'exit':573 'fals':1442 'feed':792,1892 'file':619,631,637,641,654,668,723,770,1546,1636,1666,2116 'filter':751,754,762,763 'final':2130 'find':324 'fine':196 'finish':297 'first':623,2100 'flaresolverr':75,818,1494,1506,1509,1512 'flood':1391,1406,1440 'folder':1792,1821,1917 'follow':49,191,266,663,730,1949 'forward':2192 'free':1165 'fssl':499 'general':1601,1913,1984,2005 'get':473,478,536,541 'ghcr.io':1019,1130,1237,1273,1333,1360,1473,1515 'ghcr.io/flaresolverr/flaresolverr:latest''':1514 'ghcr.io/linuxserver/bazarr':1129 'ghcr.io/linuxserver/heimdall':1472 'ghcr.io/linuxserver/jellyfin':1236 'ghcr.io/linuxserver/lidarr':1018 'ghcr.io/linuxserver/ombi':1332 'ghcr.io/linuxserver/overseerr':1359 'ghcr.io/linuxserver/plex':1272 'github.com':599 'github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname':598 'give':2023 'gnupg':488 'go':1747,1961,2007,2045 'gpg':496,504 'gpu':1577,1600,1608,1618,1623,1630,2063,2071 'group':556 'guid':3,53,168,211,409,1593,2168 'happen':1566 'hardlink':378 'hardwar':172,178,192,197,1596 'heimdal':128,155,1456,1466,1467,1470,2073 'hit':1945 'home':622,626,741,1664,1684 'host':9,1836,1969,1990 'hotio.dev':1388 'hotio.dev/containers/qflood/)':1387 'hotio/prowlarr':894 'hotio/qflood':1425 'hotio/readarr':1061,1097 'https':469,483 'hub.docker.com':674 'hub.docker.com/r/adguard/adguardhome)':673 'imag':719,864,893,951,986,1017,1060,1096,1128,1235,1271,1331,1358,1398,1424,1471,1513,1718,2104,2128,2140,2143 'includ':1561 'incomplet':437,1763 'index':73,84,784,857,1500,1701,1707,1713,1720,1875,1878,1895 'instal':263,270,279,284,294,296,319,449,459,479,530,542,1170,1325,1620,1627 'instead':850,1218 'instruct':1953 'intel':1607,1622,1629,2070 'intel-gpu-tool':1621,1628 'internet':2199 'ip':314,321,327,746,1696,1729,1827,1840,1959,1973,1994,2011,2078 'isp/country':2162 'jackett':71,775,776,795,815,838,845,860,863,938,1691,1703,1882,1897,1903 'jellyfin':1155,1160,1222,1231,1234,1537,2006 'jellyfin.org':1588 'jellyfin.org/docs/general/administration/hardware-acceleration.html':1587 'jellyfin/plex':61 'keep':353,651,1762,2166 'key':497,1901,1980,2001 'know':1227 'l':597 'later':1202 'latest':2127,2139 'left':2182 'lemmi':42 'lemmy.dbzer0.com':158,199,765,1722 'lemmy.dbzer0.com/pictrs/image/07685cac-36d7-4270-b3a7-c156e232829c.png)':198 'lemmy.dbzer0.com/pictrs/image/57e11e55-08b0-4b11-98e6-2f3b8d14be86.png)':764 'lemmy.dbzer0.com/pictrs/image/6690e52f-a843-4551-ad66-04c2b34b889e.png)':1721 'lemmy.dbzer0.com/pictrs/image/779256bf-4eae-48fa-a942-c960a3f556dc.png)':157 'librari':2016,2028,2032 'lidarr':104,1011,1013,1016,1925 'like':153,337,1662,2095 'link':390 'linux':216 'linuxserver/jackett':865 'linuxserver/radarr':987 'linuxserver/sonarr':952 'list':752,931 'locat':2033 'look':151,368 'lsb':490,522 'lsb-releas':489 'm':603 'machin':306 'make':33,275 'manag':1400 'meant':809 'meantim':847 'media':356,392,422,773,1206,1638,1798,1817 'media-serv':772 'mention':1534 'menu':261 'mkdir':418,420,424,434,443,655,657,1640 'monitor':1616,2062 'mount':372 'move':1815 'movi':97,120,348,438,446,977,981,1178,1307,1801,1803,1809,2039 'multipl':364,1460 'music':108,349,439,447,1012,2041 'must':1580 'name':685,862,891,949,984,1015,1058,1091,1126,1233,1269,1329,1356,1422,1469,1511,1863,2025 'navig':1692,1725,1823,1955,2074,2112 'need':138,176,1210,1225,1409,1505,1786,2090 'new':629 'next':2151 'nice':1394 'night':1062,1098 'none':854 'note':19 'notic':1048 'o':506,604 'object':646 'oc':21 'offici':495 'old':187,2142 'ombi':1317,1327,1330 'ombi/overseer':117 'ombi/overseerr':1940 'open':737 'openssh':280 'oper':201 'option':1750 'order':1573 'origin':23 'overseer/ombi':1305 'overseerr':1172,1354,1357 'packag':460 'part':2186 'particular':2031 'pass':1582 'password':1737,1745,1848 'path':1755,1782,1785,1807,1865 'permiss':608 'person':7,1157 'pgid':869,902,956,991,1024,1069,1105,1135,1242,1281,1338,1365,1434,1478,1523 'pi':194 'plan':1323 'play':2066 'playback':2048 'plex':1169,1183,1190,1267,1270,1326 'plug':247 'port':143,678,700,882,896,960,995,1037,1051,1063,1099,1148,1246,1275,1347,1374,1426,1487,1517,1841,1974,1995,2094,2191 'post':24 'power':177 'prefer':219,242 'prefix':339 'present':334 'process':1922 'program':926 'provid':74,793,1212,1392 'prowlarr':806,852,889,892 'prune':2147 'puid':867,900,954,989,1022,1067,1103,1133,1240,1279,1336,1363,1432,1476,1521 'pull':2123 'qbittor':1867 'qbittorr':68,944,1381,1404,1407,1724,1833,1852 'qflood':1386,1420,1423 'qualiti':32 'queue':946 'radarr':93,116,127,976,982,985,1924,1933,1987,2003 'raspberri':193 'read':166,404,1590,2189 'readarr':98,1044,1056,1059,1087,1093,1927 'readarr-audio-book':1086,1092 'reboot':301 'recent':828 'reddit':26 'releas':491,523,591 'rememb':140,1655,2092 'remot':307 'remov':2141 'repeat':1920,2036 'replac':813 'repositori':467,510 'request':119,1177,1306 'requir':562,1182 'restart':687,885,911,972,1007,1040,1082,1118,1151,1263,1301,1350,1377,1452,1490,1527 'right':1771 'role':1189 'root':563,1916,1931 'rufus':233 'rufus.ie':235 'rufus.ie/en/)':234 'run':558,683 'save':661,721,1754,1873,1911 'schedul':922 'screen':1952 'screenshot':2101 'search':797,924,936 'section':1201,1538,1542,1563,1758 'see':671,1711 'select':214,254,317,1860,1887,1904,2018,2029,2053 'self':8 'server':10,208,222,265,281,313,331,745,774,1639,1695,1728,1826,1839,1958,1972,1993,2010,2077,2178,2196 'server-ip':312 'servic':87,95,100,106,133,645,682,1654,2083 'set':180,1963,1983,2004 'setup':47,164,288,508,624,742,1194,1595,1938,2080,2154 'show':92,123,921,933,1181,1310,2097 'sidebar':1774 'sign':516,569 'signed-bi':515 'similar':1799,1985 'simpl':1943,2169 'snap':291 'softwar':240 'solv':78,822,1495 'someth':152 'sonarr':85,114,125,915,917,947,950,978,1822,1966,1982 'space':403 'ssh':309,310,579 'stabl':525,590 'stack':1670 'start':161,725,1671,1681 'step':268 'stick':843 'still':842,1167 'stop':690,888,914,975,1010,1043,1085,1121,1154,1266,1304,1353,1380,1455,1493,1530 'storag':402 'store':1796 'stream':12 'string':1660 'subtitl':112,1123 'sudo':470,475,503,526,533,538,564,595,612,1625,2069 'super':1942 'support':824 'sure':276 'survic':40 'system':202,2146 'take':929 'talk':1197 'tee':527 'test':895,1868,1909 'tool':1624,1631,1749 'top':2072 'tornzab':791,1891 'torrent':69,72,385,397,426,431,783,798,1230,1382,1412,1764,2157 'torzab':1888 'transcod':1531,1553,1565,1609,2051 'transport':482 'trash':408 'trash-guid':407 'trash-guides.info':380,411 'trash-guides.info/hardlinks/hardlinks-and-instant-moves/)':379,410 'tv':91,122,351,440,448,916,920,1180,1309,1780,1784,1856,2040 'type':320,572,1777,1802,1855,2020 'tz':871,904,958,993,1026,1071,1107,1137,1244,1283,1340,1367,1438,1480,1525 'ubuntu':207,221,264,273 'ubuntu.com':225 'ubuntu.com/download/server':224 'ui':1395 'umask':1436 'unam':602 'understand':417 'unless':689,887,913,974,1009,1042,1084,1120,1153,1265,1303,1352,1379,1454,1492,1529 'unless-stop':688,886,912,973,1008,1041,1083,1119,1152,1264,1302,1351,1378,1453,1491,1528 'updat':474,537,2102,2108 'url':1947 'usag':1619,2064 'usb':230,249,256 'use':184,206,232,308,363,377,400,465,634,728,789,819,851,858,1159,1175,1312,1316,1385,1465,1501,1551,1570,1652,1674,1679,1704,1715,1850,1928,2068,2085,2137,2174 'user':552,693,697,875,879,908,965,969,1000,1004,1030,1034,1075,1079,1111,1115,1141,1145,1256,1260,1289,1293,1344,1371,1445,1449,1484,1743 'usermod':565 'usernam':311,315,1733,1846 'utilis':1575 'vaapi':2055 'ventoy':243 'version':292,643,680,1285,1659 'vi':659,1642 'via':937 'volum':691,873,906,963,998,1028,1073,1109,1139,1207,1254,1287,1342,1369,1443,1482 'vpn':2155,2175,2185 'want':35,1650,1908,2164 'watch':63 'webui':1751,1757 'well':44,395,834 'whatev':215,1858 'whenev':1564 'whoami':568 'without':399,561 'work':195,832 'www.reddit.com':28,170 'www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/](https://www.reddit.com/r/piracy/comments/ma1hlm/the_complete_guide_to_building_your_own_personal/).':169 'www.reddit.com/r/piracy/comments/pqsomd/the_complete_guide_to_building_your_personal_self/)':27 'www.ventoy.net':245 'www.ventoy.net/en/index.html)).':244 'x':614 'yml':636"
    +cross: false
    +upVotes: 0
    +downVotes: 0
    +ranking: 1696933577
    +visibility: "visible             "
    +apId: "https://lemmy.dbzer0.com/post/5911320"
    +editedAt: null
    +createdAt: DateTimeImmutable @1696847177 {#1793
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +magazine: App\Entity\Magazine {#265}
  +image: null
  +parent: null
  +root: null
  +body: "everything goes somewhere, and i go everywhere."
  +lang: "en"
  +isAdult: false
  +favouriteCount: 1
  +score: 0
  +lastActive: DateTime @1696862521 {#5832
    date: 2023-10-09 16:42:01.0 +02:00
  }
  +ip: null
  +tags: null
  +mentions: [
    "@db0@lemmy.dbzer0.com"
  ]
  +children: Doctrine\ORM\PersistentCollection {#5838 …}
  +nested: Doctrine\ORM\PersistentCollection {#5840 …}
  +votes: Doctrine\ORM\PersistentCollection {#5842 …}
  +reports: Doctrine\ORM\PersistentCollection {#5844 …}
  +favourites: Doctrine\ORM\PersistentCollection {#5846 …}
  +notifications: Doctrine\ORM\PersistentCollection {#5848 …}
  -id: 245751
  -bodyTs: "'everyth':1 'everywher':7 'go':6 'goe':2 'somewher':3"
  +ranking: 0
  +commentCount: 0
  +upVotes: 0
  +downVotes: 0
  +visibility: "visible             "
  +apId: "https://lemm.ee/comment/4621664"
  +editedAt: null
  +createdAt: DateTimeImmutable @1696862521 {#5833
    date: 2023-10-09 16:42:01.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS DENIED
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details
109 DENIED edit
App\Entity\Magazine {#265
  +icon: Proxies\__CG__\App\Entity\Image {#246 …}
  +name: "piracy@lemmy.dbzer0.com"
  +title: "piracy"
  +description: """
    ##### ⚓ Community devoted to in-depth debate on topics concerning digital piracy, ethical problems, and legal advancements.\n
    \n
    ---\n
    \n
    ### Rules • [Full Version](https://rentry.co/piracy-rules)\n
    \n
    **1**. Posts must be related to the discussion of digital piracy\n
    \n
    **2**. Don’t request invites, trade, sell, or self-promote\n
    \n
    **3**. Don’t request or link to specific pirated titles, including DMs\n
    \n
    **4**. Don’t submit low-quality posts, be entitled, or harass others\n
    \n
    **5**. Don’t post questions already answered. READ THE [WIKI](https://lemmy.dbzer0.com/post/10901)\n
    \n
    ---\n
    \n
    [![](https://a.imagem.app/oZoQ1v.png)](https://lemmy.dbzer0.com/post/10901)\n
    ---------------------------------------------------------------------------\n
    \n
    ### Loot, Pillage, &amp; Plunder\n
    \n
    - [📜 Megathread](https://rentry.co/megathread)\n
    - [🪶 FAQ](https://rentry.co/piracy-faq)\n
    - [🪶 ISP Complaints](https://rentry.co/piracy-isp-complaints)\n
    - [🪶 Rules](https://rentry.co/piracy-rules)\n
    \n
    ---\n
    \n
    💰 Please help cover server costs.\n
    \n
    [![Ko-Fi](https://lemmy.dbzer0.com/pictrs/image/4a2f073a-3dd8-492a-942d-72bd929c9f1d.png)](https://ko-fi.com/dbzer0)[![Liberapay](https://lemmy.dbzer0.com/pictrs/image/eec4659d-39be-4fc9-bc9e-66a96285ea2c.png)](https://liberapay.com/db0/)\n
    \n
    ---
    """
  +rules: null
  +subscriptionsCount: 1
  +entryCount: 866
  +entryCommentCount: 20194
  +postCount: 7
  +postCommentCount: 149
  +isAdult: false
  +customCss: null
  +lastActive: DateTime @1729581369 {#275
    date: 2024-10-22 09:16:09.0 +02:00
  }
  +markedForDeletionAt: null
  +tags: null
  +moderators: Doctrine\ORM\PersistentCollection {#237 …}
  +ownershipRequests: Doctrine\ORM\PersistentCollection {#233 …}
  +moderatorRequests: Doctrine\ORM\PersistentCollection {#222 …}
  +entries: Doctrine\ORM\PersistentCollection {#180 …}
  +posts: Doctrine\ORM\PersistentCollection {#138 …}
  +subscriptions: Doctrine\ORM\PersistentCollection {#200 …}
  +bans: Doctrine\ORM\PersistentCollection {#117 …}
  +reports: Doctrine\ORM\PersistentCollection {#103 …}
  +badges: Doctrine\ORM\PersistentCollection {#81 …}
  +logs: Doctrine\ORM\PersistentCollection {#71 …}
  +awards: Doctrine\ORM\PersistentCollection {#1346 …}
  +categories: Doctrine\ORM\PersistentCollection {#1823 …}
  -id: 51
  +apId: "piracy@lemmy.dbzer0.com"
  +apProfileId: "https://lemmy.dbzer0.com/c/piracy"
  +apPublicUrl: "https://lemmy.dbzer0.com/c/piracy"
  +apFollowersUrl: "https://lemmy.dbzer0.com/c/piracy/followers"
  +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
  +apDomain: "lemmy.dbzer0.com"
  +apPreferredUsername: "piracy"
  +apDiscoverable: true
  +apManuallyApprovesFollowers: null
  +privateKey: null
  +publicKey: null
  +apFetchedAt: DateTime @1708748229 {#269
    date: 2024-02-24 05:17:09.0 +01:00
  }
  +apDeletedAt: null
  +apTimeoutAt: null
  +visibility: "visible             "
  +createdAt: DateTimeImmutable @1697197339 {#271
    date: 2023-10-13 13:42:19.0 +02:00
  }
}
"Scheb\TwoFactorBundle\Security\Authorization\Voter\TwoFactorInProgressVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\EntryVoter"
ACCESS ABSTAIN
"App\Security\Voter\MagazineVoter"
ACCESS DENIED
"App\Security\Voter\MessageThreadVoter"
ACCESS ABSTAIN
"App\Security\Voter\MessageVoter"
ACCESS ABSTAIN
"App\Security\Voter\NotificationVoter"
ACCESS ABSTAIN
"App\Security\Voter\OAuth2UserConsentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostCommentVoter"
ACCESS ABSTAIN
"App\Security\Voter\PostVoter"
ACCESS ABSTAIN
"App\Security\Voter\UserVoter"
ACCESS ABSTAIN
Show voter details