Components

24 Twig Components
98 Render Count
483 ms Render Time
16.0 MiB Memory Usage

Components

Name Metadata Render Count Render Time
settings_row_switch
"App\Twig\Components\SettingsRowSwitchComponent"
components/_settings_row_switch.html.twig
15 10.47ms
date
"App\Twig\Components\DateComponent"
components/date.html.twig
10 2.78ms
user_inline
"App\Twig\Components\UserInlineComponent"
components/user_inline.html.twig
9 10.99ms
date_edited
"App\Twig\Components\DateEditedComponent"
components/date_edited.html.twig
8 8.94ms
vote
"App\Twig\Components\VoteComponent"
components/vote.html.twig
8 9.83ms
boost
"App\Twig\Components\BoostComponent"
components/boost.html.twig
8 19.86ms
entry_comment
"App\Twig\Components\EntryCommentComponent"
components/entry_comment.html.twig
7 365.65ms
user_avatar
"App\Twig\Components\UserAvatarComponent"
components/user_avatar.html.twig
7 7.63ms
entry_comments_nested
"App\Twig\Components\EntryCommentsNestedComponent"
components/_cached.html.twig
7 162.22ms
user_settings_row_switch
"App\Twig\Components\UserSettingsRowSwitchComponent"
components/_user_settings_row_switch.html.twig
4 0.86ms
settings_row_enum
"App\Twig\Components\SettingsRowEnumComponent"
components/_settings_row_enum.html.twig
2 0.71ms
entry
"App\Twig\Components\EntryComponent"
components/_cached.html.twig
1 16.32ms
entries_cross
"App\Twig\Components\EntriesCrossComponent"
components/_cached.html.twig
1 46.26ms
editor_toolbar
"App\Twig\Components\EditorToolbarComponent"
components/editor_toolbar.html.twig
1 0.56ms
user_actions
"App\Twig\Components\UserActionsComponent"
components/user_actions.html.twig
1 0.48ms
magazine_box
"App\Twig\Components\MagazineBoxComponent"
components/magazine_box.html.twig
1 24.40ms
magazine_sub
"App\Twig\Components\MagazineSubComponent"
components/magazine_sub.html.twig
1 0.66ms
related_magazines
"App\Twig\Components\RelatedMagazinesComponent"
components/_cached.html.twig
1 3.66ms
active_users
"App\Twig\Components\ActiveUsersComponent"
components/_cached.html.twig
1 0.26ms
related_categories
"App\Twig\Components\RelatedCategoriesComponent"
components/_cached.html.twig
1 1.81ms
related_posts
"App\Twig\Components\RelatedPostsComponent"
components/_cached.html.twig
1 2.92ms
related_entries
"App\Twig\Components\RelatedEntriesComponent"
components/_cached.html.twig
1 8.13ms
support_us_block
"App\Twig\Components\SupportUsBlock"
components/_cached.html.twig
1 0.25ms
featured_magazines
"App\Twig\Components\FeaturedMagazinesComponent"
components/_cached.html.twig
1 0.74ms

Render calls

entry App\Twig\Components\EntryComponent 16.0 MiB 16.32 ms
Input props
[
  "entry" => App\Entity\Entry {#2412
    +user: Proxies\__CG__\App\Entity\User {#1978
      +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
      +cover: null
      +email: "db0@lemmy.dbzer0.com"
      +username: "@db0@lemmy.dbzer0.com"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: """
        Epicurean Revolutionary Libertarian Socialist\n
        \n
        I make [FOSS](https://github.com/db0) things:\n
        \n
        - [AI Horde](https://aihorde.net)\n
        - [Fediseer](https://fediseer.com)\n
        - [Pythörhead](https://github.com/db0/pythorhead)\n
        - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
        \n
        wiki-user: db0
        """
      +lastActive: DateTime @1729133551 {#1516
        date: 2024-10-17 04:52:31.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
      +entries: Doctrine\ORM\PersistentCollection {#1713 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
      +posts: Doctrine\ORM\PersistentCollection {#1738 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
      +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
      +follows: Doctrine\ORM\PersistentCollection {#1449 …}
      +followers: Doctrine\ORM\PersistentCollection {#1636 …}
      +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
      +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
      +reports: Doctrine\ORM\PersistentCollection {#1456 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
      +violations: Doctrine\ORM\PersistentCollection {#1700 …}
      +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
      +awards: Doctrine\ORM\PersistentCollection {#1440 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
      +categories: Doctrine\ORM\PersistentCollection {#1648 …}
      -id: 3194
      -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
      +apId: "db0@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/u/db0"
      +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "db0"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729136030 {#1518
        date: 2024-10-17 05:33:50.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1687056004 {#1519
        date: 2023-06-18 04:40:04.0 +02:00
      }
      +__isInitialized__: true
       …2
    }
    +magazine: App\Entity\Magazine {#264
      +icon: Proxies\__CG__\App\Entity\Image {#245 …}
      +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 {#274
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#236 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
      +entries: Doctrine\ORM\PersistentCollection {#179 …}
      +posts: Doctrine\ORM\PersistentCollection {#137 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
      +bans: Doctrine\ORM\PersistentCollection {#116 …}
      +reports: Doctrine\ORM\PersistentCollection {#102 …}
      +badges: Doctrine\ORM\PersistentCollection {#80 …}
      +logs: Doctrine\ORM\PersistentCollection {#70 …}
      +awards: Doctrine\ORM\PersistentCollection {#1360 …}
      +categories: Doctrine\ORM\PersistentCollection {#1792 …}
      -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 {#268
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#270
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1970 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
    +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 {#2418
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1884 …}
    +votes: Doctrine\ORM\PersistentCollection {#1961 …}
    +reports: Doctrine\ORM\PersistentCollection {#1959 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
    +badges: Doctrine\ORM\PersistentCollection {#2436 …}
    +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 {#1858
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  "isSingle" => true
  "showShortSentence" => false
  "showBody" => true
]
Attributes
[
  "class" => "entry--single section--top"
]
Component
App\Twig\Components\EntryComponent {#2971
  -authorizationChecker: Symfony\Component\Security\Core\Authorization\AuthorizationChecker {#931 …}
  -newCommentMarkerCount: App\Kbin\NewCommentMarker\NewCommentMarkerCount {#2972 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -twig: Twig\Environment {#1252 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
  -security: Symfony\Bundle\SecurityBundle\Security {#1101 …}
  +entry: App\Entity\Entry {#2412
    +user: Proxies\__CG__\App\Entity\User {#1978
      +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
      +cover: null
      +email: "db0@lemmy.dbzer0.com"
      +username: "@db0@lemmy.dbzer0.com"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: """
        Epicurean Revolutionary Libertarian Socialist\n
        \n
        I make [FOSS](https://github.com/db0) things:\n
        \n
        - [AI Horde](https://aihorde.net)\n
        - [Fediseer](https://fediseer.com)\n
        - [Pythörhead](https://github.com/db0/pythorhead)\n
        - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
        \n
        wiki-user: db0
        """
      +lastActive: DateTime @1729133551 {#1516
        date: 2024-10-17 04:52:31.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
      +entries: Doctrine\ORM\PersistentCollection {#1713 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
      +posts: Doctrine\ORM\PersistentCollection {#1738 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
      +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
      +follows: Doctrine\ORM\PersistentCollection {#1449 …}
      +followers: Doctrine\ORM\PersistentCollection {#1636 …}
      +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
      +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
      +reports: Doctrine\ORM\PersistentCollection {#1456 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
      +violations: Doctrine\ORM\PersistentCollection {#1700 …}
      +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
      +awards: Doctrine\ORM\PersistentCollection {#1440 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
      +categories: Doctrine\ORM\PersistentCollection {#1648 …}
      -id: 3194
      -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
      +apId: "db0@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/u/db0"
      +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "db0"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729136030 {#1518
        date: 2024-10-17 05:33:50.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1687056004 {#1519
        date: 2023-06-18 04:40:04.0 +02:00
      }
      +__isInitialized__: true
       …2
    }
    +magazine: App\Entity\Magazine {#264
      +icon: Proxies\__CG__\App\Entity\Image {#245 …}
      +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 {#274
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#236 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
      +entries: Doctrine\ORM\PersistentCollection {#179 …}
      +posts: Doctrine\ORM\PersistentCollection {#137 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
      +bans: Doctrine\ORM\PersistentCollection {#116 …}
      +reports: Doctrine\ORM\PersistentCollection {#102 …}
      +badges: Doctrine\ORM\PersistentCollection {#80 …}
      +logs: Doctrine\ORM\PersistentCollection {#70 …}
      +awards: Doctrine\ORM\PersistentCollection {#1360 …}
      +categories: Doctrine\ORM\PersistentCollection {#1792 …}
      -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 {#268
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#270
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1970 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
    +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 {#2418
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1884 …}
    +votes: Doctrine\ORM\PersistentCollection {#1961 …}
    +reports: Doctrine\ORM\PersistentCollection {#1959 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
    +badges: Doctrine\ORM\PersistentCollection {#2436 …}
    +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 {#1858
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +isSingle: true
  +showShortSentence: false
  +showBody: true
  +showMagazineName: false
  +canSeeTrash: false
  +newComments: 0
}
user_inline App\Twig\Components\UserInlineComponent 16.0 MiB 0.37 ms
Input props
[
  "user" => Proxies\__CG__\App\Entity\User {#1978
    +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
    +cover: null
    +email: "db0@lemmy.dbzer0.com"
    +username: "@db0@lemmy.dbzer0.com"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: """
      Epicurean Revolutionary Libertarian Socialist\n
      \n
      I make [FOSS](https://github.com/db0) things:\n
      \n
      - [AI Horde](https://aihorde.net)\n
      - [Fediseer](https://fediseer.com)\n
      - [Pythörhead](https://github.com/db0/pythorhead)\n
      - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
      \n
      wiki-user: db0
      """
    +lastActive: DateTime @1729133551 {#1516
      date: 2024-10-17 04:52:31.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: true
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: false
    +notifyOnNewEntryCommentReply: false
    +notifyOnNewPost: false
    +notifyOnNewPostReply: false
    +notifyOnNewPostCommentReply: false
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
    +entries: Doctrine\ORM\PersistentCollection {#1713 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
    +posts: Doctrine\ORM\PersistentCollection {#1738 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
    +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
    +follows: Doctrine\ORM\PersistentCollection {#1449 …}
    +followers: Doctrine\ORM\PersistentCollection {#1636 …}
    +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
    +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
    +reports: Doctrine\ORM\PersistentCollection {#1456 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
    +violations: Doctrine\ORM\PersistentCollection {#1700 …}
    +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
    +awards: Doctrine\ORM\PersistentCollection {#1440 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
    +categories: Doctrine\ORM\PersistentCollection {#1648 …}
    -id: 3194
    -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
    +apId: "db0@lemmy.dbzer0.com"
    +apProfileId: "https://lemmy.dbzer0.com/u/db0"
    +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
    +apDomain: "lemmy.dbzer0.com"
    +apPreferredUsername: "db0"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729136030 {#1518
      date: 2024-10-17 05:33:50.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1687056004 {#1519
      date: 2023-06-18 04:40:04.0 +02:00
    }
    +__isInitialized__: true
     …2
  }
  "showAvatar" => false
]
Attributes
[]
Component
App\Twig\Components\UserInlineComponent {#4068
  +user: Proxies\__CG__\App\Entity\User {#1978
    +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
    +cover: null
    +email: "db0@lemmy.dbzer0.com"
    +username: "@db0@lemmy.dbzer0.com"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: """
      Epicurean Revolutionary Libertarian Socialist\n
      \n
      I make [FOSS](https://github.com/db0) things:\n
      \n
      - [AI Horde](https://aihorde.net)\n
      - [Fediseer](https://fediseer.com)\n
      - [Pythörhead](https://github.com/db0/pythorhead)\n
      - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
      \n
      wiki-user: db0
      """
    +lastActive: DateTime @1729133551 {#1516
      date: 2024-10-17 04:52:31.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: true
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: false
    +notifyOnNewEntryCommentReply: false
    +notifyOnNewPost: false
    +notifyOnNewPostReply: false
    +notifyOnNewPostCommentReply: false
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
    +entries: Doctrine\ORM\PersistentCollection {#1713 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
    +posts: Doctrine\ORM\PersistentCollection {#1738 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
    +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
    +follows: Doctrine\ORM\PersistentCollection {#1449 …}
    +followers: Doctrine\ORM\PersistentCollection {#1636 …}
    +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
    +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
    +reports: Doctrine\ORM\PersistentCollection {#1456 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
    +violations: Doctrine\ORM\PersistentCollection {#1700 …}
    +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
    +awards: Doctrine\ORM\PersistentCollection {#1440 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
    +categories: Doctrine\ORM\PersistentCollection {#1648 …}
    -id: 3194
    -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
    +apId: "db0@lemmy.dbzer0.com"
    +apProfileId: "https://lemmy.dbzer0.com/u/db0"
    +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
    +apDomain: "lemmy.dbzer0.com"
    +apPreferredUsername: "db0"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729136030 {#1518
      date: 2024-10-17 05:33:50.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1687056004 {#1519
      date: 2023-06-18 04:40:04.0 +02:00
    }
    +__isInitialized__: true
     …2
  }
  +showAvatar: false
}
date App\Twig\Components\DateComponent 16.0 MiB 0.25 ms
Input props
[
  "date" => DateTimeImmutable @1696847177 {#1858
    date: 2023-10-09 12:26:17.0 +02:00
  }
]
Attributes
[]
Component
App\Twig\Components\DateComponent {#4138
  +date: DateTimeImmutable @1696847177 {#1858
    date: 2023-10-09 12:26:17.0 +02:00
  }
}
date_edited App\Twig\Components\DateEditedComponent 16.0 MiB 0.20 ms
Input props
[
  "createdAt" => DateTimeImmutable @1696847177 {#1858
    date: 2023-10-09 12:26:17.0 +02:00
  }
  "editedAt" => null
]
Attributes
[]
Component
App\Twig\Components\DateEditedComponent {#4202
  +createdAt: DateTimeImmutable @1696847177 {#1858
    date: 2023-10-09 12:26:17.0 +02:00
  }
  +editedAt: null
}
vote App\Twig\Components\VoteComponent 16.0 MiB 0.57 ms
Input props
[
  "subject" => App\Entity\Entry {#2412
    +user: Proxies\__CG__\App\Entity\User {#1978
      +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
      +cover: null
      +email: "db0@lemmy.dbzer0.com"
      +username: "@db0@lemmy.dbzer0.com"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: """
        Epicurean Revolutionary Libertarian Socialist\n
        \n
        I make [FOSS](https://github.com/db0) things:\n
        \n
        - [AI Horde](https://aihorde.net)\n
        - [Fediseer](https://fediseer.com)\n
        - [Pythörhead](https://github.com/db0/pythorhead)\n
        - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
        \n
        wiki-user: db0
        """
      +lastActive: DateTime @1729133551 {#1516
        date: 2024-10-17 04:52:31.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
      +entries: Doctrine\ORM\PersistentCollection {#1713 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
      +posts: Doctrine\ORM\PersistentCollection {#1738 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
      +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
      +follows: Doctrine\ORM\PersistentCollection {#1449 …}
      +followers: Doctrine\ORM\PersistentCollection {#1636 …}
      +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
      +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
      +reports: Doctrine\ORM\PersistentCollection {#1456 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
      +violations: Doctrine\ORM\PersistentCollection {#1700 …}
      +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
      +awards: Doctrine\ORM\PersistentCollection {#1440 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
      +categories: Doctrine\ORM\PersistentCollection {#1648 …}
      -id: 3194
      -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
      +apId: "db0@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/u/db0"
      +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "db0"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729136030 {#1518
        date: 2024-10-17 05:33:50.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1687056004 {#1519
        date: 2023-06-18 04:40:04.0 +02:00
      }
      +__isInitialized__: true
       …2
    }
    +magazine: App\Entity\Magazine {#264
      +icon: Proxies\__CG__\App\Entity\Image {#245 …}
      +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 {#274
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#236 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
      +entries: Doctrine\ORM\PersistentCollection {#179 …}
      +posts: Doctrine\ORM\PersistentCollection {#137 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
      +bans: Doctrine\ORM\PersistentCollection {#116 …}
      +reports: Doctrine\ORM\PersistentCollection {#102 …}
      +badges: Doctrine\ORM\PersistentCollection {#80 …}
      +logs: Doctrine\ORM\PersistentCollection {#70 …}
      +awards: Doctrine\ORM\PersistentCollection {#1360 …}
      +categories: Doctrine\ORM\PersistentCollection {#1792 …}
      -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 {#268
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#270
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1970 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
    +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 {#2418
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1884 …}
    +votes: Doctrine\ORM\PersistentCollection {#1961 …}
    +reports: Doctrine\ORM\PersistentCollection {#1959 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
    +badges: Doctrine\ORM\PersistentCollection {#2436 …}
    +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 {#1858
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\VoteComponent {#4269
  +subject: App\Entity\Entry {#2412
    +user: Proxies\__CG__\App\Entity\User {#1978
      +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
      +cover: null
      +email: "db0@lemmy.dbzer0.com"
      +username: "@db0@lemmy.dbzer0.com"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: """
        Epicurean Revolutionary Libertarian Socialist\n
        \n
        I make [FOSS](https://github.com/db0) things:\n
        \n
        - [AI Horde](https://aihorde.net)\n
        - [Fediseer](https://fediseer.com)\n
        - [Pythörhead](https://github.com/db0/pythorhead)\n
        - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
        \n
        wiki-user: db0
        """
      +lastActive: DateTime @1729133551 {#1516
        date: 2024-10-17 04:52:31.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
      +entries: Doctrine\ORM\PersistentCollection {#1713 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
      +posts: Doctrine\ORM\PersistentCollection {#1738 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
      +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
      +follows: Doctrine\ORM\PersistentCollection {#1449 …}
      +followers: Doctrine\ORM\PersistentCollection {#1636 …}
      +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
      +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
      +reports: Doctrine\ORM\PersistentCollection {#1456 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
      +violations: Doctrine\ORM\PersistentCollection {#1700 …}
      +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
      +awards: Doctrine\ORM\PersistentCollection {#1440 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
      +categories: Doctrine\ORM\PersistentCollection {#1648 …}
      -id: 3194
      -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
      +apId: "db0@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/u/db0"
      +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "db0"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729136030 {#1518
        date: 2024-10-17 05:33:50.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1687056004 {#1519
        date: 2023-06-18 04:40:04.0 +02:00
      }
      +__isInitialized__: true
       …2
    }
    +magazine: App\Entity\Magazine {#264
      +icon: Proxies\__CG__\App\Entity\Image {#245 …}
      +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 {#274
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#236 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
      +entries: Doctrine\ORM\PersistentCollection {#179 …}
      +posts: Doctrine\ORM\PersistentCollection {#137 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
      +bans: Doctrine\ORM\PersistentCollection {#116 …}
      +reports: Doctrine\ORM\PersistentCollection {#102 …}
      +badges: Doctrine\ORM\PersistentCollection {#80 …}
      +logs: Doctrine\ORM\PersistentCollection {#70 …}
      +awards: Doctrine\ORM\PersistentCollection {#1360 …}
      +categories: Doctrine\ORM\PersistentCollection {#1792 …}
      -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 {#268
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#270
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1970 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
    +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 {#2418
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1884 …}
    +votes: Doctrine\ORM\PersistentCollection {#1961 …}
    +reports: Doctrine\ORM\PersistentCollection {#1959 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
    +badges: Doctrine\ORM\PersistentCollection {#2436 …}
    +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 {#1858
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  +formDest: "entry"
  +showDownvote: true
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
boost App\Twig\Components\BoostComponent 16.0 MiB 1.10 ms
Input props
[
  "subject" => App\Entity\Entry {#2412
    +user: Proxies\__CG__\App\Entity\User {#1978
      +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
      +cover: null
      +email: "db0@lemmy.dbzer0.com"
      +username: "@db0@lemmy.dbzer0.com"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: """
        Epicurean Revolutionary Libertarian Socialist\n
        \n
        I make [FOSS](https://github.com/db0) things:\n
        \n
        - [AI Horde](https://aihorde.net)\n
        - [Fediseer](https://fediseer.com)\n
        - [Pythörhead](https://github.com/db0/pythorhead)\n
        - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
        \n
        wiki-user: db0
        """
      +lastActive: DateTime @1729133551 {#1516
        date: 2024-10-17 04:52:31.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
      +entries: Doctrine\ORM\PersistentCollection {#1713 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
      +posts: Doctrine\ORM\PersistentCollection {#1738 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
      +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
      +follows: Doctrine\ORM\PersistentCollection {#1449 …}
      +followers: Doctrine\ORM\PersistentCollection {#1636 …}
      +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
      +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
      +reports: Doctrine\ORM\PersistentCollection {#1456 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
      +violations: Doctrine\ORM\PersistentCollection {#1700 …}
      +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
      +awards: Doctrine\ORM\PersistentCollection {#1440 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
      +categories: Doctrine\ORM\PersistentCollection {#1648 …}
      -id: 3194
      -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
      +apId: "db0@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/u/db0"
      +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "db0"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729136030 {#1518
        date: 2024-10-17 05:33:50.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1687056004 {#1519
        date: 2023-06-18 04:40:04.0 +02:00
      }
      +__isInitialized__: true
       …2
    }
    +magazine: App\Entity\Magazine {#264
      +icon: Proxies\__CG__\App\Entity\Image {#245 …}
      +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 {#274
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#236 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
      +entries: Doctrine\ORM\PersistentCollection {#179 …}
      +posts: Doctrine\ORM\PersistentCollection {#137 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
      +bans: Doctrine\ORM\PersistentCollection {#116 …}
      +reports: Doctrine\ORM\PersistentCollection {#102 …}
      +badges: Doctrine\ORM\PersistentCollection {#80 …}
      +logs: Doctrine\ORM\PersistentCollection {#70 …}
      +awards: Doctrine\ORM\PersistentCollection {#1360 …}
      +categories: Doctrine\ORM\PersistentCollection {#1792 …}
      -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 {#268
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#270
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1970 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
    +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 {#2418
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1884 …}
    +votes: Doctrine\ORM\PersistentCollection {#1961 …}
    +reports: Doctrine\ORM\PersistentCollection {#1959 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
    +badges: Doctrine\ORM\PersistentCollection {#2436 …}
    +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 {#1858
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\BoostComponent {#4340
  +formDest: "entry"
  +subject: App\Entity\Entry {#2412
    +user: Proxies\__CG__\App\Entity\User {#1978
      +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
      +cover: null
      +email: "db0@lemmy.dbzer0.com"
      +username: "@db0@lemmy.dbzer0.com"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: """
        Epicurean Revolutionary Libertarian Socialist\n
        \n
        I make [FOSS](https://github.com/db0) things:\n
        \n
        - [AI Horde](https://aihorde.net)\n
        - [Fediseer](https://fediseer.com)\n
        - [Pythörhead](https://github.com/db0/pythorhead)\n
        - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
        \n
        wiki-user: db0
        """
      +lastActive: DateTime @1729133551 {#1516
        date: 2024-10-17 04:52:31.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
      +entries: Doctrine\ORM\PersistentCollection {#1713 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
      +posts: Doctrine\ORM\PersistentCollection {#1738 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
      +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
      +follows: Doctrine\ORM\PersistentCollection {#1449 …}
      +followers: Doctrine\ORM\PersistentCollection {#1636 …}
      +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
      +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
      +reports: Doctrine\ORM\PersistentCollection {#1456 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
      +violations: Doctrine\ORM\PersistentCollection {#1700 …}
      +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
      +awards: Doctrine\ORM\PersistentCollection {#1440 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
      +categories: Doctrine\ORM\PersistentCollection {#1648 …}
      -id: 3194
      -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
      +apId: "db0@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/u/db0"
      +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "db0"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729136030 {#1518
        date: 2024-10-17 05:33:50.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1687056004 {#1519
        date: 2023-06-18 04:40:04.0 +02:00
      }
      +__isInitialized__: true
       …2
    }
    +magazine: App\Entity\Magazine {#264
      +icon: Proxies\__CG__\App\Entity\Image {#245 …}
      +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 {#274
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#236 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
      +entries: Doctrine\ORM\PersistentCollection {#179 …}
      +posts: Doctrine\ORM\PersistentCollection {#137 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
      +bans: Doctrine\ORM\PersistentCollection {#116 …}
      +reports: Doctrine\ORM\PersistentCollection {#102 …}
      +badges: Doctrine\ORM\PersistentCollection {#80 …}
      +logs: Doctrine\ORM\PersistentCollection {#70 …}
      +awards: Doctrine\ORM\PersistentCollection {#1360 …}
      +categories: Doctrine\ORM\PersistentCollection {#1792 …}
      -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 {#268
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#270
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1970 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
    +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 {#2418
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1884 …}
    +votes: Doctrine\ORM\PersistentCollection {#1961 …}
    +reports: Doctrine\ORM\PersistentCollection {#1959 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
    +badges: Doctrine\ORM\PersistentCollection {#2436 …}
    +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 {#1858
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
entries_cross App\Twig\Components\EntriesCrossComponent 16.0 MiB 46.26 ms
Input props
[
  "entry" => App\Entity\Entry {#2412
    +user: Proxies\__CG__\App\Entity\User {#1978
      +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
      +cover: null
      +email: "db0@lemmy.dbzer0.com"
      +username: "@db0@lemmy.dbzer0.com"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: """
        Epicurean Revolutionary Libertarian Socialist\n
        \n
        I make [FOSS](https://github.com/db0) things:\n
        \n
        - [AI Horde](https://aihorde.net)\n
        - [Fediseer](https://fediseer.com)\n
        - [Pythörhead](https://github.com/db0/pythorhead)\n
        - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
        \n
        wiki-user: db0
        """
      +lastActive: DateTime @1729133551 {#1516
        date: 2024-10-17 04:52:31.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
      +entries: Doctrine\ORM\PersistentCollection {#1713 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
      +posts: Doctrine\ORM\PersistentCollection {#1738 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
      +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
      +follows: Doctrine\ORM\PersistentCollection {#1449 …}
      +followers: Doctrine\ORM\PersistentCollection {#1636 …}
      +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
      +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
      +reports: Doctrine\ORM\PersistentCollection {#1456 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
      +violations: Doctrine\ORM\PersistentCollection {#1700 …}
      +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
      +awards: Doctrine\ORM\PersistentCollection {#1440 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
      +categories: Doctrine\ORM\PersistentCollection {#1648 …}
      -id: 3194
      -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
      +apId: "db0@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/u/db0"
      +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "db0"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729136030 {#1518
        date: 2024-10-17 05:33:50.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1687056004 {#1519
        date: 2023-06-18 04:40:04.0 +02:00
      }
      +__isInitialized__: true
       …2
    }
    +magazine: App\Entity\Magazine {#264
      +icon: Proxies\__CG__\App\Entity\Image {#245 …}
      +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 {#274
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#236 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
      +entries: Doctrine\ORM\PersistentCollection {#179 …}
      +posts: Doctrine\ORM\PersistentCollection {#137 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
      +bans: Doctrine\ORM\PersistentCollection {#116 …}
      +reports: Doctrine\ORM\PersistentCollection {#102 …}
      +badges: Doctrine\ORM\PersistentCollection {#80 …}
      +logs: Doctrine\ORM\PersistentCollection {#70 …}
      +awards: Doctrine\ORM\PersistentCollection {#1360 …}
      +categories: Doctrine\ORM\PersistentCollection {#1792 …}
      -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 {#268
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#270
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1970 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
    +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 {#2418
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1884 …}
    +votes: Doctrine\ORM\PersistentCollection {#1961 …}
    +reports: Doctrine\ORM\PersistentCollection {#1959 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
    +badges: Doctrine\ORM\PersistentCollection {#2436 …}
    +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 {#1858
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\EntriesCrossComponent {#4649
  +entry: App\Entity\Entry {#2412
    +user: Proxies\__CG__\App\Entity\User {#1978
      +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
      +cover: null
      +email: "db0@lemmy.dbzer0.com"
      +username: "@db0@lemmy.dbzer0.com"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: """
        Epicurean Revolutionary Libertarian Socialist\n
        \n
        I make [FOSS](https://github.com/db0) things:\n
        \n
        - [AI Horde](https://aihorde.net)\n
        - [Fediseer](https://fediseer.com)\n
        - [Pythörhead](https://github.com/db0/pythorhead)\n
        - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
        \n
        wiki-user: db0
        """
      +lastActive: DateTime @1729133551 {#1516
        date: 2024-10-17 04:52:31.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
      +entries: Doctrine\ORM\PersistentCollection {#1713 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
      +posts: Doctrine\ORM\PersistentCollection {#1738 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
      +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
      +follows: Doctrine\ORM\PersistentCollection {#1449 …}
      +followers: Doctrine\ORM\PersistentCollection {#1636 …}
      +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
      +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
      +reports: Doctrine\ORM\PersistentCollection {#1456 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
      +violations: Doctrine\ORM\PersistentCollection {#1700 …}
      +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
      +awards: Doctrine\ORM\PersistentCollection {#1440 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
      +categories: Doctrine\ORM\PersistentCollection {#1648 …}
      -id: 3194
      -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
      +apId: "db0@lemmy.dbzer0.com"
      +apProfileId: "https://lemmy.dbzer0.com/u/db0"
      +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
      +apDomain: "lemmy.dbzer0.com"
      +apPreferredUsername: "db0"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729136030 {#1518
        date: 2024-10-17 05:33:50.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1687056004 {#1519
        date: 2023-06-18 04:40:04.0 +02:00
      }
      +__isInitialized__: true
       …2
    }
    +magazine: App\Entity\Magazine {#264
      +icon: Proxies\__CG__\App\Entity\Image {#245 …}
      +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 {#274
        date: 2024-10-22 09:16:09.0 +02:00
      }
      +markedForDeletionAt: null
      +tags: null
      +moderators: Doctrine\ORM\PersistentCollection {#236 …}
      +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
      +entries: Doctrine\ORM\PersistentCollection {#179 …}
      +posts: Doctrine\ORM\PersistentCollection {#137 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
      +bans: Doctrine\ORM\PersistentCollection {#116 …}
      +reports: Doctrine\ORM\PersistentCollection {#102 …}
      +badges: Doctrine\ORM\PersistentCollection {#80 …}
      +logs: Doctrine\ORM\PersistentCollection {#70 …}
      +awards: Doctrine\ORM\PersistentCollection {#1360 …}
      +categories: Doctrine\ORM\PersistentCollection {#1792 …}
      -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 {#268
        date: 2024-02-24 05:17:09.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697197339 {#270
        date: 2023-10-13 13:42:19.0 +02:00
      }
    }
    +image: Proxies\__CG__\App\Entity\Image {#1970 …}
    +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
    +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 {#2418
      date: 2024-08-11 16:16:33.0 +02:00
    }
    +ip: null
    +adaAmount: 0
    +tags: null
    +mentions: null
    +comments: Doctrine\ORM\PersistentCollection {#1884 …}
    +votes: Doctrine\ORM\PersistentCollection {#1961 …}
    +reports: Doctrine\ORM\PersistentCollection {#1959 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
    +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
    +badges: Doctrine\ORM\PersistentCollection {#2436 …}
    +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 {#1858
      date: 2023-10-09 12:26:17.0 +02:00
    }
  }
  -repository: App\Repository\EntryRepository {#269 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -twig: Twig\Environment {#1252 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
  -security: Symfony\Bundle\SecurityBundle\Security {#1101 …}
}
editor_toolbar App\Twig\Components\EditorToolbarComponent 16.0 MiB 0.56 ms
Input props
[
  "id" => "entry_comment_68e1cc943a4862.49289175_body"
]
Attributes
[]
Component
App\Twig\Components\EditorToolbarComponent {#4774
  +id: "entry_comment_68e1cc943a4862.49289175_body"
}
entry_comment App\Twig\Components\EntryCommentComponent 16.0 MiB 73.17 ms
Input props
[
  "comment" => App\Entity\EntryComment {#4975
    +user: App\Entity\User {#4923
      +avatar: null
      +cover: null
      +email: "JokeDeity@lemm.ee"
      +username: "@JokeDeity@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728589901 {#4983
        date: 2024-10-10 21:51:41.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4924 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4927 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4920 …}
      +entries: Doctrine\ORM\PersistentCollection {#4917 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4915 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4912 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#4910 …}
      +posts: Doctrine\ORM\PersistentCollection {#4908 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#4905 …}
      +postComments: Doctrine\ORM\PersistentCollection {#4903 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#4901 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#4898 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#4896 …}
      +follows: Doctrine\ORM\PersistentCollection {#4894 …}
      +followers: Doctrine\ORM\PersistentCollection {#5036 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5029 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5019 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5008 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#4981 …}
      +reports: Doctrine\ORM\PersistentCollection {#5039 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5035 …}
      +violations: Doctrine\ORM\PersistentCollection {#5033 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5032 …}
      +awards: Doctrine\ORM\PersistentCollection {#5031 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5021 …}
      +categories: Doctrine\ORM\PersistentCollection {#5024 …}
      -id: 31794
      -password: "$2y$13$mewbGeYAyYeBnSNToDGd7uRgD0LcdHeljawG0XIMuk.zjlFqGv4L2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5022 …}
      +apId: "JokeDeity@lemm.ee"
      +apProfileId: "https://lemm.ee/u/JokeDeity"
      +apPublicUrl: "https://lemm.ee/u/JokeDeity"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "JokeDeity"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1728951481 {#4893
        date: 2024-10-15 02:18:01.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1689868192 {#4977
        date: 2023-07-20 17:49:52.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#4889
      date: 2023-10-10 22:25:40.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#4973 …}
    +nested: Doctrine\ORM\PersistentCollection {#4971 …}
    +votes: Doctrine\ORM\PersistentCollection {#4969 …}
    +reports: Doctrine\ORM\PersistentCollection {#4967 …}
    +favourites: Doctrine\ORM\PersistentCollection {#4935 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4939 …}
    -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 {#4925
      date: 2023-10-10 22:25:40.0 +02:00
    }
  }
  "showNested" => true
  "dateAsUrl" => false
  "showMagazineName" => false
  "showEntryTitle" => false
]
Attributes
[]
Component
App\Twig\Components\EntryCommentComponent {#5466
  +comment: App\Entity\EntryComment {#4975
    +user: App\Entity\User {#4923
      +avatar: null
      +cover: null
      +email: "JokeDeity@lemm.ee"
      +username: "@JokeDeity@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728589901 {#4983
        date: 2024-10-10 21:51:41.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4924 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4927 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4920 …}
      +entries: Doctrine\ORM\PersistentCollection {#4917 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4915 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4912 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#4910 …}
      +posts: Doctrine\ORM\PersistentCollection {#4908 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#4905 …}
      +postComments: Doctrine\ORM\PersistentCollection {#4903 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#4901 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#4898 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#4896 …}
      +follows: Doctrine\ORM\PersistentCollection {#4894 …}
      +followers: Doctrine\ORM\PersistentCollection {#5036 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5029 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5019 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5008 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#4981 …}
      +reports: Doctrine\ORM\PersistentCollection {#5039 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5035 …}
      +violations: Doctrine\ORM\PersistentCollection {#5033 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5032 …}
      +awards: Doctrine\ORM\PersistentCollection {#5031 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5021 …}
      +categories: Doctrine\ORM\PersistentCollection {#5024 …}
      -id: 31794
      -password: "$2y$13$mewbGeYAyYeBnSNToDGd7uRgD0LcdHeljawG0XIMuk.zjlFqGv4L2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5022 …}
      +apId: "JokeDeity@lemm.ee"
      +apProfileId: "https://lemm.ee/u/JokeDeity"
      +apPublicUrl: "https://lemm.ee/u/JokeDeity"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "JokeDeity"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1728951481 {#4893
        date: 2024-10-15 02:18:01.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1689868192 {#4977
        date: 2023-07-20 17:49:52.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#4889
      date: 2023-10-10 22:25:40.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#4973 …}
    +nested: Doctrine\ORM\PersistentCollection {#4971 …}
    +votes: Doctrine\ORM\PersistentCollection {#4969 …}
    +reports: Doctrine\ORM\PersistentCollection {#4967 …}
    +favourites: Doctrine\ORM\PersistentCollection {#4935 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4939 …}
    -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 {#4925
      date: 2023-10-10 22:25:40.0 +02:00
    }
  }
  +showMagazineName: false
  +showEntryTitle: false
  +showNested: true
  +level: 1
  +canSeeTrash: false
  +dateAsUrl: false
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
  -authorizationChecker: Symfony\Component\Security\Core\Authorization\AuthorizationChecker {#931 …}
}
user_inline App\Twig\Components\UserInlineComponent 16.0 MiB 0.15 ms
Input props
[
  "user" => App\Entity\User {#4923
    +avatar: null
    +cover: null
    +email: "JokeDeity@lemm.ee"
    +username: "@JokeDeity@lemm.ee"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1728589901 {#4983
      date: 2024-10-10 21:51:41.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: true
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: false
    +notifyOnNewEntryCommentReply: false
    +notifyOnNewPost: false
    +notifyOnNewPostReply: false
    +notifyOnNewPostCommentReply: false
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#4924 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4927 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#4920 …}
    +entries: Doctrine\ORM\PersistentCollection {#4917 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#4915 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#4912 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#4910 …}
    +posts: Doctrine\ORM\PersistentCollection {#4908 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#4905 …}
    +postComments: Doctrine\ORM\PersistentCollection {#4903 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#4901 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#4898 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#4896 …}
    +follows: Doctrine\ORM\PersistentCollection {#4894 …}
    +followers: Doctrine\ORM\PersistentCollection {#5036 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5029 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5019 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5008 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#4981 …}
    +reports: Doctrine\ORM\PersistentCollection {#5039 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5035 …}
    +violations: Doctrine\ORM\PersistentCollection {#5033 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5032 …}
    +awards: Doctrine\ORM\PersistentCollection {#5031 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5021 …}
    +categories: Doctrine\ORM\PersistentCollection {#5024 …}
    -id: 31794
    -password: "$2y$13$mewbGeYAyYeBnSNToDGd7uRgD0LcdHeljawG0XIMuk.zjlFqGv4L2"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5022 …}
    +apId: "JokeDeity@lemm.ee"
    +apProfileId: "https://lemm.ee/u/JokeDeity"
    +apPublicUrl: "https://lemm.ee/u/JokeDeity"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemm.ee/inbox"
    +apDomain: "lemm.ee"
    +apPreferredUsername: "JokeDeity"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1728951481 {#4893
      date: 2024-10-15 02:18:01.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1689868192 {#4977
      date: 2023-07-20 17:49:52.0 +02:00
    }
  }
  "showAvatar" => false
]
Attributes
[]
Component
App\Twig\Components\UserInlineComponent {#5527
  +user: App\Entity\User {#4923
    +avatar: null
    +cover: null
    +email: "JokeDeity@lemm.ee"
    +username: "@JokeDeity@lemm.ee"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1728589901 {#4983
      date: 2024-10-10 21:51:41.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: true
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: false
    +notifyOnNewEntryCommentReply: false
    +notifyOnNewPost: false
    +notifyOnNewPostReply: false
    +notifyOnNewPostCommentReply: false
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#4924 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4927 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#4920 …}
    +entries: Doctrine\ORM\PersistentCollection {#4917 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#4915 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#4912 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#4910 …}
    +posts: Doctrine\ORM\PersistentCollection {#4908 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#4905 …}
    +postComments: Doctrine\ORM\PersistentCollection {#4903 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#4901 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#4898 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#4896 …}
    +follows: Doctrine\ORM\PersistentCollection {#4894 …}
    +followers: Doctrine\ORM\PersistentCollection {#5036 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5029 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5019 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5008 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#4981 …}
    +reports: Doctrine\ORM\PersistentCollection {#5039 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5035 …}
    +violations: Doctrine\ORM\PersistentCollection {#5033 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5032 …}
    +awards: Doctrine\ORM\PersistentCollection {#5031 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5021 …}
    +categories: Doctrine\ORM\PersistentCollection {#5024 …}
    -id: 31794
    -password: "$2y$13$mewbGeYAyYeBnSNToDGd7uRgD0LcdHeljawG0XIMuk.zjlFqGv4L2"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5022 …}
    +apId: "JokeDeity@lemm.ee"
    +apProfileId: "https://lemm.ee/u/JokeDeity"
    +apPublicUrl: "https://lemm.ee/u/JokeDeity"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemm.ee/inbox"
    +apDomain: "lemm.ee"
    +apPreferredUsername: "JokeDeity"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1728951481 {#4893
      date: 2024-10-15 02:18:01.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1689868192 {#4977
      date: 2023-07-20 17:49:52.0 +02:00
    }
  }
  +showAvatar: false
}
date App\Twig\Components\DateComponent 16.0 MiB 0.14 ms
Input props
[
  "date" => DateTimeImmutable @1696969540 {#4925
    date: 2023-10-10 22:25:40.0 +02:00
  }
]
Attributes
[]
Component
App\Twig\Components\DateComponent {#5582
  +date: DateTimeImmutable @1696969540 {#4925
    date: 2023-10-10 22:25:40.0 +02:00
  }
}
date_edited App\Twig\Components\DateEditedComponent 16.0 MiB 0.09 ms
Input props
[
  "createdAt" => DateTimeImmutable @1696969540 {#4925
    date: 2023-10-10 22:25:40.0 +02:00
  }
  "editedAt" => null
]
Attributes
[]
Component
App\Twig\Components\DateEditedComponent {#5636
  +createdAt: DateTimeImmutable @1696969540 {#4925
    date: 2023-10-10 22:25:40.0 +02:00
  }
  +editedAt: null
}
user_avatar App\Twig\Components\UserAvatarComponent 16.0 MiB 0.20 ms
Input props
[
  "user" => App\Entity\User {#4923
    +avatar: null
    +cover: null
    +email: "JokeDeity@lemm.ee"
    +username: "@JokeDeity@lemm.ee"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1728589901 {#4983
      date: 2024-10-10 21:51:41.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: true
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: false
    +notifyOnNewEntryCommentReply: false
    +notifyOnNewPost: false
    +notifyOnNewPostReply: false
    +notifyOnNewPostCommentReply: false
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#4924 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4927 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#4920 …}
    +entries: Doctrine\ORM\PersistentCollection {#4917 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#4915 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#4912 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#4910 …}
    +posts: Doctrine\ORM\PersistentCollection {#4908 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#4905 …}
    +postComments: Doctrine\ORM\PersistentCollection {#4903 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#4901 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#4898 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#4896 …}
    +follows: Doctrine\ORM\PersistentCollection {#4894 …}
    +followers: Doctrine\ORM\PersistentCollection {#5036 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5029 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5019 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5008 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#4981 …}
    +reports: Doctrine\ORM\PersistentCollection {#5039 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5035 …}
    +violations: Doctrine\ORM\PersistentCollection {#5033 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5032 …}
    +awards: Doctrine\ORM\PersistentCollection {#5031 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5021 …}
    +categories: Doctrine\ORM\PersistentCollection {#5024 …}
    -id: 31794
    -password: "$2y$13$mewbGeYAyYeBnSNToDGd7uRgD0LcdHeljawG0XIMuk.zjlFqGv4L2"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5022 …}
    +apId: "JokeDeity@lemm.ee"
    +apProfileId: "https://lemm.ee/u/JokeDeity"
    +apPublicUrl: "https://lemm.ee/u/JokeDeity"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemm.ee/inbox"
    +apDomain: "lemm.ee"
    +apPreferredUsername: "JokeDeity"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1728951481 {#4893
      date: 2024-10-15 02:18:01.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1689868192 {#4977
      date: 2023-07-20 17:49:52.0 +02:00
    }
  }
  "width" => 40
  "height" => 40
  "asLink" => true
]
Attributes
[]
Component
App\Twig\Components\UserAvatarComponent {#5692
  +width: 40
  +height: 40
  +user: App\Entity\User {#4923
    +avatar: null
    +cover: null
    +email: "JokeDeity@lemm.ee"
    +username: "@JokeDeity@lemm.ee"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1728589901 {#4983
      date: 2024-10-10 21:51:41.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: true
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: false
    +notifyOnNewEntryCommentReply: false
    +notifyOnNewPost: false
    +notifyOnNewPostReply: false
    +notifyOnNewPostCommentReply: false
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#4924 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4927 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#4920 …}
    +entries: Doctrine\ORM\PersistentCollection {#4917 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#4915 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#4912 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#4910 …}
    +posts: Doctrine\ORM\PersistentCollection {#4908 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#4905 …}
    +postComments: Doctrine\ORM\PersistentCollection {#4903 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#4901 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#4898 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#4896 …}
    +follows: Doctrine\ORM\PersistentCollection {#4894 …}
    +followers: Doctrine\ORM\PersistentCollection {#5036 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5029 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5019 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5008 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#4981 …}
    +reports: Doctrine\ORM\PersistentCollection {#5039 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5035 …}
    +violations: Doctrine\ORM\PersistentCollection {#5033 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5032 …}
    +awards: Doctrine\ORM\PersistentCollection {#5031 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5021 …}
    +categories: Doctrine\ORM\PersistentCollection {#5024 …}
    -id: 31794
    -password: "$2y$13$mewbGeYAyYeBnSNToDGd7uRgD0LcdHeljawG0XIMuk.zjlFqGv4L2"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5022 …}
    +apId: "JokeDeity@lemm.ee"
    +apProfileId: "https://lemm.ee/u/JokeDeity"
    +apPublicUrl: "https://lemm.ee/u/JokeDeity"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemm.ee/inbox"
    +apDomain: "lemm.ee"
    +apPreferredUsername: "JokeDeity"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1728951481 {#4893
      date: 2024-10-15 02:18:01.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1689868192 {#4977
      date: 2023-07-20 17:49:52.0 +02:00
    }
  }
  +asLink: true
}
vote App\Twig\Components\VoteComponent 16.0 MiB 0.40 ms
Input props
[
  "subject" => App\Entity\EntryComment {#4975
    +user: App\Entity\User {#4923
      +avatar: null
      +cover: null
      +email: "JokeDeity@lemm.ee"
      +username: "@JokeDeity@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728589901 {#4983
        date: 2024-10-10 21:51:41.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4924 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4927 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4920 …}
      +entries: Doctrine\ORM\PersistentCollection {#4917 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4915 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4912 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#4910 …}
      +posts: Doctrine\ORM\PersistentCollection {#4908 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#4905 …}
      +postComments: Doctrine\ORM\PersistentCollection {#4903 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#4901 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#4898 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#4896 …}
      +follows: Doctrine\ORM\PersistentCollection {#4894 …}
      +followers: Doctrine\ORM\PersistentCollection {#5036 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5029 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5019 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5008 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#4981 …}
      +reports: Doctrine\ORM\PersistentCollection {#5039 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5035 …}
      +violations: Doctrine\ORM\PersistentCollection {#5033 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5032 …}
      +awards: Doctrine\ORM\PersistentCollection {#5031 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5021 …}
      +categories: Doctrine\ORM\PersistentCollection {#5024 …}
      -id: 31794
      -password: "$2y$13$mewbGeYAyYeBnSNToDGd7uRgD0LcdHeljawG0XIMuk.zjlFqGv4L2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5022 …}
      +apId: "JokeDeity@lemm.ee"
      +apProfileId: "https://lemm.ee/u/JokeDeity"
      +apPublicUrl: "https://lemm.ee/u/JokeDeity"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "JokeDeity"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1728951481 {#4893
        date: 2024-10-15 02:18:01.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1689868192 {#4977
        date: 2023-07-20 17:49:52.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#4889
      date: 2023-10-10 22:25:40.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#4973 …}
    +nested: Doctrine\ORM\PersistentCollection {#4971 …}
    +votes: Doctrine\ORM\PersistentCollection {#4969 …}
    +reports: Doctrine\ORM\PersistentCollection {#4967 …}
    +favourites: Doctrine\ORM\PersistentCollection {#4935 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4939 …}
    -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 {#4925
      date: 2023-10-10 22:25:40.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\VoteComponent {#5775
  +subject: App\Entity\EntryComment {#4975
    +user: App\Entity\User {#4923
      +avatar: null
      +cover: null
      +email: "JokeDeity@lemm.ee"
      +username: "@JokeDeity@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728589901 {#4983
        date: 2024-10-10 21:51:41.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4924 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4927 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4920 …}
      +entries: Doctrine\ORM\PersistentCollection {#4917 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4915 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4912 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#4910 …}
      +posts: Doctrine\ORM\PersistentCollection {#4908 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#4905 …}
      +postComments: Doctrine\ORM\PersistentCollection {#4903 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#4901 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#4898 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#4896 …}
      +follows: Doctrine\ORM\PersistentCollection {#4894 …}
      +followers: Doctrine\ORM\PersistentCollection {#5036 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5029 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5019 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5008 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#4981 …}
      +reports: Doctrine\ORM\PersistentCollection {#5039 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5035 …}
      +violations: Doctrine\ORM\PersistentCollection {#5033 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5032 …}
      +awards: Doctrine\ORM\PersistentCollection {#5031 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5021 …}
      +categories: Doctrine\ORM\PersistentCollection {#5024 …}
      -id: 31794
      -password: "$2y$13$mewbGeYAyYeBnSNToDGd7uRgD0LcdHeljawG0XIMuk.zjlFqGv4L2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5022 …}
      +apId: "JokeDeity@lemm.ee"
      +apProfileId: "https://lemm.ee/u/JokeDeity"
      +apPublicUrl: "https://lemm.ee/u/JokeDeity"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "JokeDeity"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1728951481 {#4893
        date: 2024-10-15 02:18:01.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1689868192 {#4977
        date: 2023-07-20 17:49:52.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#4889
      date: 2023-10-10 22:25:40.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#4973 …}
    +nested: Doctrine\ORM\PersistentCollection {#4971 …}
    +votes: Doctrine\ORM\PersistentCollection {#4969 …}
    +reports: Doctrine\ORM\PersistentCollection {#4967 …}
    +favourites: Doctrine\ORM\PersistentCollection {#4935 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4939 …}
    -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 {#4925
      date: 2023-10-10 22:25:40.0 +02:00
    }
  }
  +formDest: "entry_comment"
  +showDownvote: true
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
boost App\Twig\Components\BoostComponent 16.0 MiB 0.84 ms
Input props
[
  "subject" => App\Entity\EntryComment {#4975
    +user: App\Entity\User {#4923
      +avatar: null
      +cover: null
      +email: "JokeDeity@lemm.ee"
      +username: "@JokeDeity@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728589901 {#4983
        date: 2024-10-10 21:51:41.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4924 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4927 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4920 …}
      +entries: Doctrine\ORM\PersistentCollection {#4917 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4915 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4912 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#4910 …}
      +posts: Doctrine\ORM\PersistentCollection {#4908 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#4905 …}
      +postComments: Doctrine\ORM\PersistentCollection {#4903 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#4901 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#4898 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#4896 …}
      +follows: Doctrine\ORM\PersistentCollection {#4894 …}
      +followers: Doctrine\ORM\PersistentCollection {#5036 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5029 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5019 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5008 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#4981 …}
      +reports: Doctrine\ORM\PersistentCollection {#5039 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5035 …}
      +violations: Doctrine\ORM\PersistentCollection {#5033 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5032 …}
      +awards: Doctrine\ORM\PersistentCollection {#5031 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5021 …}
      +categories: Doctrine\ORM\PersistentCollection {#5024 …}
      -id: 31794
      -password: "$2y$13$mewbGeYAyYeBnSNToDGd7uRgD0LcdHeljawG0XIMuk.zjlFqGv4L2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5022 …}
      +apId: "JokeDeity@lemm.ee"
      +apProfileId: "https://lemm.ee/u/JokeDeity"
      +apPublicUrl: "https://lemm.ee/u/JokeDeity"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "JokeDeity"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1728951481 {#4893
        date: 2024-10-15 02:18:01.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1689868192 {#4977
        date: 2023-07-20 17:49:52.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#4889
      date: 2023-10-10 22:25:40.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#4973 …}
    +nested: Doctrine\ORM\PersistentCollection {#4971 …}
    +votes: Doctrine\ORM\PersistentCollection {#4969 …}
    +reports: Doctrine\ORM\PersistentCollection {#4967 …}
    +favourites: Doctrine\ORM\PersistentCollection {#4935 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4939 …}
    -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 {#4925
      date: 2023-10-10 22:25:40.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\BoostComponent {#5832
  +formDest: "entry_comment"
  +subject: App\Entity\EntryComment {#4975
    +user: App\Entity\User {#4923
      +avatar: null
      +cover: null
      +email: "JokeDeity@lemm.ee"
      +username: "@JokeDeity@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728589901 {#4983
        date: 2024-10-10 21:51:41.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4924 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4927 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4920 …}
      +entries: Doctrine\ORM\PersistentCollection {#4917 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4915 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4912 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#4910 …}
      +posts: Doctrine\ORM\PersistentCollection {#4908 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#4905 …}
      +postComments: Doctrine\ORM\PersistentCollection {#4903 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#4901 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#4898 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#4896 …}
      +follows: Doctrine\ORM\PersistentCollection {#4894 …}
      +followers: Doctrine\ORM\PersistentCollection {#5036 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5029 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5019 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5008 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#4981 …}
      +reports: Doctrine\ORM\PersistentCollection {#5039 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5035 …}
      +violations: Doctrine\ORM\PersistentCollection {#5033 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5032 …}
      +awards: Doctrine\ORM\PersistentCollection {#5031 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5021 …}
      +categories: Doctrine\ORM\PersistentCollection {#5024 …}
      -id: 31794
      -password: "$2y$13$mewbGeYAyYeBnSNToDGd7uRgD0LcdHeljawG0XIMuk.zjlFqGv4L2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5022 …}
      +apId: "JokeDeity@lemm.ee"
      +apProfileId: "https://lemm.ee/u/JokeDeity"
      +apPublicUrl: "https://lemm.ee/u/JokeDeity"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "JokeDeity"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1728951481 {#4893
        date: 2024-10-15 02:18:01.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1689868192 {#4977
        date: 2023-07-20 17:49:52.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#4889
      date: 2023-10-10 22:25:40.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#4973 …}
    +nested: Doctrine\ORM\PersistentCollection {#4971 …}
    +votes: Doctrine\ORM\PersistentCollection {#4969 …}
    +reports: Doctrine\ORM\PersistentCollection {#4967 …}
    +favourites: Doctrine\ORM\PersistentCollection {#4935 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4939 …}
    -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 {#4925
      date: 2023-10-10 22:25:40.0 +02:00
    }
  }
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
entry_comments_nested App\Twig\Components\EntryCommentsNestedComponent 16.0 MiB 62.58 ms
Input props
[
  "comment" => App\Entity\EntryComment {#4975
    +user: App\Entity\User {#4923
      +avatar: null
      +cover: null
      +email: "JokeDeity@lemm.ee"
      +username: "@JokeDeity@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728589901 {#4983
        date: 2024-10-10 21:51:41.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4924 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4927 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4920 …}
      +entries: Doctrine\ORM\PersistentCollection {#4917 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4915 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4912 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#4910 …}
      +posts: Doctrine\ORM\PersistentCollection {#4908 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#4905 …}
      +postComments: Doctrine\ORM\PersistentCollection {#4903 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#4901 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#4898 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#4896 …}
      +follows: Doctrine\ORM\PersistentCollection {#4894 …}
      +followers: Doctrine\ORM\PersistentCollection {#5036 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5029 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5019 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5008 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#4981 …}
      +reports: Doctrine\ORM\PersistentCollection {#5039 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5035 …}
      +violations: Doctrine\ORM\PersistentCollection {#5033 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5032 …}
      +awards: Doctrine\ORM\PersistentCollection {#5031 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5021 …}
      +categories: Doctrine\ORM\PersistentCollection {#5024 …}
      -id: 31794
      -password: "$2y$13$mewbGeYAyYeBnSNToDGd7uRgD0LcdHeljawG0XIMuk.zjlFqGv4L2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5022 …}
      +apId: "JokeDeity@lemm.ee"
      +apProfileId: "https://lemm.ee/u/JokeDeity"
      +apPublicUrl: "https://lemm.ee/u/JokeDeity"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "JokeDeity"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1728951481 {#4893
        date: 2024-10-15 02:18:01.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1689868192 {#4977
        date: 2023-07-20 17:49:52.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#4889
      date: 2023-10-10 22:25:40.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#4973 …}
    +nested: Doctrine\ORM\PersistentCollection {#4971 …}
    +votes: Doctrine\ORM\PersistentCollection {#4969 …}
    +reports: Doctrine\ORM\PersistentCollection {#4967 …}
    +favourites: Doctrine\ORM\PersistentCollection {#4935 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4939 …}
    -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 {#4925
      date: 2023-10-10 22:25:40.0 +02:00
    }
  }
  "level" => 1
  "showNested" => true
  "view" => "tree"
]
Attributes
[
  "showNested" => true
]
Component
App\Twig\Components\EntryCommentsNestedComponent {#6077
  +comment: App\Entity\EntryComment {#4975
    +user: App\Entity\User {#4923
      +avatar: null
      +cover: null
      +email: "JokeDeity@lemm.ee"
      +username: "@JokeDeity@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728589901 {#4983
        date: 2024-10-10 21:51:41.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: true
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: false
      +notifyOnNewEntryCommentReply: false
      +notifyOnNewPost: false
      +notifyOnNewPostReply: false
      +notifyOnNewPostCommentReply: false
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4924 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4927 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4920 …}
      +entries: Doctrine\ORM\PersistentCollection {#4917 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4915 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4912 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#4910 …}
      +posts: Doctrine\ORM\PersistentCollection {#4908 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#4905 …}
      +postComments: Doctrine\ORM\PersistentCollection {#4903 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#4901 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#4898 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#4896 …}
      +follows: Doctrine\ORM\PersistentCollection {#4894 …}
      +followers: Doctrine\ORM\PersistentCollection {#5036 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5029 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5019 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5008 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#4981 …}
      +reports: Doctrine\ORM\PersistentCollection {#5039 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5035 …}
      +violations: Doctrine\ORM\PersistentCollection {#5033 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5032 …}
      +awards: Doctrine\ORM\PersistentCollection {#5031 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5021 …}
      +categories: Doctrine\ORM\PersistentCollection {#5024 …}
      -id: 31794
      -password: "$2y$13$mewbGeYAyYeBnSNToDGd7uRgD0LcdHeljawG0XIMuk.zjlFqGv4L2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5022 …}
      +apId: "JokeDeity@lemm.ee"
      +apProfileId: "https://lemm.ee/u/JokeDeity"
      +apPublicUrl: "https://lemm.ee/u/JokeDeity"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "JokeDeity"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1728951481 {#4893
        date: 2024-10-15 02:18:01.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1689868192 {#4977
        date: 2023-07-20 17:49:52.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#4889
      date: 2023-10-10 22:25:40.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#4973 …}
    +nested: Doctrine\ORM\PersistentCollection {#4971 …}
    +votes: Doctrine\ORM\PersistentCollection {#4969 …}
    +reports: Doctrine\ORM\PersistentCollection {#4967 …}
    +favourites: Doctrine\ORM\PersistentCollection {#4935 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4939 …}
    -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 {#4925
      date: 2023-10-10 22:25:40.0 +02:00
    }
  }
  +nestedComments: []
  +level: 1
  +view: "tree"
  -entryCommentRepository: App\Repository\EntryCommentRepository {#555 …}
  -twig: Twig\Environment {#1252 …}
  -security: Symfony\Bundle\SecurityBundle\Security {#1101 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
}
entry_comment App\Twig\Components\EntryCommentComponent 16.0 MiB 20.03 ms
Input props
[
  "comment" => App\Entity\EntryComment {#5013
    +user: App\Entity\User {#4996
      +avatar: null
      +cover: null
      +email: "spacecowboy@sh.itjust.works"
      +username: "@spacecowboy@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727981282 {#5017
        date: 2024-10-03 20:48:02.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4995 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4993 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4991 …}
      +entries: Doctrine\ORM\PersistentCollection {#4989 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4987 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4985 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5044 …}
      +posts: Doctrine\ORM\PersistentCollection {#5045 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5047 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5049 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5051 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5053 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5055 …}
      +follows: Doctrine\ORM\PersistentCollection {#5057 …}
      +followers: Doctrine\ORM\PersistentCollection {#5059 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5061 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5063 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5065 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5067 …}
      +reports: Doctrine\ORM\PersistentCollection {#5069 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5071 …}
      +violations: Doctrine\ORM\PersistentCollection {#5073 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5075 …}
      +awards: Doctrine\ORM\PersistentCollection {#5077 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5079 …}
      +categories: Doctrine\ORM\PersistentCollection {#5081 …}
      -id: 46916
      -password: "$2y$13$..l1Yybzt.p.kUTtuj9TduVXwnSInHKHc.zloCMaQTbGoGQ8Bsleq"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5083 …}
      +apId: "spacecowboy@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/spacecowboy"
      +apPublicUrl: "https://sh.itjust.works/u/spacecowboy"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "spacecowboy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729525627 {#5015
        date: 2024-10-21 17:47:07.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1695583164 {#5016
        date: 2023-09-24 21:19:24.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5020
      date: 2023-10-11 05:31:05.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5006 …}
    +nested: Doctrine\ORM\PersistentCollection {#5009 …}
    +votes: Doctrine\ORM\PersistentCollection {#5007 …}
    +reports: Doctrine\ORM\PersistentCollection {#5005 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5002 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4998 …}
    -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 {#5012
      date: 2023-10-11 05:31:05.0 +02:00
    }
  }
  "showNested" => true
  "dateAsUrl" => false
  "showMagazineName" => false
  "showEntryTitle" => false
]
Attributes
[]
Component
App\Twig\Components\EntryCommentComponent {#6161
  +comment: App\Entity\EntryComment {#5013
    +user: App\Entity\User {#4996
      +avatar: null
      +cover: null
      +email: "spacecowboy@sh.itjust.works"
      +username: "@spacecowboy@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727981282 {#5017
        date: 2024-10-03 20:48:02.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4995 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4993 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4991 …}
      +entries: Doctrine\ORM\PersistentCollection {#4989 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4987 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4985 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5044 …}
      +posts: Doctrine\ORM\PersistentCollection {#5045 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5047 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5049 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5051 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5053 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5055 …}
      +follows: Doctrine\ORM\PersistentCollection {#5057 …}
      +followers: Doctrine\ORM\PersistentCollection {#5059 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5061 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5063 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5065 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5067 …}
      +reports: Doctrine\ORM\PersistentCollection {#5069 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5071 …}
      +violations: Doctrine\ORM\PersistentCollection {#5073 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5075 …}
      +awards: Doctrine\ORM\PersistentCollection {#5077 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5079 …}
      +categories: Doctrine\ORM\PersistentCollection {#5081 …}
      -id: 46916
      -password: "$2y$13$..l1Yybzt.p.kUTtuj9TduVXwnSInHKHc.zloCMaQTbGoGQ8Bsleq"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5083 …}
      +apId: "spacecowboy@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/spacecowboy"
      +apPublicUrl: "https://sh.itjust.works/u/spacecowboy"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "spacecowboy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729525627 {#5015
        date: 2024-10-21 17:47:07.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1695583164 {#5016
        date: 2023-09-24 21:19:24.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5020
      date: 2023-10-11 05:31:05.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5006 …}
    +nested: Doctrine\ORM\PersistentCollection {#5009 …}
    +votes: Doctrine\ORM\PersistentCollection {#5007 …}
    +reports: Doctrine\ORM\PersistentCollection {#5005 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5002 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4998 …}
    -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 {#5012
      date: 2023-10-11 05:31:05.0 +02:00
    }
  }
  +showMagazineName: false
  +showEntryTitle: false
  +showNested: true
  +level: 1
  +canSeeTrash: false
  +dateAsUrl: false
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
  -authorizationChecker: Symfony\Component\Security\Core\Authorization\AuthorizationChecker {#931 …}
}
user_inline App\Twig\Components\UserInlineComponent 16.0 MiB 0.17 ms
Input props
[
  "user" => App\Entity\User {#4996
    +avatar: null
    +cover: null
    +email: "spacecowboy@sh.itjust.works"
    +username: "@spacecowboy@sh.itjust.works"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1727981282 {#5017
      date: 2024-10-03 20:48:02.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#4995 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4993 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#4991 …}
    +entries: Doctrine\ORM\PersistentCollection {#4989 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#4987 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#4985 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5044 …}
    +posts: Doctrine\ORM\PersistentCollection {#5045 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5047 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5049 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5051 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5053 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5055 …}
    +follows: Doctrine\ORM\PersistentCollection {#5057 …}
    +followers: Doctrine\ORM\PersistentCollection {#5059 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5061 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5063 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5065 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5067 …}
    +reports: Doctrine\ORM\PersistentCollection {#5069 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5071 …}
    +violations: Doctrine\ORM\PersistentCollection {#5073 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5075 …}
    +awards: Doctrine\ORM\PersistentCollection {#5077 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5079 …}
    +categories: Doctrine\ORM\PersistentCollection {#5081 …}
    -id: 46916
    -password: "$2y$13$..l1Yybzt.p.kUTtuj9TduVXwnSInHKHc.zloCMaQTbGoGQ8Bsleq"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5083 …}
    +apId: "spacecowboy@sh.itjust.works"
    +apProfileId: "https://sh.itjust.works/u/spacecowboy"
    +apPublicUrl: "https://sh.itjust.works/u/spacecowboy"
    +apFollowersUrl: null
    +apInboxUrl: "https://sh.itjust.works/inbox"
    +apDomain: "sh.itjust.works"
    +apPreferredUsername: "spacecowboy"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729525627 {#5015
      date: 2024-10-21 17:47:07.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1695583164 {#5016
      date: 2023-09-24 21:19:24.0 +02:00
    }
  }
  "showAvatar" => false
]
Attributes
[]
Component
App\Twig\Components\UserInlineComponent {#6206
  +user: App\Entity\User {#4996
    +avatar: null
    +cover: null
    +email: "spacecowboy@sh.itjust.works"
    +username: "@spacecowboy@sh.itjust.works"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1727981282 {#5017
      date: 2024-10-03 20:48:02.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#4995 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4993 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#4991 …}
    +entries: Doctrine\ORM\PersistentCollection {#4989 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#4987 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#4985 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5044 …}
    +posts: Doctrine\ORM\PersistentCollection {#5045 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5047 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5049 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5051 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5053 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5055 …}
    +follows: Doctrine\ORM\PersistentCollection {#5057 …}
    +followers: Doctrine\ORM\PersistentCollection {#5059 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5061 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5063 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5065 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5067 …}
    +reports: Doctrine\ORM\PersistentCollection {#5069 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5071 …}
    +violations: Doctrine\ORM\PersistentCollection {#5073 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5075 …}
    +awards: Doctrine\ORM\PersistentCollection {#5077 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5079 …}
    +categories: Doctrine\ORM\PersistentCollection {#5081 …}
    -id: 46916
    -password: "$2y$13$..l1Yybzt.p.kUTtuj9TduVXwnSInHKHc.zloCMaQTbGoGQ8Bsleq"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5083 …}
    +apId: "spacecowboy@sh.itjust.works"
    +apProfileId: "https://sh.itjust.works/u/spacecowboy"
    +apPublicUrl: "https://sh.itjust.works/u/spacecowboy"
    +apFollowersUrl: null
    +apInboxUrl: "https://sh.itjust.works/inbox"
    +apDomain: "sh.itjust.works"
    +apPreferredUsername: "spacecowboy"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729525627 {#5015
      date: 2024-10-21 17:47:07.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1695583164 {#5016
      date: 2023-09-24 21:19:24.0 +02:00
    }
  }
  +showAvatar: false
}
date App\Twig\Components\DateComponent 16.0 MiB 0.15 ms
Input props
[
  "date" => DateTimeImmutable @1696995065 {#5012
    date: 2023-10-11 05:31:05.0 +02:00
  }
]
Attributes
[]
Component
App\Twig\Components\DateComponent {#6261
  +date: DateTimeImmutable @1696995065 {#5012
    date: 2023-10-11 05:31:05.0 +02:00
  }
}
date_edited App\Twig\Components\DateEditedComponent 16.0 MiB 0.09 ms
Input props
[
  "createdAt" => DateTimeImmutable @1696995065 {#5012
    date: 2023-10-11 05:31:05.0 +02:00
  }
  "editedAt" => null
]
Attributes
[]
Component
App\Twig\Components\DateEditedComponent {#6315
  +createdAt: DateTimeImmutable @1696995065 {#5012
    date: 2023-10-11 05:31:05.0 +02:00
  }
  +editedAt: null
}
user_avatar App\Twig\Components\UserAvatarComponent 16.0 MiB 0.14 ms
Input props
[
  "user" => App\Entity\User {#4996
    +avatar: null
    +cover: null
    +email: "spacecowboy@sh.itjust.works"
    +username: "@spacecowboy@sh.itjust.works"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1727981282 {#5017
      date: 2024-10-03 20:48:02.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#4995 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4993 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#4991 …}
    +entries: Doctrine\ORM\PersistentCollection {#4989 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#4987 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#4985 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5044 …}
    +posts: Doctrine\ORM\PersistentCollection {#5045 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5047 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5049 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5051 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5053 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5055 …}
    +follows: Doctrine\ORM\PersistentCollection {#5057 …}
    +followers: Doctrine\ORM\PersistentCollection {#5059 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5061 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5063 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5065 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5067 …}
    +reports: Doctrine\ORM\PersistentCollection {#5069 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5071 …}
    +violations: Doctrine\ORM\PersistentCollection {#5073 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5075 …}
    +awards: Doctrine\ORM\PersistentCollection {#5077 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5079 …}
    +categories: Doctrine\ORM\PersistentCollection {#5081 …}
    -id: 46916
    -password: "$2y$13$..l1Yybzt.p.kUTtuj9TduVXwnSInHKHc.zloCMaQTbGoGQ8Bsleq"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5083 …}
    +apId: "spacecowboy@sh.itjust.works"
    +apProfileId: "https://sh.itjust.works/u/spacecowboy"
    +apPublicUrl: "https://sh.itjust.works/u/spacecowboy"
    +apFollowersUrl: null
    +apInboxUrl: "https://sh.itjust.works/inbox"
    +apDomain: "sh.itjust.works"
    +apPreferredUsername: "spacecowboy"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729525627 {#5015
      date: 2024-10-21 17:47:07.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1695583164 {#5016
      date: 2023-09-24 21:19:24.0 +02:00
    }
  }
  "width" => 40
  "height" => 40
  "asLink" => true
]
Attributes
[]
Component
App\Twig\Components\UserAvatarComponent {#6369
  +width: 40
  +height: 40
  +user: App\Entity\User {#4996
    +avatar: null
    +cover: null
    +email: "spacecowboy@sh.itjust.works"
    +username: "@spacecowboy@sh.itjust.works"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1727981282 {#5017
      date: 2024-10-03 20:48:02.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#4995 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4993 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#4991 …}
    +entries: Doctrine\ORM\PersistentCollection {#4989 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#4987 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#4985 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5044 …}
    +posts: Doctrine\ORM\PersistentCollection {#5045 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5047 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5049 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5051 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5053 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5055 …}
    +follows: Doctrine\ORM\PersistentCollection {#5057 …}
    +followers: Doctrine\ORM\PersistentCollection {#5059 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5061 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5063 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5065 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5067 …}
    +reports: Doctrine\ORM\PersistentCollection {#5069 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5071 …}
    +violations: Doctrine\ORM\PersistentCollection {#5073 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5075 …}
    +awards: Doctrine\ORM\PersistentCollection {#5077 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5079 …}
    +categories: Doctrine\ORM\PersistentCollection {#5081 …}
    -id: 46916
    -password: "$2y$13$..l1Yybzt.p.kUTtuj9TduVXwnSInHKHc.zloCMaQTbGoGQ8Bsleq"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5083 …}
    +apId: "spacecowboy@sh.itjust.works"
    +apProfileId: "https://sh.itjust.works/u/spacecowboy"
    +apPublicUrl: "https://sh.itjust.works/u/spacecowboy"
    +apFollowersUrl: null
    +apInboxUrl: "https://sh.itjust.works/inbox"
    +apDomain: "sh.itjust.works"
    +apPreferredUsername: "spacecowboy"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729525627 {#5015
      date: 2024-10-21 17:47:07.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1695583164 {#5016
      date: 2023-09-24 21:19:24.0 +02:00
    }
  }
  +asLink: true
}
vote App\Twig\Components\VoteComponent 16.0 MiB 1.51 ms
Input props
[
  "subject" => App\Entity\EntryComment {#5013
    +user: App\Entity\User {#4996
      +avatar: null
      +cover: null
      +email: "spacecowboy@sh.itjust.works"
      +username: "@spacecowboy@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727981282 {#5017
        date: 2024-10-03 20:48:02.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4995 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4993 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4991 …}
      +entries: Doctrine\ORM\PersistentCollection {#4989 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4987 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4985 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5044 …}
      +posts: Doctrine\ORM\PersistentCollection {#5045 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5047 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5049 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5051 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5053 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5055 …}
      +follows: Doctrine\ORM\PersistentCollection {#5057 …}
      +followers: Doctrine\ORM\PersistentCollection {#5059 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5061 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5063 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5065 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5067 …}
      +reports: Doctrine\ORM\PersistentCollection {#5069 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5071 …}
      +violations: Doctrine\ORM\PersistentCollection {#5073 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5075 …}
      +awards: Doctrine\ORM\PersistentCollection {#5077 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5079 …}
      +categories: Doctrine\ORM\PersistentCollection {#5081 …}
      -id: 46916
      -password: "$2y$13$..l1Yybzt.p.kUTtuj9TduVXwnSInHKHc.zloCMaQTbGoGQ8Bsleq"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5083 …}
      +apId: "spacecowboy@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/spacecowboy"
      +apPublicUrl: "https://sh.itjust.works/u/spacecowboy"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "spacecowboy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729525627 {#5015
        date: 2024-10-21 17:47:07.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1695583164 {#5016
        date: 2023-09-24 21:19:24.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5020
      date: 2023-10-11 05:31:05.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5006 …}
    +nested: Doctrine\ORM\PersistentCollection {#5009 …}
    +votes: Doctrine\ORM\PersistentCollection {#5007 …}
    +reports: Doctrine\ORM\PersistentCollection {#5005 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5002 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4998 …}
    -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 {#5012
      date: 2023-10-11 05:31:05.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\VoteComponent {#6450
  +subject: App\Entity\EntryComment {#5013
    +user: App\Entity\User {#4996
      +avatar: null
      +cover: null
      +email: "spacecowboy@sh.itjust.works"
      +username: "@spacecowboy@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727981282 {#5017
        date: 2024-10-03 20:48:02.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4995 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4993 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4991 …}
      +entries: Doctrine\ORM\PersistentCollection {#4989 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4987 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4985 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5044 …}
      +posts: Doctrine\ORM\PersistentCollection {#5045 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5047 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5049 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5051 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5053 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5055 …}
      +follows: Doctrine\ORM\PersistentCollection {#5057 …}
      +followers: Doctrine\ORM\PersistentCollection {#5059 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5061 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5063 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5065 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5067 …}
      +reports: Doctrine\ORM\PersistentCollection {#5069 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5071 …}
      +violations: Doctrine\ORM\PersistentCollection {#5073 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5075 …}
      +awards: Doctrine\ORM\PersistentCollection {#5077 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5079 …}
      +categories: Doctrine\ORM\PersistentCollection {#5081 …}
      -id: 46916
      -password: "$2y$13$..l1Yybzt.p.kUTtuj9TduVXwnSInHKHc.zloCMaQTbGoGQ8Bsleq"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5083 …}
      +apId: "spacecowboy@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/spacecowboy"
      +apPublicUrl: "https://sh.itjust.works/u/spacecowboy"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "spacecowboy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729525627 {#5015
        date: 2024-10-21 17:47:07.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1695583164 {#5016
        date: 2023-09-24 21:19:24.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5020
      date: 2023-10-11 05:31:05.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5006 …}
    +nested: Doctrine\ORM\PersistentCollection {#5009 …}
    +votes: Doctrine\ORM\PersistentCollection {#5007 …}
    +reports: Doctrine\ORM\PersistentCollection {#5005 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5002 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4998 …}
    -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 {#5012
      date: 2023-10-11 05:31:05.0 +02:00
    }
  }
  +formDest: "entry_comment"
  +showDownvote: true
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
boost App\Twig\Components\BoostComponent 16.0 MiB 1.45 ms
Input props
[
  "subject" => App\Entity\EntryComment {#5013
    +user: App\Entity\User {#4996
      +avatar: null
      +cover: null
      +email: "spacecowboy@sh.itjust.works"
      +username: "@spacecowboy@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727981282 {#5017
        date: 2024-10-03 20:48:02.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4995 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4993 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4991 …}
      +entries: Doctrine\ORM\PersistentCollection {#4989 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4987 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4985 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5044 …}
      +posts: Doctrine\ORM\PersistentCollection {#5045 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5047 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5049 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5051 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5053 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5055 …}
      +follows: Doctrine\ORM\PersistentCollection {#5057 …}
      +followers: Doctrine\ORM\PersistentCollection {#5059 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5061 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5063 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5065 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5067 …}
      +reports: Doctrine\ORM\PersistentCollection {#5069 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5071 …}
      +violations: Doctrine\ORM\PersistentCollection {#5073 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5075 …}
      +awards: Doctrine\ORM\PersistentCollection {#5077 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5079 …}
      +categories: Doctrine\ORM\PersistentCollection {#5081 …}
      -id: 46916
      -password: "$2y$13$..l1Yybzt.p.kUTtuj9TduVXwnSInHKHc.zloCMaQTbGoGQ8Bsleq"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5083 …}
      +apId: "spacecowboy@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/spacecowboy"
      +apPublicUrl: "https://sh.itjust.works/u/spacecowboy"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "spacecowboy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729525627 {#5015
        date: 2024-10-21 17:47:07.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1695583164 {#5016
        date: 2023-09-24 21:19:24.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5020
      date: 2023-10-11 05:31:05.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5006 …}
    +nested: Doctrine\ORM\PersistentCollection {#5009 …}
    +votes: Doctrine\ORM\PersistentCollection {#5007 …}
    +reports: Doctrine\ORM\PersistentCollection {#5005 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5002 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4998 …}
    -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 {#5012
      date: 2023-10-11 05:31:05.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\BoostComponent {#6507
  +formDest: "entry_comment"
  +subject: App\Entity\EntryComment {#5013
    +user: App\Entity\User {#4996
      +avatar: null
      +cover: null
      +email: "spacecowboy@sh.itjust.works"
      +username: "@spacecowboy@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727981282 {#5017
        date: 2024-10-03 20:48:02.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4995 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4993 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4991 …}
      +entries: Doctrine\ORM\PersistentCollection {#4989 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4987 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4985 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5044 …}
      +posts: Doctrine\ORM\PersistentCollection {#5045 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5047 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5049 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5051 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5053 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5055 …}
      +follows: Doctrine\ORM\PersistentCollection {#5057 …}
      +followers: Doctrine\ORM\PersistentCollection {#5059 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5061 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5063 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5065 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5067 …}
      +reports: Doctrine\ORM\PersistentCollection {#5069 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5071 …}
      +violations: Doctrine\ORM\PersistentCollection {#5073 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5075 …}
      +awards: Doctrine\ORM\PersistentCollection {#5077 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5079 …}
      +categories: Doctrine\ORM\PersistentCollection {#5081 …}
      -id: 46916
      -password: "$2y$13$..l1Yybzt.p.kUTtuj9TduVXwnSInHKHc.zloCMaQTbGoGQ8Bsleq"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5083 …}
      +apId: "spacecowboy@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/spacecowboy"
      +apPublicUrl: "https://sh.itjust.works/u/spacecowboy"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "spacecowboy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729525627 {#5015
        date: 2024-10-21 17:47:07.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1695583164 {#5016
        date: 2023-09-24 21:19:24.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5020
      date: 2023-10-11 05:31:05.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5006 …}
    +nested: Doctrine\ORM\PersistentCollection {#5009 …}
    +votes: Doctrine\ORM\PersistentCollection {#5007 …}
    +reports: Doctrine\ORM\PersistentCollection {#5005 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5002 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4998 …}
    -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 {#5012
      date: 2023-10-11 05:31:05.0 +02:00
    }
  }
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
entry_comments_nested App\Twig\Components\EntryCommentsNestedComponent 16.0 MiB 8.97 ms
Input props
[
  "comment" => App\Entity\EntryComment {#5013
    +user: App\Entity\User {#4996
      +avatar: null
      +cover: null
      +email: "spacecowboy@sh.itjust.works"
      +username: "@spacecowboy@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727981282 {#5017
        date: 2024-10-03 20:48:02.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4995 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4993 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4991 …}
      +entries: Doctrine\ORM\PersistentCollection {#4989 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4987 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4985 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5044 …}
      +posts: Doctrine\ORM\PersistentCollection {#5045 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5047 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5049 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5051 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5053 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5055 …}
      +follows: Doctrine\ORM\PersistentCollection {#5057 …}
      +followers: Doctrine\ORM\PersistentCollection {#5059 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5061 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5063 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5065 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5067 …}
      +reports: Doctrine\ORM\PersistentCollection {#5069 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5071 …}
      +violations: Doctrine\ORM\PersistentCollection {#5073 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5075 …}
      +awards: Doctrine\ORM\PersistentCollection {#5077 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5079 …}
      +categories: Doctrine\ORM\PersistentCollection {#5081 …}
      -id: 46916
      -password: "$2y$13$..l1Yybzt.p.kUTtuj9TduVXwnSInHKHc.zloCMaQTbGoGQ8Bsleq"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5083 …}
      +apId: "spacecowboy@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/spacecowboy"
      +apPublicUrl: "https://sh.itjust.works/u/spacecowboy"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "spacecowboy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729525627 {#5015
        date: 2024-10-21 17:47:07.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1695583164 {#5016
        date: 2023-09-24 21:19:24.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5020
      date: 2023-10-11 05:31:05.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5006 …}
    +nested: Doctrine\ORM\PersistentCollection {#5009 …}
    +votes: Doctrine\ORM\PersistentCollection {#5007 …}
    +reports: Doctrine\ORM\PersistentCollection {#5005 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5002 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4998 …}
    -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 {#5012
      date: 2023-10-11 05:31:05.0 +02:00
    }
  }
  "level" => 1
  "showNested" => true
  "view" => "tree"
]
Attributes
[
  "showNested" => true
]
Component
App\Twig\Components\EntryCommentsNestedComponent {#6747
  +comment: App\Entity\EntryComment {#5013
    +user: App\Entity\User {#4996
      +avatar: null
      +cover: null
      +email: "spacecowboy@sh.itjust.works"
      +username: "@spacecowboy@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727981282 {#5017
        date: 2024-10-03 20:48:02.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#4995 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#4993 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#4991 …}
      +entries: Doctrine\ORM\PersistentCollection {#4989 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#4987 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#4985 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5044 …}
      +posts: Doctrine\ORM\PersistentCollection {#5045 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5047 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5049 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5051 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5053 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5055 …}
      +follows: Doctrine\ORM\PersistentCollection {#5057 …}
      +followers: Doctrine\ORM\PersistentCollection {#5059 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5061 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5063 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5065 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5067 …}
      +reports: Doctrine\ORM\PersistentCollection {#5069 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5071 …}
      +violations: Doctrine\ORM\PersistentCollection {#5073 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5075 …}
      +awards: Doctrine\ORM\PersistentCollection {#5077 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5079 …}
      +categories: Doctrine\ORM\PersistentCollection {#5081 …}
      -id: 46916
      -password: "$2y$13$..l1Yybzt.p.kUTtuj9TduVXwnSInHKHc.zloCMaQTbGoGQ8Bsleq"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5083 …}
      +apId: "spacecowboy@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/spacecowboy"
      +apPublicUrl: "https://sh.itjust.works/u/spacecowboy"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "spacecowboy"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729525627 {#5015
        date: 2024-10-21 17:47:07.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1695583164 {#5016
        date: 2023-09-24 21:19:24.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5020
      date: 2023-10-11 05:31:05.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5006 …}
    +nested: Doctrine\ORM\PersistentCollection {#5009 …}
    +votes: Doctrine\ORM\PersistentCollection {#5007 …}
    +reports: Doctrine\ORM\PersistentCollection {#5005 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5002 …}
    +notifications: Doctrine\ORM\PersistentCollection {#4998 …}
    -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 {#5012
      date: 2023-10-11 05:31:05.0 +02:00
    }
  }
  +nestedComments: []
  +level: 1
  +view: "tree"
  -entryCommentRepository: App\Repository\EntryCommentRepository {#555 …}
  -twig: Twig\Environment {#1252 …}
  -security: Symfony\Bundle\SecurityBundle\Security {#1101 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
}
entry_comment App\Twig\Components\EntryCommentComponent 16.0 MiB 21.75 ms
Input props
[
  "comment" => App\Entity\EntryComment {#5090
    +user: App\Entity\User {#5103
      +avatar: null
      +cover: null
      +email: "LWJanniesRCucks@lemm.ee"
      +username: "@LWJanniesRCucks@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728702888 {#5087
        date: 2024-10-12 05:14:48.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5104 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5106 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5108 …}
      +entries: Doctrine\ORM\PersistentCollection {#5110 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5112 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5114 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5116 …}
      +posts: Doctrine\ORM\PersistentCollection {#5118 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5120 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5122 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5124 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5126 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5128 …}
      +follows: Doctrine\ORM\PersistentCollection {#5130 …}
      +followers: Doctrine\ORM\PersistentCollection {#5132 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5134 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5136 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5138 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5140 …}
      +reports: Doctrine\ORM\PersistentCollection {#5142 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5144 …}
      +violations: Doctrine\ORM\PersistentCollection {#5146 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5148 …}
      +awards: Doctrine\ORM\PersistentCollection {#5150 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5152 …}
      +categories: Doctrine\ORM\PersistentCollection {#5154 …}
      -id: 86903
      -password: "$2y$13$nn/Majsx/Sb5cwpVVzjOr.0IW.OMV80cm8YisYIgocswHdGnaV9zO"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5156 …}
      +apId: "LWJanniesRCucks@lemm.ee"
      +apProfileId: "https://lemm.ee/u/LWJanniesRCucks"
      +apPublicUrl: "https://lemm.ee/u/LWJanniesRCucks"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "LWJanniesRCucks"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1706876299 {#5088
        date: 2024-02-02 13:18:19.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1706876299 {#5089
        date: 2024-02-02 13:18:19.0 +01:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "👍👍"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1697003883 {#5085
      date: 2023-10-11 07:58:03.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5091 …}
    +nested: Doctrine\ORM\PersistentCollection {#5093 …}
    +votes: Doctrine\ORM\PersistentCollection {#5095 …}
    +reports: Doctrine\ORM\PersistentCollection {#5097 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5099 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5101 …}
    -id: 245731
    -bodyTs: ""
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://lemm.ee/comment/4717886"
    +editedAt: null
    +createdAt: DateTimeImmutable @1697003883 {#5086
      date: 2023-10-11 07:58:03.0 +02:00
    }
  }
  "showNested" => true
  "dateAsUrl" => false
  "showMagazineName" => false
  "showEntryTitle" => false
]
Attributes
[]
Component
App\Twig\Components\EntryCommentComponent {#6817
  +comment: App\Entity\EntryComment {#5090
    +user: App\Entity\User {#5103
      +avatar: null
      +cover: null
      +email: "LWJanniesRCucks@lemm.ee"
      +username: "@LWJanniesRCucks@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728702888 {#5087
        date: 2024-10-12 05:14:48.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5104 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5106 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5108 …}
      +entries: Doctrine\ORM\PersistentCollection {#5110 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5112 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5114 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5116 …}
      +posts: Doctrine\ORM\PersistentCollection {#5118 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5120 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5122 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5124 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5126 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5128 …}
      +follows: Doctrine\ORM\PersistentCollection {#5130 …}
      +followers: Doctrine\ORM\PersistentCollection {#5132 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5134 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5136 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5138 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5140 …}
      +reports: Doctrine\ORM\PersistentCollection {#5142 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5144 …}
      +violations: Doctrine\ORM\PersistentCollection {#5146 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5148 …}
      +awards: Doctrine\ORM\PersistentCollection {#5150 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5152 …}
      +categories: Doctrine\ORM\PersistentCollection {#5154 …}
      -id: 86903
      -password: "$2y$13$nn/Majsx/Sb5cwpVVzjOr.0IW.OMV80cm8YisYIgocswHdGnaV9zO"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5156 …}
      +apId: "LWJanniesRCucks@lemm.ee"
      +apProfileId: "https://lemm.ee/u/LWJanniesRCucks"
      +apPublicUrl: "https://lemm.ee/u/LWJanniesRCucks"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "LWJanniesRCucks"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1706876299 {#5088
        date: 2024-02-02 13:18:19.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1706876299 {#5089
        date: 2024-02-02 13:18:19.0 +01:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "👍👍"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1697003883 {#5085
      date: 2023-10-11 07:58:03.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5091 …}
    +nested: Doctrine\ORM\PersistentCollection {#5093 …}
    +votes: Doctrine\ORM\PersistentCollection {#5095 …}
    +reports: Doctrine\ORM\PersistentCollection {#5097 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5099 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5101 …}
    -id: 245731
    -bodyTs: ""
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://lemm.ee/comment/4717886"
    +editedAt: null
    +createdAt: DateTimeImmutable @1697003883 {#5086
      date: 2023-10-11 07:58:03.0 +02:00
    }
  }
  +showMagazineName: false
  +showEntryTitle: false
  +showNested: true
  +level: 1
  +canSeeTrash: false
  +dateAsUrl: false
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
  -authorizationChecker: Symfony\Component\Security\Core\Authorization\AuthorizationChecker {#931 …}
}
user_inline App\Twig\Components\UserInlineComponent 16.0 MiB 0.20 ms
Input props
[
  "user" => App\Entity\User {#5103
    +avatar: null
    +cover: null
    +email: "LWJanniesRCucks@lemm.ee"
    +username: "@LWJanniesRCucks@lemm.ee"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1728702888 {#5087
      date: 2024-10-12 05:14:48.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5104 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5106 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5108 …}
    +entries: Doctrine\ORM\PersistentCollection {#5110 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5112 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5114 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5116 …}
    +posts: Doctrine\ORM\PersistentCollection {#5118 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5120 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5122 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5124 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5126 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5128 …}
    +follows: Doctrine\ORM\PersistentCollection {#5130 …}
    +followers: Doctrine\ORM\PersistentCollection {#5132 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5134 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5136 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5138 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5140 …}
    +reports: Doctrine\ORM\PersistentCollection {#5142 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5144 …}
    +violations: Doctrine\ORM\PersistentCollection {#5146 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5148 …}
    +awards: Doctrine\ORM\PersistentCollection {#5150 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5152 …}
    +categories: Doctrine\ORM\PersistentCollection {#5154 …}
    -id: 86903
    -password: "$2y$13$nn/Majsx/Sb5cwpVVzjOr.0IW.OMV80cm8YisYIgocswHdGnaV9zO"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5156 …}
    +apId: "LWJanniesRCucks@lemm.ee"
    +apProfileId: "https://lemm.ee/u/LWJanniesRCucks"
    +apPublicUrl: "https://lemm.ee/u/LWJanniesRCucks"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemm.ee/inbox"
    +apDomain: "lemm.ee"
    +apPreferredUsername: "LWJanniesRCucks"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1706876299 {#5088
      date: 2024-02-02 13:18:19.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1706876299 {#5089
      date: 2024-02-02 13:18:19.0 +01:00
    }
  }
  "showAvatar" => false
]
Attributes
[]
Component
App\Twig\Components\UserInlineComponent {#6862
  +user: App\Entity\User {#5103
    +avatar: null
    +cover: null
    +email: "LWJanniesRCucks@lemm.ee"
    +username: "@LWJanniesRCucks@lemm.ee"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1728702888 {#5087
      date: 2024-10-12 05:14:48.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5104 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5106 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5108 …}
    +entries: Doctrine\ORM\PersistentCollection {#5110 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5112 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5114 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5116 …}
    +posts: Doctrine\ORM\PersistentCollection {#5118 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5120 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5122 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5124 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5126 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5128 …}
    +follows: Doctrine\ORM\PersistentCollection {#5130 …}
    +followers: Doctrine\ORM\PersistentCollection {#5132 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5134 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5136 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5138 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5140 …}
    +reports: Doctrine\ORM\PersistentCollection {#5142 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5144 …}
    +violations: Doctrine\ORM\PersistentCollection {#5146 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5148 …}
    +awards: Doctrine\ORM\PersistentCollection {#5150 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5152 …}
    +categories: Doctrine\ORM\PersistentCollection {#5154 …}
    -id: 86903
    -password: "$2y$13$nn/Majsx/Sb5cwpVVzjOr.0IW.OMV80cm8YisYIgocswHdGnaV9zO"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5156 …}
    +apId: "LWJanniesRCucks@lemm.ee"
    +apProfileId: "https://lemm.ee/u/LWJanniesRCucks"
    +apPublicUrl: "https://lemm.ee/u/LWJanniesRCucks"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemm.ee/inbox"
    +apDomain: "lemm.ee"
    +apPreferredUsername: "LWJanniesRCucks"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1706876299 {#5088
      date: 2024-02-02 13:18:19.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1706876299 {#5089
      date: 2024-02-02 13:18:19.0 +01:00
    }
  }
  +showAvatar: false
}
date App\Twig\Components\DateComponent 16.0 MiB 0.18 ms
Input props
[
  "date" => DateTimeImmutable @1697003883 {#5086
    date: 2023-10-11 07:58:03.0 +02:00
  }
]
Attributes
[]
Component
App\Twig\Components\DateComponent {#6917
  +date: DateTimeImmutable @1697003883 {#5086
    date: 2023-10-11 07:58:03.0 +02:00
  }
}
date_edited App\Twig\Components\DateEditedComponent 16.0 MiB 0.12 ms
Input props
[
  "createdAt" => DateTimeImmutable @1697003883 {#5086
    date: 2023-10-11 07:58:03.0 +02:00
  }
  "editedAt" => null
]
Attributes
[]
Component
App\Twig\Components\DateEditedComponent {#6971
  +createdAt: DateTimeImmutable @1697003883 {#5086
    date: 2023-10-11 07:58:03.0 +02:00
  }
  +editedAt: null
}
user_avatar App\Twig\Components\UserAvatarComponent 16.0 MiB 0.18 ms
Input props
[
  "user" => App\Entity\User {#5103
    +avatar: null
    +cover: null
    +email: "LWJanniesRCucks@lemm.ee"
    +username: "@LWJanniesRCucks@lemm.ee"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1728702888 {#5087
      date: 2024-10-12 05:14:48.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5104 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5106 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5108 …}
    +entries: Doctrine\ORM\PersistentCollection {#5110 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5112 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5114 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5116 …}
    +posts: Doctrine\ORM\PersistentCollection {#5118 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5120 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5122 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5124 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5126 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5128 …}
    +follows: Doctrine\ORM\PersistentCollection {#5130 …}
    +followers: Doctrine\ORM\PersistentCollection {#5132 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5134 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5136 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5138 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5140 …}
    +reports: Doctrine\ORM\PersistentCollection {#5142 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5144 …}
    +violations: Doctrine\ORM\PersistentCollection {#5146 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5148 …}
    +awards: Doctrine\ORM\PersistentCollection {#5150 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5152 …}
    +categories: Doctrine\ORM\PersistentCollection {#5154 …}
    -id: 86903
    -password: "$2y$13$nn/Majsx/Sb5cwpVVzjOr.0IW.OMV80cm8YisYIgocswHdGnaV9zO"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5156 …}
    +apId: "LWJanniesRCucks@lemm.ee"
    +apProfileId: "https://lemm.ee/u/LWJanniesRCucks"
    +apPublicUrl: "https://lemm.ee/u/LWJanniesRCucks"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemm.ee/inbox"
    +apDomain: "lemm.ee"
    +apPreferredUsername: "LWJanniesRCucks"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1706876299 {#5088
      date: 2024-02-02 13:18:19.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1706876299 {#5089
      date: 2024-02-02 13:18:19.0 +01:00
    }
  }
  "width" => 40
  "height" => 40
  "asLink" => true
]
Attributes
[]
Component
App\Twig\Components\UserAvatarComponent {#7025
  +width: 40
  +height: 40
  +user: App\Entity\User {#5103
    +avatar: null
    +cover: null
    +email: "LWJanniesRCucks@lemm.ee"
    +username: "@LWJanniesRCucks@lemm.ee"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1728702888 {#5087
      date: 2024-10-12 05:14:48.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5104 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5106 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5108 …}
    +entries: Doctrine\ORM\PersistentCollection {#5110 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5112 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5114 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5116 …}
    +posts: Doctrine\ORM\PersistentCollection {#5118 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5120 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5122 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5124 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5126 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5128 …}
    +follows: Doctrine\ORM\PersistentCollection {#5130 …}
    +followers: Doctrine\ORM\PersistentCollection {#5132 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5134 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5136 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5138 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5140 …}
    +reports: Doctrine\ORM\PersistentCollection {#5142 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5144 …}
    +violations: Doctrine\ORM\PersistentCollection {#5146 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5148 …}
    +awards: Doctrine\ORM\PersistentCollection {#5150 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5152 …}
    +categories: Doctrine\ORM\PersistentCollection {#5154 …}
    -id: 86903
    -password: "$2y$13$nn/Majsx/Sb5cwpVVzjOr.0IW.OMV80cm8YisYIgocswHdGnaV9zO"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5156 …}
    +apId: "LWJanniesRCucks@lemm.ee"
    +apProfileId: "https://lemm.ee/u/LWJanniesRCucks"
    +apPublicUrl: "https://lemm.ee/u/LWJanniesRCucks"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemm.ee/inbox"
    +apDomain: "lemm.ee"
    +apPreferredUsername: "LWJanniesRCucks"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1706876299 {#5088
      date: 2024-02-02 13:18:19.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1706876299 {#5089
      date: 2024-02-02 13:18:19.0 +01:00
    }
  }
  +asLink: true
}
vote App\Twig\Components\VoteComponent 16.0 MiB 0.56 ms
Input props
[
  "subject" => App\Entity\EntryComment {#5090
    +user: App\Entity\User {#5103
      +avatar: null
      +cover: null
      +email: "LWJanniesRCucks@lemm.ee"
      +username: "@LWJanniesRCucks@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728702888 {#5087
        date: 2024-10-12 05:14:48.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5104 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5106 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5108 …}
      +entries: Doctrine\ORM\PersistentCollection {#5110 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5112 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5114 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5116 …}
      +posts: Doctrine\ORM\PersistentCollection {#5118 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5120 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5122 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5124 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5126 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5128 …}
      +follows: Doctrine\ORM\PersistentCollection {#5130 …}
      +followers: Doctrine\ORM\PersistentCollection {#5132 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5134 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5136 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5138 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5140 …}
      +reports: Doctrine\ORM\PersistentCollection {#5142 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5144 …}
      +violations: Doctrine\ORM\PersistentCollection {#5146 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5148 …}
      +awards: Doctrine\ORM\PersistentCollection {#5150 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5152 …}
      +categories: Doctrine\ORM\PersistentCollection {#5154 …}
      -id: 86903
      -password: "$2y$13$nn/Majsx/Sb5cwpVVzjOr.0IW.OMV80cm8YisYIgocswHdGnaV9zO"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5156 …}
      +apId: "LWJanniesRCucks@lemm.ee"
      +apProfileId: "https://lemm.ee/u/LWJanniesRCucks"
      +apPublicUrl: "https://lemm.ee/u/LWJanniesRCucks"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "LWJanniesRCucks"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1706876299 {#5088
        date: 2024-02-02 13:18:19.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1706876299 {#5089
        date: 2024-02-02 13:18:19.0 +01:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "👍👍"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1697003883 {#5085
      date: 2023-10-11 07:58:03.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5091 …}
    +nested: Doctrine\ORM\PersistentCollection {#5093 …}
    +votes: Doctrine\ORM\PersistentCollection {#5095 …}
    +reports: Doctrine\ORM\PersistentCollection {#5097 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5099 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5101 …}
    -id: 245731
    -bodyTs: ""
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://lemm.ee/comment/4717886"
    +editedAt: null
    +createdAt: DateTimeImmutable @1697003883 {#5086
      date: 2023-10-11 07:58:03.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\VoteComponent {#7094
  +subject: App\Entity\EntryComment {#5090
    +user: App\Entity\User {#5103
      +avatar: null
      +cover: null
      +email: "LWJanniesRCucks@lemm.ee"
      +username: "@LWJanniesRCucks@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728702888 {#5087
        date: 2024-10-12 05:14:48.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5104 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5106 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5108 …}
      +entries: Doctrine\ORM\PersistentCollection {#5110 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5112 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5114 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5116 …}
      +posts: Doctrine\ORM\PersistentCollection {#5118 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5120 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5122 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5124 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5126 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5128 …}
      +follows: Doctrine\ORM\PersistentCollection {#5130 …}
      +followers: Doctrine\ORM\PersistentCollection {#5132 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5134 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5136 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5138 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5140 …}
      +reports: Doctrine\ORM\PersistentCollection {#5142 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5144 …}
      +violations: Doctrine\ORM\PersistentCollection {#5146 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5148 …}
      +awards: Doctrine\ORM\PersistentCollection {#5150 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5152 …}
      +categories: Doctrine\ORM\PersistentCollection {#5154 …}
      -id: 86903
      -password: "$2y$13$nn/Majsx/Sb5cwpVVzjOr.0IW.OMV80cm8YisYIgocswHdGnaV9zO"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5156 …}
      +apId: "LWJanniesRCucks@lemm.ee"
      +apProfileId: "https://lemm.ee/u/LWJanniesRCucks"
      +apPublicUrl: "https://lemm.ee/u/LWJanniesRCucks"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "LWJanniesRCucks"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1706876299 {#5088
        date: 2024-02-02 13:18:19.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1706876299 {#5089
        date: 2024-02-02 13:18:19.0 +01:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "👍👍"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1697003883 {#5085
      date: 2023-10-11 07:58:03.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5091 …}
    +nested: Doctrine\ORM\PersistentCollection {#5093 …}
    +votes: Doctrine\ORM\PersistentCollection {#5095 …}
    +reports: Doctrine\ORM\PersistentCollection {#5097 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5099 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5101 …}
    -id: 245731
    -bodyTs: ""
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://lemm.ee/comment/4717886"
    +editedAt: null
    +createdAt: DateTimeImmutable @1697003883 {#5086
      date: 2023-10-11 07:58:03.0 +02:00
    }
  }
  +formDest: "entry_comment"
  +showDownvote: true
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
boost App\Twig\Components\BoostComponent 16.0 MiB 1.67 ms
Input props
[
  "subject" => App\Entity\EntryComment {#5090
    +user: App\Entity\User {#5103
      +avatar: null
      +cover: null
      +email: "LWJanniesRCucks@lemm.ee"
      +username: "@LWJanniesRCucks@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728702888 {#5087
        date: 2024-10-12 05:14:48.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5104 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5106 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5108 …}
      +entries: Doctrine\ORM\PersistentCollection {#5110 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5112 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5114 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5116 …}
      +posts: Doctrine\ORM\PersistentCollection {#5118 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5120 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5122 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5124 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5126 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5128 …}
      +follows: Doctrine\ORM\PersistentCollection {#5130 …}
      +followers: Doctrine\ORM\PersistentCollection {#5132 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5134 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5136 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5138 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5140 …}
      +reports: Doctrine\ORM\PersistentCollection {#5142 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5144 …}
      +violations: Doctrine\ORM\PersistentCollection {#5146 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5148 …}
      +awards: Doctrine\ORM\PersistentCollection {#5150 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5152 …}
      +categories: Doctrine\ORM\PersistentCollection {#5154 …}
      -id: 86903
      -password: "$2y$13$nn/Majsx/Sb5cwpVVzjOr.0IW.OMV80cm8YisYIgocswHdGnaV9zO"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5156 …}
      +apId: "LWJanniesRCucks@lemm.ee"
      +apProfileId: "https://lemm.ee/u/LWJanniesRCucks"
      +apPublicUrl: "https://lemm.ee/u/LWJanniesRCucks"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "LWJanniesRCucks"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1706876299 {#5088
        date: 2024-02-02 13:18:19.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1706876299 {#5089
        date: 2024-02-02 13:18:19.0 +01:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "👍👍"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1697003883 {#5085
      date: 2023-10-11 07:58:03.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5091 …}
    +nested: Doctrine\ORM\PersistentCollection {#5093 …}
    +votes: Doctrine\ORM\PersistentCollection {#5095 …}
    +reports: Doctrine\ORM\PersistentCollection {#5097 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5099 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5101 …}
    -id: 245731
    -bodyTs: ""
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://lemm.ee/comment/4717886"
    +editedAt: null
    +createdAt: DateTimeImmutable @1697003883 {#5086
      date: 2023-10-11 07:58:03.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\BoostComponent {#7151
  +formDest: "entry_comment"
  +subject: App\Entity\EntryComment {#5090
    +user: App\Entity\User {#5103
      +avatar: null
      +cover: null
      +email: "LWJanniesRCucks@lemm.ee"
      +username: "@LWJanniesRCucks@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728702888 {#5087
        date: 2024-10-12 05:14:48.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5104 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5106 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5108 …}
      +entries: Doctrine\ORM\PersistentCollection {#5110 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5112 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5114 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5116 …}
      +posts: Doctrine\ORM\PersistentCollection {#5118 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5120 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5122 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5124 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5126 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5128 …}
      +follows: Doctrine\ORM\PersistentCollection {#5130 …}
      +followers: Doctrine\ORM\PersistentCollection {#5132 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5134 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5136 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5138 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5140 …}
      +reports: Doctrine\ORM\PersistentCollection {#5142 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5144 …}
      +violations: Doctrine\ORM\PersistentCollection {#5146 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5148 …}
      +awards: Doctrine\ORM\PersistentCollection {#5150 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5152 …}
      +categories: Doctrine\ORM\PersistentCollection {#5154 …}
      -id: 86903
      -password: "$2y$13$nn/Majsx/Sb5cwpVVzjOr.0IW.OMV80cm8YisYIgocswHdGnaV9zO"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5156 …}
      +apId: "LWJanniesRCucks@lemm.ee"
      +apProfileId: "https://lemm.ee/u/LWJanniesRCucks"
      +apPublicUrl: "https://lemm.ee/u/LWJanniesRCucks"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "LWJanniesRCucks"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1706876299 {#5088
        date: 2024-02-02 13:18:19.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1706876299 {#5089
        date: 2024-02-02 13:18:19.0 +01:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "👍👍"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1697003883 {#5085
      date: 2023-10-11 07:58:03.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5091 …}
    +nested: Doctrine\ORM\PersistentCollection {#5093 …}
    +votes: Doctrine\ORM\PersistentCollection {#5095 …}
    +reports: Doctrine\ORM\PersistentCollection {#5097 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5099 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5101 …}
    -id: 245731
    -bodyTs: ""
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://lemm.ee/comment/4717886"
    +editedAt: null
    +createdAt: DateTimeImmutable @1697003883 {#5086
      date: 2023-10-11 07:58:03.0 +02:00
    }
  }
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
entry_comments_nested App\Twig\Components\EntryCommentsNestedComponent 16.0 MiB 1.34 ms
Input props
[
  "comment" => App\Entity\EntryComment {#5090
    +user: App\Entity\User {#5103
      +avatar: null
      +cover: null
      +email: "LWJanniesRCucks@lemm.ee"
      +username: "@LWJanniesRCucks@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728702888 {#5087
        date: 2024-10-12 05:14:48.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5104 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5106 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5108 …}
      +entries: Doctrine\ORM\PersistentCollection {#5110 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5112 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5114 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5116 …}
      +posts: Doctrine\ORM\PersistentCollection {#5118 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5120 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5122 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5124 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5126 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5128 …}
      +follows: Doctrine\ORM\PersistentCollection {#5130 …}
      +followers: Doctrine\ORM\PersistentCollection {#5132 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5134 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5136 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5138 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5140 …}
      +reports: Doctrine\ORM\PersistentCollection {#5142 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5144 …}
      +violations: Doctrine\ORM\PersistentCollection {#5146 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5148 …}
      +awards: Doctrine\ORM\PersistentCollection {#5150 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5152 …}
      +categories: Doctrine\ORM\PersistentCollection {#5154 …}
      -id: 86903
      -password: "$2y$13$nn/Majsx/Sb5cwpVVzjOr.0IW.OMV80cm8YisYIgocswHdGnaV9zO"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5156 …}
      +apId: "LWJanniesRCucks@lemm.ee"
      +apProfileId: "https://lemm.ee/u/LWJanniesRCucks"
      +apPublicUrl: "https://lemm.ee/u/LWJanniesRCucks"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "LWJanniesRCucks"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1706876299 {#5088
        date: 2024-02-02 13:18:19.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1706876299 {#5089
        date: 2024-02-02 13:18:19.0 +01:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "👍👍"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1697003883 {#5085
      date: 2023-10-11 07:58:03.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5091 …}
    +nested: Doctrine\ORM\PersistentCollection {#5093 …}
    +votes: Doctrine\ORM\PersistentCollection {#5095 …}
    +reports: Doctrine\ORM\PersistentCollection {#5097 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5099 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5101 …}
    -id: 245731
    -bodyTs: ""
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://lemm.ee/comment/4717886"
    +editedAt: null
    +createdAt: DateTimeImmutable @1697003883 {#5086
      date: 2023-10-11 07:58:03.0 +02:00
    }
  }
  "level" => 1
  "showNested" => true
  "view" => "tree"
]
Attributes
[
  "showNested" => true
]
Component
App\Twig\Components\EntryCommentsNestedComponent {#7391
  +comment: App\Entity\EntryComment {#5090
    +user: App\Entity\User {#5103
      +avatar: null
      +cover: null
      +email: "LWJanniesRCucks@lemm.ee"
      +username: "@LWJanniesRCucks@lemm.ee"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1728702888 {#5087
        date: 2024-10-12 05:14:48.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5104 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5106 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5108 …}
      +entries: Doctrine\ORM\PersistentCollection {#5110 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5112 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5114 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5116 …}
      +posts: Doctrine\ORM\PersistentCollection {#5118 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5120 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5122 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5124 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5126 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5128 …}
      +follows: Doctrine\ORM\PersistentCollection {#5130 …}
      +followers: Doctrine\ORM\PersistentCollection {#5132 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5134 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5136 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5138 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5140 …}
      +reports: Doctrine\ORM\PersistentCollection {#5142 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5144 …}
      +violations: Doctrine\ORM\PersistentCollection {#5146 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5148 …}
      +awards: Doctrine\ORM\PersistentCollection {#5150 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5152 …}
      +categories: Doctrine\ORM\PersistentCollection {#5154 …}
      -id: 86903
      -password: "$2y$13$nn/Majsx/Sb5cwpVVzjOr.0IW.OMV80cm8YisYIgocswHdGnaV9zO"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5156 …}
      +apId: "LWJanniesRCucks@lemm.ee"
      +apProfileId: "https://lemm.ee/u/LWJanniesRCucks"
      +apPublicUrl: "https://lemm.ee/u/LWJanniesRCucks"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemm.ee/inbox"
      +apDomain: "lemm.ee"
      +apPreferredUsername: "LWJanniesRCucks"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1706876299 {#5088
        date: 2024-02-02 13:18:19.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1706876299 {#5089
        date: 2024-02-02 13:18:19.0 +01:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "👍👍"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1697003883 {#5085
      date: 2023-10-11 07:58:03.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5091 …}
    +nested: Doctrine\ORM\PersistentCollection {#5093 …}
    +votes: Doctrine\ORM\PersistentCollection {#5095 …}
    +reports: Doctrine\ORM\PersistentCollection {#5097 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5099 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5101 …}
    -id: 245731
    -bodyTs: ""
    +ranking: 0
    +commentCount: 0
    +upVotes: 0
    +downVotes: 0
    +visibility: "visible             "
    +apId: "https://lemm.ee/comment/4717886"
    +editedAt: null
    +createdAt: DateTimeImmutable @1697003883 {#5086
      date: 2023-10-11 07:58:03.0 +02:00
    }
  }
  +nestedComments: []
  +level: 1
  +view: "tree"
  -entryCommentRepository: App\Repository\EntryCommentRepository {#555 …}
  -twig: Twig\Environment {#1252 …}
  -security: Symfony\Bundle\SecurityBundle\Security {#1101 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
}
entry_comment App\Twig\Components\EntryCommentComponent 16.0 MiB 41.13 ms
Input props
[
  "comment" => App\Entity\EntryComment {#5163
    +user: App\Entity\User {#5176
      +avatar: null
      +cover: null
      +email: "clericc@feddit.de"
      +username: "@clericc@feddit.de"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1702629020 {#5160
        date: 2023-12-15 09:30:20.0 +01:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5177 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5179 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5181 …}
      +entries: Doctrine\ORM\PersistentCollection {#5183 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5185 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5187 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5189 …}
      +posts: Doctrine\ORM\PersistentCollection {#5191 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5193 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5195 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5197 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5199 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5201 …}
      +follows: Doctrine\ORM\PersistentCollection {#5203 …}
      +followers: Doctrine\ORM\PersistentCollection {#5205 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5207 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5209 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5211 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5213 …}
      +reports: Doctrine\ORM\PersistentCollection {#5215 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5217 …}
      +violations: Doctrine\ORM\PersistentCollection {#5219 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5221 …}
      +awards: Doctrine\ORM\PersistentCollection {#5223 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5225 …}
      +categories: Doctrine\ORM\PersistentCollection {#5227 …}
      -id: 60124
      -password: "$2y$13$RQKabDqrzskBU83Ws8gZv.WqlVHje/7c4zbc2p2kJ2pJacr9OAEb2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5229 …}
      +apId: "clericc@feddit.de"
      +apProfileId: "https://feddit.de/u/clericc"
      +apPublicUrl: "https://feddit.de/u/clericc"
      +apFollowersUrl: null
      +apInboxUrl: "https://feddit.de/inbox"
      +apDomain: "feddit.de"
      +apPreferredUsername: "clericc"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1704860926 {#5161
        date: 2024-01-10 05:28:46.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697404535 {#5162
        date: 2023-10-15 23:15:35.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5158
      date: 2023-10-11 08:49:25.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5164 …}
    +nested: Doctrine\ORM\PersistentCollection {#5166 …}
    +votes: Doctrine\ORM\PersistentCollection {#5168 …}
    +reports: Doctrine\ORM\PersistentCollection {#5170 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5172 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5174 …}
    -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 {#5159
      date: 2023-10-11 08:49:25.0 +02:00
    }
  }
  "showNested" => true
  "dateAsUrl" => false
  "showMagazineName" => false
  "showEntryTitle" => false
]
Attributes
[]
Component
App\Twig\Components\EntryCommentComponent {#7461
  +comment: App\Entity\EntryComment {#5163
    +user: App\Entity\User {#5176
      +avatar: null
      +cover: null
      +email: "clericc@feddit.de"
      +username: "@clericc@feddit.de"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1702629020 {#5160
        date: 2023-12-15 09:30:20.0 +01:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5177 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5179 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5181 …}
      +entries: Doctrine\ORM\PersistentCollection {#5183 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5185 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5187 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5189 …}
      +posts: Doctrine\ORM\PersistentCollection {#5191 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5193 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5195 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5197 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5199 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5201 …}
      +follows: Doctrine\ORM\PersistentCollection {#5203 …}
      +followers: Doctrine\ORM\PersistentCollection {#5205 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5207 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5209 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5211 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5213 …}
      +reports: Doctrine\ORM\PersistentCollection {#5215 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5217 …}
      +violations: Doctrine\ORM\PersistentCollection {#5219 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5221 …}
      +awards: Doctrine\ORM\PersistentCollection {#5223 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5225 …}
      +categories: Doctrine\ORM\PersistentCollection {#5227 …}
      -id: 60124
      -password: "$2y$13$RQKabDqrzskBU83Ws8gZv.WqlVHje/7c4zbc2p2kJ2pJacr9OAEb2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5229 …}
      +apId: "clericc@feddit.de"
      +apProfileId: "https://feddit.de/u/clericc"
      +apPublicUrl: "https://feddit.de/u/clericc"
      +apFollowersUrl: null
      +apInboxUrl: "https://feddit.de/inbox"
      +apDomain: "feddit.de"
      +apPreferredUsername: "clericc"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1704860926 {#5161
        date: 2024-01-10 05:28:46.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697404535 {#5162
        date: 2023-10-15 23:15:35.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5158
      date: 2023-10-11 08:49:25.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5164 …}
    +nested: Doctrine\ORM\PersistentCollection {#5166 …}
    +votes: Doctrine\ORM\PersistentCollection {#5168 …}
    +reports: Doctrine\ORM\PersistentCollection {#5170 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5172 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5174 …}
    -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 {#5159
      date: 2023-10-11 08:49:25.0 +02:00
    }
  }
  +showMagazineName: false
  +showEntryTitle: false
  +showNested: true
  +level: 1
  +canSeeTrash: false
  +dateAsUrl: false
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
  -authorizationChecker: Symfony\Component\Security\Core\Authorization\AuthorizationChecker {#931 …}
}
user_inline App\Twig\Components\UserInlineComponent 16.0 MiB 0.19 ms
Input props
[
  "user" => App\Entity\User {#5176
    +avatar: null
    +cover: null
    +email: "clericc@feddit.de"
    +username: "@clericc@feddit.de"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1702629020 {#5160
      date: 2023-12-15 09:30:20.0 +01:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5177 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5179 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5181 …}
    +entries: Doctrine\ORM\PersistentCollection {#5183 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5185 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5187 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5189 …}
    +posts: Doctrine\ORM\PersistentCollection {#5191 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5193 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5195 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5197 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5199 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5201 …}
    +follows: Doctrine\ORM\PersistentCollection {#5203 …}
    +followers: Doctrine\ORM\PersistentCollection {#5205 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5207 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5209 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5211 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5213 …}
    +reports: Doctrine\ORM\PersistentCollection {#5215 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5217 …}
    +violations: Doctrine\ORM\PersistentCollection {#5219 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5221 …}
    +awards: Doctrine\ORM\PersistentCollection {#5223 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5225 …}
    +categories: Doctrine\ORM\PersistentCollection {#5227 …}
    -id: 60124
    -password: "$2y$13$RQKabDqrzskBU83Ws8gZv.WqlVHje/7c4zbc2p2kJ2pJacr9OAEb2"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5229 …}
    +apId: "clericc@feddit.de"
    +apProfileId: "https://feddit.de/u/clericc"
    +apPublicUrl: "https://feddit.de/u/clericc"
    +apFollowersUrl: null
    +apInboxUrl: "https://feddit.de/inbox"
    +apDomain: "feddit.de"
    +apPreferredUsername: "clericc"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1704860926 {#5161
      date: 2024-01-10 05:28:46.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697404535 {#5162
      date: 2023-10-15 23:15:35.0 +02:00
    }
  }
  "showAvatar" => false
]
Attributes
[]
Component
App\Twig\Components\UserInlineComponent {#7506
  +user: App\Entity\User {#5176
    +avatar: null
    +cover: null
    +email: "clericc@feddit.de"
    +username: "@clericc@feddit.de"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1702629020 {#5160
      date: 2023-12-15 09:30:20.0 +01:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5177 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5179 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5181 …}
    +entries: Doctrine\ORM\PersistentCollection {#5183 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5185 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5187 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5189 …}
    +posts: Doctrine\ORM\PersistentCollection {#5191 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5193 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5195 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5197 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5199 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5201 …}
    +follows: Doctrine\ORM\PersistentCollection {#5203 …}
    +followers: Doctrine\ORM\PersistentCollection {#5205 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5207 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5209 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5211 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5213 …}
    +reports: Doctrine\ORM\PersistentCollection {#5215 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5217 …}
    +violations: Doctrine\ORM\PersistentCollection {#5219 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5221 …}
    +awards: Doctrine\ORM\PersistentCollection {#5223 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5225 …}
    +categories: Doctrine\ORM\PersistentCollection {#5227 …}
    -id: 60124
    -password: "$2y$13$RQKabDqrzskBU83Ws8gZv.WqlVHje/7c4zbc2p2kJ2pJacr9OAEb2"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5229 …}
    +apId: "clericc@feddit.de"
    +apProfileId: "https://feddit.de/u/clericc"
    +apPublicUrl: "https://feddit.de/u/clericc"
    +apFollowersUrl: null
    +apInboxUrl: "https://feddit.de/inbox"
    +apDomain: "feddit.de"
    +apPreferredUsername: "clericc"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1704860926 {#5161
      date: 2024-01-10 05:28:46.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697404535 {#5162
      date: 2023-10-15 23:15:35.0 +02:00
    }
  }
  +showAvatar: false
}
date App\Twig\Components\DateComponent 16.0 MiB 0.18 ms
Input props
[
  "date" => DateTimeImmutable @1697006965 {#5159
    date: 2023-10-11 08:49:25.0 +02:00
  }
]
Attributes
[]
Component
App\Twig\Components\DateComponent {#7561
  +date: DateTimeImmutable @1697006965 {#5159
    date: 2023-10-11 08:49:25.0 +02:00
  }
}
date_edited App\Twig\Components\DateEditedComponent 16.0 MiB 0.13 ms
Input props
[
  "createdAt" => DateTimeImmutable @1697006965 {#5159
    date: 2023-10-11 08:49:25.0 +02:00
  }
  "editedAt" => null
]
Attributes
[]
Component
App\Twig\Components\DateEditedComponent {#7615
  +createdAt: DateTimeImmutable @1697006965 {#5159
    date: 2023-10-11 08:49:25.0 +02:00
  }
  +editedAt: null
}
user_avatar App\Twig\Components\UserAvatarComponent 16.0 MiB 5.73 ms
Input props
[
  "user" => App\Entity\User {#5176
    +avatar: null
    +cover: null
    +email: "clericc@feddit.de"
    +username: "@clericc@feddit.de"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1702629020 {#5160
      date: 2023-12-15 09:30:20.0 +01:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5177 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5179 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5181 …}
    +entries: Doctrine\ORM\PersistentCollection {#5183 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5185 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5187 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5189 …}
    +posts: Doctrine\ORM\PersistentCollection {#5191 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5193 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5195 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5197 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5199 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5201 …}
    +follows: Doctrine\ORM\PersistentCollection {#5203 …}
    +followers: Doctrine\ORM\PersistentCollection {#5205 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5207 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5209 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5211 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5213 …}
    +reports: Doctrine\ORM\PersistentCollection {#5215 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5217 …}
    +violations: Doctrine\ORM\PersistentCollection {#5219 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5221 …}
    +awards: Doctrine\ORM\PersistentCollection {#5223 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5225 …}
    +categories: Doctrine\ORM\PersistentCollection {#5227 …}
    -id: 60124
    -password: "$2y$13$RQKabDqrzskBU83Ws8gZv.WqlVHje/7c4zbc2p2kJ2pJacr9OAEb2"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5229 …}
    +apId: "clericc@feddit.de"
    +apProfileId: "https://feddit.de/u/clericc"
    +apPublicUrl: "https://feddit.de/u/clericc"
    +apFollowersUrl: null
    +apInboxUrl: "https://feddit.de/inbox"
    +apDomain: "feddit.de"
    +apPreferredUsername: "clericc"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1704860926 {#5161
      date: 2024-01-10 05:28:46.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697404535 {#5162
      date: 2023-10-15 23:15:35.0 +02:00
    }
  }
  "width" => 40
  "height" => 40
  "asLink" => true
]
Attributes
[]
Component
App\Twig\Components\UserAvatarComponent {#7669
  +width: 40
  +height: 40
  +user: App\Entity\User {#5176
    +avatar: null
    +cover: null
    +email: "clericc@feddit.de"
    +username: "@clericc@feddit.de"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1702629020 {#5160
      date: 2023-12-15 09:30:20.0 +01:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5177 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5179 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5181 …}
    +entries: Doctrine\ORM\PersistentCollection {#5183 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5185 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5187 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5189 …}
    +posts: Doctrine\ORM\PersistentCollection {#5191 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5193 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5195 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5197 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5199 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5201 …}
    +follows: Doctrine\ORM\PersistentCollection {#5203 …}
    +followers: Doctrine\ORM\PersistentCollection {#5205 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5207 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5209 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5211 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5213 …}
    +reports: Doctrine\ORM\PersistentCollection {#5215 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5217 …}
    +violations: Doctrine\ORM\PersistentCollection {#5219 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5221 …}
    +awards: Doctrine\ORM\PersistentCollection {#5223 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5225 …}
    +categories: Doctrine\ORM\PersistentCollection {#5227 …}
    -id: 60124
    -password: "$2y$13$RQKabDqrzskBU83Ws8gZv.WqlVHje/7c4zbc2p2kJ2pJacr9OAEb2"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5229 …}
    +apId: "clericc@feddit.de"
    +apProfileId: "https://feddit.de/u/clericc"
    +apPublicUrl: "https://feddit.de/u/clericc"
    +apFollowersUrl: null
    +apInboxUrl: "https://feddit.de/inbox"
    +apDomain: "feddit.de"
    +apPreferredUsername: "clericc"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1704860926 {#5161
      date: 2024-01-10 05:28:46.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697404535 {#5162
      date: 2023-10-15 23:15:35.0 +02:00
    }
  }
  +asLink: true
}
vote App\Twig\Components\VoteComponent 16.0 MiB 0.51 ms
Input props
[
  "subject" => App\Entity\EntryComment {#5163
    +user: App\Entity\User {#5176
      +avatar: null
      +cover: null
      +email: "clericc@feddit.de"
      +username: "@clericc@feddit.de"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1702629020 {#5160
        date: 2023-12-15 09:30:20.0 +01:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5177 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5179 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5181 …}
      +entries: Doctrine\ORM\PersistentCollection {#5183 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5185 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5187 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5189 …}
      +posts: Doctrine\ORM\PersistentCollection {#5191 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5193 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5195 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5197 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5199 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5201 …}
      +follows: Doctrine\ORM\PersistentCollection {#5203 …}
      +followers: Doctrine\ORM\PersistentCollection {#5205 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5207 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5209 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5211 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5213 …}
      +reports: Doctrine\ORM\PersistentCollection {#5215 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5217 …}
      +violations: Doctrine\ORM\PersistentCollection {#5219 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5221 …}
      +awards: Doctrine\ORM\PersistentCollection {#5223 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5225 …}
      +categories: Doctrine\ORM\PersistentCollection {#5227 …}
      -id: 60124
      -password: "$2y$13$RQKabDqrzskBU83Ws8gZv.WqlVHje/7c4zbc2p2kJ2pJacr9OAEb2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5229 …}
      +apId: "clericc@feddit.de"
      +apProfileId: "https://feddit.de/u/clericc"
      +apPublicUrl: "https://feddit.de/u/clericc"
      +apFollowersUrl: null
      +apInboxUrl: "https://feddit.de/inbox"
      +apDomain: "feddit.de"
      +apPreferredUsername: "clericc"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1704860926 {#5161
        date: 2024-01-10 05:28:46.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697404535 {#5162
        date: 2023-10-15 23:15:35.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5158
      date: 2023-10-11 08:49:25.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5164 …}
    +nested: Doctrine\ORM\PersistentCollection {#5166 …}
    +votes: Doctrine\ORM\PersistentCollection {#5168 …}
    +reports: Doctrine\ORM\PersistentCollection {#5170 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5172 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5174 …}
    -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 {#5159
      date: 2023-10-11 08:49:25.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\VoteComponent {#7738
  +subject: App\Entity\EntryComment {#5163
    +user: App\Entity\User {#5176
      +avatar: null
      +cover: null
      +email: "clericc@feddit.de"
      +username: "@clericc@feddit.de"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1702629020 {#5160
        date: 2023-12-15 09:30:20.0 +01:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5177 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5179 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5181 …}
      +entries: Doctrine\ORM\PersistentCollection {#5183 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5185 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5187 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5189 …}
      +posts: Doctrine\ORM\PersistentCollection {#5191 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5193 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5195 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5197 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5199 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5201 …}
      +follows: Doctrine\ORM\PersistentCollection {#5203 …}
      +followers: Doctrine\ORM\PersistentCollection {#5205 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5207 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5209 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5211 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5213 …}
      +reports: Doctrine\ORM\PersistentCollection {#5215 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5217 …}
      +violations: Doctrine\ORM\PersistentCollection {#5219 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5221 …}
      +awards: Doctrine\ORM\PersistentCollection {#5223 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5225 …}
      +categories: Doctrine\ORM\PersistentCollection {#5227 …}
      -id: 60124
      -password: "$2y$13$RQKabDqrzskBU83Ws8gZv.WqlVHje/7c4zbc2p2kJ2pJacr9OAEb2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5229 …}
      +apId: "clericc@feddit.de"
      +apProfileId: "https://feddit.de/u/clericc"
      +apPublicUrl: "https://feddit.de/u/clericc"
      +apFollowersUrl: null
      +apInboxUrl: "https://feddit.de/inbox"
      +apDomain: "feddit.de"
      +apPreferredUsername: "clericc"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1704860926 {#5161
        date: 2024-01-10 05:28:46.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697404535 {#5162
        date: 2023-10-15 23:15:35.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5158
      date: 2023-10-11 08:49:25.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5164 …}
    +nested: Doctrine\ORM\PersistentCollection {#5166 …}
    +votes: Doctrine\ORM\PersistentCollection {#5168 …}
    +reports: Doctrine\ORM\PersistentCollection {#5170 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5172 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5174 …}
    -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 {#5159
      date: 2023-10-11 08:49:25.0 +02:00
    }
  }
  +formDest: "entry_comment"
  +showDownvote: true
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
boost App\Twig\Components\BoostComponent 16.0 MiB 0.74 ms
Input props
[
  "subject" => App\Entity\EntryComment {#5163
    +user: App\Entity\User {#5176
      +avatar: null
      +cover: null
      +email: "clericc@feddit.de"
      +username: "@clericc@feddit.de"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1702629020 {#5160
        date: 2023-12-15 09:30:20.0 +01:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5177 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5179 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5181 …}
      +entries: Doctrine\ORM\PersistentCollection {#5183 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5185 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5187 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5189 …}
      +posts: Doctrine\ORM\PersistentCollection {#5191 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5193 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5195 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5197 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5199 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5201 …}
      +follows: Doctrine\ORM\PersistentCollection {#5203 …}
      +followers: Doctrine\ORM\PersistentCollection {#5205 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5207 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5209 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5211 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5213 …}
      +reports: Doctrine\ORM\PersistentCollection {#5215 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5217 …}
      +violations: Doctrine\ORM\PersistentCollection {#5219 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5221 …}
      +awards: Doctrine\ORM\PersistentCollection {#5223 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5225 …}
      +categories: Doctrine\ORM\PersistentCollection {#5227 …}
      -id: 60124
      -password: "$2y$13$RQKabDqrzskBU83Ws8gZv.WqlVHje/7c4zbc2p2kJ2pJacr9OAEb2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5229 …}
      +apId: "clericc@feddit.de"
      +apProfileId: "https://feddit.de/u/clericc"
      +apPublicUrl: "https://feddit.de/u/clericc"
      +apFollowersUrl: null
      +apInboxUrl: "https://feddit.de/inbox"
      +apDomain: "feddit.de"
      +apPreferredUsername: "clericc"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1704860926 {#5161
        date: 2024-01-10 05:28:46.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697404535 {#5162
        date: 2023-10-15 23:15:35.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5158
      date: 2023-10-11 08:49:25.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5164 …}
    +nested: Doctrine\ORM\PersistentCollection {#5166 …}
    +votes: Doctrine\ORM\PersistentCollection {#5168 …}
    +reports: Doctrine\ORM\PersistentCollection {#5170 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5172 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5174 …}
    -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 {#5159
      date: 2023-10-11 08:49:25.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\BoostComponent {#7795
  +formDest: "entry_comment"
  +subject: App\Entity\EntryComment {#5163
    +user: App\Entity\User {#5176
      +avatar: null
      +cover: null
      +email: "clericc@feddit.de"
      +username: "@clericc@feddit.de"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1702629020 {#5160
        date: 2023-12-15 09:30:20.0 +01:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5177 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5179 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5181 …}
      +entries: Doctrine\ORM\PersistentCollection {#5183 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5185 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5187 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5189 …}
      +posts: Doctrine\ORM\PersistentCollection {#5191 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5193 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5195 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5197 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5199 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5201 …}
      +follows: Doctrine\ORM\PersistentCollection {#5203 …}
      +followers: Doctrine\ORM\PersistentCollection {#5205 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5207 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5209 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5211 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5213 …}
      +reports: Doctrine\ORM\PersistentCollection {#5215 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5217 …}
      +violations: Doctrine\ORM\PersistentCollection {#5219 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5221 …}
      +awards: Doctrine\ORM\PersistentCollection {#5223 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5225 …}
      +categories: Doctrine\ORM\PersistentCollection {#5227 …}
      -id: 60124
      -password: "$2y$13$RQKabDqrzskBU83Ws8gZv.WqlVHje/7c4zbc2p2kJ2pJacr9OAEb2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5229 …}
      +apId: "clericc@feddit.de"
      +apProfileId: "https://feddit.de/u/clericc"
      +apPublicUrl: "https://feddit.de/u/clericc"
      +apFollowersUrl: null
      +apInboxUrl: "https://feddit.de/inbox"
      +apDomain: "feddit.de"
      +apPreferredUsername: "clericc"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1704860926 {#5161
        date: 2024-01-10 05:28:46.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697404535 {#5162
        date: 2023-10-15 23:15:35.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5158
      date: 2023-10-11 08:49:25.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5164 …}
    +nested: Doctrine\ORM\PersistentCollection {#5166 …}
    +votes: Doctrine\ORM\PersistentCollection {#5168 …}
    +reports: Doctrine\ORM\PersistentCollection {#5170 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5172 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5174 …}
    -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 {#5159
      date: 2023-10-11 08:49:25.0 +02:00
    }
  }
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
entry_comments_nested App\Twig\Components\EntryCommentsNestedComponent 16.0 MiB 21.32 ms
Input props
[
  "comment" => App\Entity\EntryComment {#5163
    +user: App\Entity\User {#5176
      +avatar: null
      +cover: null
      +email: "clericc@feddit.de"
      +username: "@clericc@feddit.de"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1702629020 {#5160
        date: 2023-12-15 09:30:20.0 +01:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5177 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5179 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5181 …}
      +entries: Doctrine\ORM\PersistentCollection {#5183 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5185 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5187 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5189 …}
      +posts: Doctrine\ORM\PersistentCollection {#5191 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5193 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5195 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5197 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5199 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5201 …}
      +follows: Doctrine\ORM\PersistentCollection {#5203 …}
      +followers: Doctrine\ORM\PersistentCollection {#5205 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5207 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5209 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5211 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5213 …}
      +reports: Doctrine\ORM\PersistentCollection {#5215 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5217 …}
      +violations: Doctrine\ORM\PersistentCollection {#5219 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5221 …}
      +awards: Doctrine\ORM\PersistentCollection {#5223 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5225 …}
      +categories: Doctrine\ORM\PersistentCollection {#5227 …}
      -id: 60124
      -password: "$2y$13$RQKabDqrzskBU83Ws8gZv.WqlVHje/7c4zbc2p2kJ2pJacr9OAEb2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5229 …}
      +apId: "clericc@feddit.de"
      +apProfileId: "https://feddit.de/u/clericc"
      +apPublicUrl: "https://feddit.de/u/clericc"
      +apFollowersUrl: null
      +apInboxUrl: "https://feddit.de/inbox"
      +apDomain: "feddit.de"
      +apPreferredUsername: "clericc"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1704860926 {#5161
        date: 2024-01-10 05:28:46.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697404535 {#5162
        date: 2023-10-15 23:15:35.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5158
      date: 2023-10-11 08:49:25.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5164 …}
    +nested: Doctrine\ORM\PersistentCollection {#5166 …}
    +votes: Doctrine\ORM\PersistentCollection {#5168 …}
    +reports: Doctrine\ORM\PersistentCollection {#5170 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5172 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5174 …}
    -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 {#5159
      date: 2023-10-11 08:49:25.0 +02:00
    }
  }
  "level" => 1
  "showNested" => true
  "view" => "tree"
]
Attributes
[
  "showNested" => true
]
Component
App\Twig\Components\EntryCommentsNestedComponent {#8035
  +comment: App\Entity\EntryComment {#5163
    +user: App\Entity\User {#5176
      +avatar: null
      +cover: null
      +email: "clericc@feddit.de"
      +username: "@clericc@feddit.de"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1702629020 {#5160
        date: 2023-12-15 09:30:20.0 +01:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5177 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5179 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5181 …}
      +entries: Doctrine\ORM\PersistentCollection {#5183 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5185 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5187 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5189 …}
      +posts: Doctrine\ORM\PersistentCollection {#5191 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5193 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5195 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5197 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5199 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5201 …}
      +follows: Doctrine\ORM\PersistentCollection {#5203 …}
      +followers: Doctrine\ORM\PersistentCollection {#5205 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5207 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5209 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5211 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5213 …}
      +reports: Doctrine\ORM\PersistentCollection {#5215 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5217 …}
      +violations: Doctrine\ORM\PersistentCollection {#5219 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5221 …}
      +awards: Doctrine\ORM\PersistentCollection {#5223 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5225 …}
      +categories: Doctrine\ORM\PersistentCollection {#5227 …}
      -id: 60124
      -password: "$2y$13$RQKabDqrzskBU83Ws8gZv.WqlVHje/7c4zbc2p2kJ2pJacr9OAEb2"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5229 …}
      +apId: "clericc@feddit.de"
      +apProfileId: "https://feddit.de/u/clericc"
      +apPublicUrl: "https://feddit.de/u/clericc"
      +apFollowersUrl: null
      +apInboxUrl: "https://feddit.de/inbox"
      +apDomain: "feddit.de"
      +apPreferredUsername: "clericc"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1704860926 {#5161
        date: 2024-01-10 05:28:46.0 +01:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697404535 {#5162
        date: 2023-10-15 23:15:35.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5158
      date: 2023-10-11 08:49:25.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5164 …}
    +nested: Doctrine\ORM\PersistentCollection {#5166 …}
    +votes: Doctrine\ORM\PersistentCollection {#5168 …}
    +reports: Doctrine\ORM\PersistentCollection {#5170 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5172 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5174 …}
    -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 {#5159
      date: 2023-10-11 08:49:25.0 +02:00
    }
  }
  +nestedComments: []
  +level: 1
  +view: "tree"
  -entryCommentRepository: App\Repository\EntryCommentRepository {#555 …}
  -twig: Twig\Environment {#1252 …}
  -security: Symfony\Bundle\SecurityBundle\Security {#1101 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
}
entry_comment App\Twig\Components\EntryCommentComponent 16.0 MiB 33.06 ms
Input props
[
  "comment" => App\Entity\EntryComment {#5236
    +user: App\Entity\User {#5249
      +avatar: null
      +cover: null
      +email: "univers3man@lemmy.world"
      +username: "@univers3man@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1726764135 {#5233
        date: 2024-09-19 18:42:15.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5250 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5252 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5254 …}
      +entries: Doctrine\ORM\PersistentCollection {#5256 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5258 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5260 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5262 …}
      +posts: Doctrine\ORM\PersistentCollection {#5264 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5266 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5268 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5270 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5272 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5274 …}
      +follows: Doctrine\ORM\PersistentCollection {#5276 …}
      +followers: Doctrine\ORM\PersistentCollection {#5278 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5280 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5282 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5284 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5286 …}
      +reports: Doctrine\ORM\PersistentCollection {#5288 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5290 …}
      +violations: Doctrine\ORM\PersistentCollection {#5292 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5294 …}
      +awards: Doctrine\ORM\PersistentCollection {#5296 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5298 …}
      +categories: Doctrine\ORM\PersistentCollection {#5300 …}
      -id: 38410
      -password: "$2y$13$XpIIeGjUqX2jSGzsKTSjcOUYgHfK1UpB7o3YTueEFcvsMNxg77YNG"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5302 …}
      +apId: "univers3man@lemmy.world"
      +apProfileId: "https://lemmy.world/u/univers3man"
      +apPublicUrl: "https://lemmy.world/u/univers3man"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "univers3man"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729548620 {#5234
        date: 2024-10-22 00:10:20.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1691113722 {#5235
        date: 2023-08-04 03:48:42.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5231
      date: 2023-10-26 09:05:44.0 +02:00
    }
    +ip: null
    +tags: [
      "copy"
      "overwrite"
    ]
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5237 …}
    +nested: Doctrine\ORM\PersistentCollection {#5239 …}
    +votes: Doctrine\ORM\PersistentCollection {#5241 …}
    +reports: Doctrine\ORM\PersistentCollection {#5243 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5245 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5247 …}
    -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 {#5232
      date: 2023-10-26 09:05:44.0 +02:00
    }
  }
  "showNested" => true
  "dateAsUrl" => false
  "showMagazineName" => false
  "showEntryTitle" => false
]
Attributes
[]
Component
App\Twig\Components\EntryCommentComponent {#8105
  +comment: App\Entity\EntryComment {#5236
    +user: App\Entity\User {#5249
      +avatar: null
      +cover: null
      +email: "univers3man@lemmy.world"
      +username: "@univers3man@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1726764135 {#5233
        date: 2024-09-19 18:42:15.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5250 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5252 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5254 …}
      +entries: Doctrine\ORM\PersistentCollection {#5256 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5258 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5260 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5262 …}
      +posts: Doctrine\ORM\PersistentCollection {#5264 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5266 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5268 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5270 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5272 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5274 …}
      +follows: Doctrine\ORM\PersistentCollection {#5276 …}
      +followers: Doctrine\ORM\PersistentCollection {#5278 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5280 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5282 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5284 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5286 …}
      +reports: Doctrine\ORM\PersistentCollection {#5288 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5290 …}
      +violations: Doctrine\ORM\PersistentCollection {#5292 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5294 …}
      +awards: Doctrine\ORM\PersistentCollection {#5296 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5298 …}
      +categories: Doctrine\ORM\PersistentCollection {#5300 …}
      -id: 38410
      -password: "$2y$13$XpIIeGjUqX2jSGzsKTSjcOUYgHfK1UpB7o3YTueEFcvsMNxg77YNG"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5302 …}
      +apId: "univers3man@lemmy.world"
      +apProfileId: "https://lemmy.world/u/univers3man"
      +apPublicUrl: "https://lemmy.world/u/univers3man"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "univers3man"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729548620 {#5234
        date: 2024-10-22 00:10:20.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1691113722 {#5235
        date: 2023-08-04 03:48:42.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5231
      date: 2023-10-26 09:05:44.0 +02:00
    }
    +ip: null
    +tags: [
      "copy"
      "overwrite"
    ]
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5237 …}
    +nested: Doctrine\ORM\PersistentCollection {#5239 …}
    +votes: Doctrine\ORM\PersistentCollection {#5241 …}
    +reports: Doctrine\ORM\PersistentCollection {#5243 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5245 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5247 …}
    -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 {#5232
      date: 2023-10-26 09:05:44.0 +02:00
    }
  }
  +showMagazineName: false
  +showEntryTitle: false
  +showNested: true
  +level: 1
  +canSeeTrash: false
  +dateAsUrl: false
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
  -authorizationChecker: Symfony\Component\Security\Core\Authorization\AuthorizationChecker {#931 …}
}
user_inline App\Twig\Components\UserInlineComponent 16.0 MiB 0.54 ms
Input props
[
  "user" => App\Entity\User {#5249
    +avatar: null
    +cover: null
    +email: "univers3man@lemmy.world"
    +username: "@univers3man@lemmy.world"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1726764135 {#5233
      date: 2024-09-19 18:42:15.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5250 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5252 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5254 …}
    +entries: Doctrine\ORM\PersistentCollection {#5256 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5258 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5260 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5262 …}
    +posts: Doctrine\ORM\PersistentCollection {#5264 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5266 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5268 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5270 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5272 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5274 …}
    +follows: Doctrine\ORM\PersistentCollection {#5276 …}
    +followers: Doctrine\ORM\PersistentCollection {#5278 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5280 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5282 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5284 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5286 …}
    +reports: Doctrine\ORM\PersistentCollection {#5288 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5290 …}
    +violations: Doctrine\ORM\PersistentCollection {#5292 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5294 …}
    +awards: Doctrine\ORM\PersistentCollection {#5296 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5298 …}
    +categories: Doctrine\ORM\PersistentCollection {#5300 …}
    -id: 38410
    -password: "$2y$13$XpIIeGjUqX2jSGzsKTSjcOUYgHfK1UpB7o3YTueEFcvsMNxg77YNG"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5302 …}
    +apId: "univers3man@lemmy.world"
    +apProfileId: "https://lemmy.world/u/univers3man"
    +apPublicUrl: "https://lemmy.world/u/univers3man"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemmy.world/inbox"
    +apDomain: "lemmy.world"
    +apPreferredUsername: "univers3man"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729548620 {#5234
      date: 2024-10-22 00:10:20.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1691113722 {#5235
      date: 2023-08-04 03:48:42.0 +02:00
    }
  }
  "showAvatar" => false
]
Attributes
[]
Component
App\Twig\Components\UserInlineComponent {#8150
  +user: App\Entity\User {#5249
    +avatar: null
    +cover: null
    +email: "univers3man@lemmy.world"
    +username: "@univers3man@lemmy.world"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1726764135 {#5233
      date: 2024-09-19 18:42:15.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5250 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5252 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5254 …}
    +entries: Doctrine\ORM\PersistentCollection {#5256 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5258 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5260 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5262 …}
    +posts: Doctrine\ORM\PersistentCollection {#5264 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5266 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5268 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5270 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5272 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5274 …}
    +follows: Doctrine\ORM\PersistentCollection {#5276 …}
    +followers: Doctrine\ORM\PersistentCollection {#5278 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5280 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5282 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5284 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5286 …}
    +reports: Doctrine\ORM\PersistentCollection {#5288 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5290 …}
    +violations: Doctrine\ORM\PersistentCollection {#5292 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5294 …}
    +awards: Doctrine\ORM\PersistentCollection {#5296 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5298 …}
    +categories: Doctrine\ORM\PersistentCollection {#5300 …}
    -id: 38410
    -password: "$2y$13$XpIIeGjUqX2jSGzsKTSjcOUYgHfK1UpB7o3YTueEFcvsMNxg77YNG"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5302 …}
    +apId: "univers3man@lemmy.world"
    +apProfileId: "https://lemmy.world/u/univers3man"
    +apPublicUrl: "https://lemmy.world/u/univers3man"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemmy.world/inbox"
    +apDomain: "lemmy.world"
    +apPreferredUsername: "univers3man"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729548620 {#5234
      date: 2024-10-22 00:10:20.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1691113722 {#5235
      date: 2023-08-04 03:48:42.0 +02:00
    }
  }
  +showAvatar: false
}
date App\Twig\Components\DateComponent 16.0 MiB 0.23 ms
Input props
[
  "date" => DateTimeImmutable @1698303944 {#5232
    date: 2023-10-26 09:05:44.0 +02:00
  }
]
Attributes
[]
Component
App\Twig\Components\DateComponent {#8205
  +date: DateTimeImmutable @1698303944 {#5232
    date: 2023-10-26 09:05:44.0 +02:00
  }
}
date_edited App\Twig\Components\DateEditedComponent 16.0 MiB 6.76 ms
Input props
[
  "createdAt" => DateTimeImmutable @1698303944 {#5232
    date: 2023-10-26 09:05:44.0 +02:00
  }
  "editedAt" => null
]
Attributes
[]
Component
App\Twig\Components\DateEditedComponent {#8259
  +createdAt: DateTimeImmutable @1698303944 {#5232
    date: 2023-10-26 09:05:44.0 +02:00
  }
  +editedAt: null
}
user_avatar App\Twig\Components\UserAvatarComponent 16.0 MiB 0.20 ms
Input props
[
  "user" => App\Entity\User {#5249
    +avatar: null
    +cover: null
    +email: "univers3man@lemmy.world"
    +username: "@univers3man@lemmy.world"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1726764135 {#5233
      date: 2024-09-19 18:42:15.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5250 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5252 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5254 …}
    +entries: Doctrine\ORM\PersistentCollection {#5256 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5258 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5260 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5262 …}
    +posts: Doctrine\ORM\PersistentCollection {#5264 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5266 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5268 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5270 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5272 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5274 …}
    +follows: Doctrine\ORM\PersistentCollection {#5276 …}
    +followers: Doctrine\ORM\PersistentCollection {#5278 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5280 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5282 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5284 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5286 …}
    +reports: Doctrine\ORM\PersistentCollection {#5288 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5290 …}
    +violations: Doctrine\ORM\PersistentCollection {#5292 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5294 …}
    +awards: Doctrine\ORM\PersistentCollection {#5296 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5298 …}
    +categories: Doctrine\ORM\PersistentCollection {#5300 …}
    -id: 38410
    -password: "$2y$13$XpIIeGjUqX2jSGzsKTSjcOUYgHfK1UpB7o3YTueEFcvsMNxg77YNG"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5302 …}
    +apId: "univers3man@lemmy.world"
    +apProfileId: "https://lemmy.world/u/univers3man"
    +apPublicUrl: "https://lemmy.world/u/univers3man"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemmy.world/inbox"
    +apDomain: "lemmy.world"
    +apPreferredUsername: "univers3man"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729548620 {#5234
      date: 2024-10-22 00:10:20.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1691113722 {#5235
      date: 2023-08-04 03:48:42.0 +02:00
    }
  }
  "width" => 40
  "height" => 40
  "asLink" => true
]
Attributes
[]
Component
App\Twig\Components\UserAvatarComponent {#8313
  +width: 40
  +height: 40
  +user: App\Entity\User {#5249
    +avatar: null
    +cover: null
    +email: "univers3man@lemmy.world"
    +username: "@univers3man@lemmy.world"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1726764135 {#5233
      date: 2024-09-19 18:42:15.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5250 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5252 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5254 …}
    +entries: Doctrine\ORM\PersistentCollection {#5256 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5258 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5260 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5262 …}
    +posts: Doctrine\ORM\PersistentCollection {#5264 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5266 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5268 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5270 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5272 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5274 …}
    +follows: Doctrine\ORM\PersistentCollection {#5276 …}
    +followers: Doctrine\ORM\PersistentCollection {#5278 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5280 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5282 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5284 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5286 …}
    +reports: Doctrine\ORM\PersistentCollection {#5288 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5290 …}
    +violations: Doctrine\ORM\PersistentCollection {#5292 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5294 …}
    +awards: Doctrine\ORM\PersistentCollection {#5296 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5298 …}
    +categories: Doctrine\ORM\PersistentCollection {#5300 …}
    -id: 38410
    -password: "$2y$13$XpIIeGjUqX2jSGzsKTSjcOUYgHfK1UpB7o3YTueEFcvsMNxg77YNG"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5302 …}
    +apId: "univers3man@lemmy.world"
    +apProfileId: "https://lemmy.world/u/univers3man"
    +apPublicUrl: "https://lemmy.world/u/univers3man"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemmy.world/inbox"
    +apDomain: "lemmy.world"
    +apPreferredUsername: "univers3man"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729548620 {#5234
      date: 2024-10-22 00:10:20.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1691113722 {#5235
      date: 2023-08-04 03:48:42.0 +02:00
    }
  }
  +asLink: true
}
vote App\Twig\Components\VoteComponent 16.0 MiB 0.45 ms
Input props
[
  "subject" => App\Entity\EntryComment {#5236
    +user: App\Entity\User {#5249
      +avatar: null
      +cover: null
      +email: "univers3man@lemmy.world"
      +username: "@univers3man@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1726764135 {#5233
        date: 2024-09-19 18:42:15.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5250 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5252 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5254 …}
      +entries: Doctrine\ORM\PersistentCollection {#5256 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5258 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5260 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5262 …}
      +posts: Doctrine\ORM\PersistentCollection {#5264 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5266 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5268 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5270 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5272 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5274 …}
      +follows: Doctrine\ORM\PersistentCollection {#5276 …}
      +followers: Doctrine\ORM\PersistentCollection {#5278 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5280 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5282 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5284 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5286 …}
      +reports: Doctrine\ORM\PersistentCollection {#5288 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5290 …}
      +violations: Doctrine\ORM\PersistentCollection {#5292 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5294 …}
      +awards: Doctrine\ORM\PersistentCollection {#5296 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5298 …}
      +categories: Doctrine\ORM\PersistentCollection {#5300 …}
      -id: 38410
      -password: "$2y$13$XpIIeGjUqX2jSGzsKTSjcOUYgHfK1UpB7o3YTueEFcvsMNxg77YNG"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5302 …}
      +apId: "univers3man@lemmy.world"
      +apProfileId: "https://lemmy.world/u/univers3man"
      +apPublicUrl: "https://lemmy.world/u/univers3man"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "univers3man"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729548620 {#5234
        date: 2024-10-22 00:10:20.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1691113722 {#5235
        date: 2023-08-04 03:48:42.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5231
      date: 2023-10-26 09:05:44.0 +02:00
    }
    +ip: null
    +tags: [
      "copy"
      "overwrite"
    ]
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5237 …}
    +nested: Doctrine\ORM\PersistentCollection {#5239 …}
    +votes: Doctrine\ORM\PersistentCollection {#5241 …}
    +reports: Doctrine\ORM\PersistentCollection {#5243 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5245 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5247 …}
    -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 {#5232
      date: 2023-10-26 09:05:44.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\VoteComponent {#8424
  +subject: App\Entity\EntryComment {#5236
    +user: App\Entity\User {#5249
      +avatar: null
      +cover: null
      +email: "univers3man@lemmy.world"
      +username: "@univers3man@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1726764135 {#5233
        date: 2024-09-19 18:42:15.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5250 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5252 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5254 …}
      +entries: Doctrine\ORM\PersistentCollection {#5256 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5258 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5260 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5262 …}
      +posts: Doctrine\ORM\PersistentCollection {#5264 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5266 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5268 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5270 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5272 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5274 …}
      +follows: Doctrine\ORM\PersistentCollection {#5276 …}
      +followers: Doctrine\ORM\PersistentCollection {#5278 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5280 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5282 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5284 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5286 …}
      +reports: Doctrine\ORM\PersistentCollection {#5288 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5290 …}
      +violations: Doctrine\ORM\PersistentCollection {#5292 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5294 …}
      +awards: Doctrine\ORM\PersistentCollection {#5296 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5298 …}
      +categories: Doctrine\ORM\PersistentCollection {#5300 …}
      -id: 38410
      -password: "$2y$13$XpIIeGjUqX2jSGzsKTSjcOUYgHfK1UpB7o3YTueEFcvsMNxg77YNG"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5302 …}
      +apId: "univers3man@lemmy.world"
      +apProfileId: "https://lemmy.world/u/univers3man"
      +apPublicUrl: "https://lemmy.world/u/univers3man"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "univers3man"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729548620 {#5234
        date: 2024-10-22 00:10:20.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1691113722 {#5235
        date: 2023-08-04 03:48:42.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5231
      date: 2023-10-26 09:05:44.0 +02:00
    }
    +ip: null
    +tags: [
      "copy"
      "overwrite"
    ]
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5237 …}
    +nested: Doctrine\ORM\PersistentCollection {#5239 …}
    +votes: Doctrine\ORM\PersistentCollection {#5241 …}
    +reports: Doctrine\ORM\PersistentCollection {#5243 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5245 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5247 …}
    -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 {#5232
      date: 2023-10-26 09:05:44.0 +02:00
    }
  }
  +formDest: "entry_comment"
  +showDownvote: true
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
boost App\Twig\Components\BoostComponent 16.0 MiB 0.70 ms
Input props
[
  "subject" => App\Entity\EntryComment {#5236
    +user: App\Entity\User {#5249
      +avatar: null
      +cover: null
      +email: "univers3man@lemmy.world"
      +username: "@univers3man@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1726764135 {#5233
        date: 2024-09-19 18:42:15.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5250 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5252 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5254 …}
      +entries: Doctrine\ORM\PersistentCollection {#5256 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5258 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5260 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5262 …}
      +posts: Doctrine\ORM\PersistentCollection {#5264 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5266 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5268 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5270 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5272 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5274 …}
      +follows: Doctrine\ORM\PersistentCollection {#5276 …}
      +followers: Doctrine\ORM\PersistentCollection {#5278 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5280 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5282 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5284 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5286 …}
      +reports: Doctrine\ORM\PersistentCollection {#5288 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5290 …}
      +violations: Doctrine\ORM\PersistentCollection {#5292 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5294 …}
      +awards: Doctrine\ORM\PersistentCollection {#5296 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5298 …}
      +categories: Doctrine\ORM\PersistentCollection {#5300 …}
      -id: 38410
      -password: "$2y$13$XpIIeGjUqX2jSGzsKTSjcOUYgHfK1UpB7o3YTueEFcvsMNxg77YNG"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5302 …}
      +apId: "univers3man@lemmy.world"
      +apProfileId: "https://lemmy.world/u/univers3man"
      +apPublicUrl: "https://lemmy.world/u/univers3man"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "univers3man"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729548620 {#5234
        date: 2024-10-22 00:10:20.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1691113722 {#5235
        date: 2023-08-04 03:48:42.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5231
      date: 2023-10-26 09:05:44.0 +02:00
    }
    +ip: null
    +tags: [
      "copy"
      "overwrite"
    ]
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5237 …}
    +nested: Doctrine\ORM\PersistentCollection {#5239 …}
    +votes: Doctrine\ORM\PersistentCollection {#5241 …}
    +reports: Doctrine\ORM\PersistentCollection {#5243 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5245 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5247 …}
    -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 {#5232
      date: 2023-10-26 09:05:44.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\BoostComponent {#8481
  +formDest: "entry_comment"
  +subject: App\Entity\EntryComment {#5236
    +user: App\Entity\User {#5249
      +avatar: null
      +cover: null
      +email: "univers3man@lemmy.world"
      +username: "@univers3man@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1726764135 {#5233
        date: 2024-09-19 18:42:15.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5250 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5252 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5254 …}
      +entries: Doctrine\ORM\PersistentCollection {#5256 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5258 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5260 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5262 …}
      +posts: Doctrine\ORM\PersistentCollection {#5264 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5266 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5268 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5270 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5272 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5274 …}
      +follows: Doctrine\ORM\PersistentCollection {#5276 …}
      +followers: Doctrine\ORM\PersistentCollection {#5278 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5280 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5282 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5284 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5286 …}
      +reports: Doctrine\ORM\PersistentCollection {#5288 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5290 …}
      +violations: Doctrine\ORM\PersistentCollection {#5292 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5294 …}
      +awards: Doctrine\ORM\PersistentCollection {#5296 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5298 …}
      +categories: Doctrine\ORM\PersistentCollection {#5300 …}
      -id: 38410
      -password: "$2y$13$XpIIeGjUqX2jSGzsKTSjcOUYgHfK1UpB7o3YTueEFcvsMNxg77YNG"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5302 …}
      +apId: "univers3man@lemmy.world"
      +apProfileId: "https://lemmy.world/u/univers3man"
      +apPublicUrl: "https://lemmy.world/u/univers3man"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "univers3man"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729548620 {#5234
        date: 2024-10-22 00:10:20.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1691113722 {#5235
        date: 2023-08-04 03:48:42.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5231
      date: 2023-10-26 09:05:44.0 +02:00
    }
    +ip: null
    +tags: [
      "copy"
      "overwrite"
    ]
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5237 …}
    +nested: Doctrine\ORM\PersistentCollection {#5239 …}
    +votes: Doctrine\ORM\PersistentCollection {#5241 …}
    +reports: Doctrine\ORM\PersistentCollection {#5243 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5245 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5247 …}
    -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 {#5232
      date: 2023-10-26 09:05:44.0 +02:00
    }
  }
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
entry_comments_nested App\Twig\Components\EntryCommentsNestedComponent 16.0 MiB 1.03 ms
Input props
[
  "comment" => App\Entity\EntryComment {#5236
    +user: App\Entity\User {#5249
      +avatar: null
      +cover: null
      +email: "univers3man@lemmy.world"
      +username: "@univers3man@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1726764135 {#5233
        date: 2024-09-19 18:42:15.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5250 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5252 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5254 …}
      +entries: Doctrine\ORM\PersistentCollection {#5256 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5258 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5260 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5262 …}
      +posts: Doctrine\ORM\PersistentCollection {#5264 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5266 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5268 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5270 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5272 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5274 …}
      +follows: Doctrine\ORM\PersistentCollection {#5276 …}
      +followers: Doctrine\ORM\PersistentCollection {#5278 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5280 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5282 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5284 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5286 …}
      +reports: Doctrine\ORM\PersistentCollection {#5288 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5290 …}
      +violations: Doctrine\ORM\PersistentCollection {#5292 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5294 …}
      +awards: Doctrine\ORM\PersistentCollection {#5296 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5298 …}
      +categories: Doctrine\ORM\PersistentCollection {#5300 …}
      -id: 38410
      -password: "$2y$13$XpIIeGjUqX2jSGzsKTSjcOUYgHfK1UpB7o3YTueEFcvsMNxg77YNG"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5302 …}
      +apId: "univers3man@lemmy.world"
      +apProfileId: "https://lemmy.world/u/univers3man"
      +apPublicUrl: "https://lemmy.world/u/univers3man"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "univers3man"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729548620 {#5234
        date: 2024-10-22 00:10:20.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1691113722 {#5235
        date: 2023-08-04 03:48:42.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5231
      date: 2023-10-26 09:05:44.0 +02:00
    }
    +ip: null
    +tags: [
      "copy"
      "overwrite"
    ]
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5237 …}
    +nested: Doctrine\ORM\PersistentCollection {#5239 …}
    +votes: Doctrine\ORM\PersistentCollection {#5241 …}
    +reports: Doctrine\ORM\PersistentCollection {#5243 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5245 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5247 …}
    -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 {#5232
      date: 2023-10-26 09:05:44.0 +02:00
    }
  }
  "level" => 1
  "showNested" => true
  "view" => "tree"
]
Attributes
[
  "showNested" => true
]
Component
App\Twig\Components\EntryCommentsNestedComponent {#8721
  +comment: App\Entity\EntryComment {#5236
    +user: App\Entity\User {#5249
      +avatar: null
      +cover: null
      +email: "univers3man@lemmy.world"
      +username: "@univers3man@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1726764135 {#5233
        date: 2024-09-19 18:42:15.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5250 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5252 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5254 …}
      +entries: Doctrine\ORM\PersistentCollection {#5256 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5258 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5260 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5262 …}
      +posts: Doctrine\ORM\PersistentCollection {#5264 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5266 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5268 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5270 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5272 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5274 …}
      +follows: Doctrine\ORM\PersistentCollection {#5276 …}
      +followers: Doctrine\ORM\PersistentCollection {#5278 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5280 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5282 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5284 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5286 …}
      +reports: Doctrine\ORM\PersistentCollection {#5288 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5290 …}
      +violations: Doctrine\ORM\PersistentCollection {#5292 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5294 …}
      +awards: Doctrine\ORM\PersistentCollection {#5296 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5298 …}
      +categories: Doctrine\ORM\PersistentCollection {#5300 …}
      -id: 38410
      -password: "$2y$13$XpIIeGjUqX2jSGzsKTSjcOUYgHfK1UpB7o3YTueEFcvsMNxg77YNG"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5302 …}
      +apId: "univers3man@lemmy.world"
      +apProfileId: "https://lemmy.world/u/univers3man"
      +apPublicUrl: "https://lemmy.world/u/univers3man"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "univers3man"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729548620 {#5234
        date: 2024-10-22 00:10:20.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1691113722 {#5235
        date: 2023-08-04 03:48:42.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +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 {#5231
      date: 2023-10-26 09:05:44.0 +02:00
    }
    +ip: null
    +tags: [
      "copy"
      "overwrite"
    ]
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5237 …}
    +nested: Doctrine\ORM\PersistentCollection {#5239 …}
    +votes: Doctrine\ORM\PersistentCollection {#5241 …}
    +reports: Doctrine\ORM\PersistentCollection {#5243 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5245 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5247 …}
    -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 {#5232
      date: 2023-10-26 09:05:44.0 +02:00
    }
  }
  +nestedComments: []
  +level: 1
  +view: "tree"
  -entryCommentRepository: App\Repository\EntryCommentRepository {#555 …}
  -twig: Twig\Environment {#1252 …}
  -security: Symfony\Bundle\SecurityBundle\Security {#1101 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
}
entry_comment App\Twig\Components\EntryCommentComponent 16.0 MiB 103.78 ms
Input props
[
  "comment" => App\Entity\EntryComment {#5309
    +user: App\Entity\User {#5322
      +avatar: null
      +cover: null
      +email: "CallOfTheWild@lemmy.world"
      +username: "@CallOfTheWild@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727656077 {#5306
        date: 2024-09-30 02:27:57.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5323 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5325 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5327 …}
      +entries: Doctrine\ORM\PersistentCollection {#5329 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5331 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5333 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5335 …}
      +posts: Doctrine\ORM\PersistentCollection {#5337 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5339 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5341 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5343 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5345 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5347 …}
      +follows: Doctrine\ORM\PersistentCollection {#5349 …}
      +followers: Doctrine\ORM\PersistentCollection {#5351 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5353 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5355 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5357 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5359 …}
      +reports: Doctrine\ORM\PersistentCollection {#5361 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5363 …}
      +violations: Doctrine\ORM\PersistentCollection {#5365 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5367 …}
      +awards: Doctrine\ORM\PersistentCollection {#5369 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5371 …}
      +categories: Doctrine\ORM\PersistentCollection {#5373 …}
      -id: 56140
      -password: "$2y$13$MT58iKH4KlhmvVAwoVspKeyy0xLt14GPM5Vag4bCLE1XvVKkeIsCm"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5375 …}
      +apId: "CallOfTheWild@lemmy.world"
      +apProfileId: "https://lemmy.world/u/CallOfTheWild"
      +apPublicUrl: "https://lemmy.world/u/CallOfTheWild"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "CallOfTheWild"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729283562 {#5307
        date: 2024-10-18 22:32:42.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697054349 {#5308
        date: 2023-10-11 21:59:09.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Saving"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698415589 {#5304
      date: 2023-10-27 16:06:29.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5310 …}
    +nested: Doctrine\ORM\PersistentCollection {#5312 …}
    +votes: Doctrine\ORM\PersistentCollection {#5314 …}
    +reports: Doctrine\ORM\PersistentCollection {#5316 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5318 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5320 …}
    -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 {#5305
      date: 2023-10-27 16:06:29.0 +02:00
    }
  }
  "showNested" => true
  "dateAsUrl" => false
  "showMagazineName" => false
  "showEntryTitle" => false
]
Attributes
[]
Component
App\Twig\Components\EntryCommentComponent {#8791
  +comment: App\Entity\EntryComment {#5309
    +user: App\Entity\User {#5322
      +avatar: null
      +cover: null
      +email: "CallOfTheWild@lemmy.world"
      +username: "@CallOfTheWild@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727656077 {#5306
        date: 2024-09-30 02:27:57.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5323 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5325 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5327 …}
      +entries: Doctrine\ORM\PersistentCollection {#5329 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5331 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5333 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5335 …}
      +posts: Doctrine\ORM\PersistentCollection {#5337 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5339 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5341 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5343 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5345 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5347 …}
      +follows: Doctrine\ORM\PersistentCollection {#5349 …}
      +followers: Doctrine\ORM\PersistentCollection {#5351 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5353 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5355 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5357 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5359 …}
      +reports: Doctrine\ORM\PersistentCollection {#5361 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5363 …}
      +violations: Doctrine\ORM\PersistentCollection {#5365 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5367 …}
      +awards: Doctrine\ORM\PersistentCollection {#5369 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5371 …}
      +categories: Doctrine\ORM\PersistentCollection {#5373 …}
      -id: 56140
      -password: "$2y$13$MT58iKH4KlhmvVAwoVspKeyy0xLt14GPM5Vag4bCLE1XvVKkeIsCm"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5375 …}
      +apId: "CallOfTheWild@lemmy.world"
      +apProfileId: "https://lemmy.world/u/CallOfTheWild"
      +apPublicUrl: "https://lemmy.world/u/CallOfTheWild"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "CallOfTheWild"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729283562 {#5307
        date: 2024-10-18 22:32:42.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697054349 {#5308
        date: 2023-10-11 21:59:09.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Saving"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698415589 {#5304
      date: 2023-10-27 16:06:29.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5310 …}
    +nested: Doctrine\ORM\PersistentCollection {#5312 …}
    +votes: Doctrine\ORM\PersistentCollection {#5314 …}
    +reports: Doctrine\ORM\PersistentCollection {#5316 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5318 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5320 …}
    -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 {#5305
      date: 2023-10-27 16:06:29.0 +02:00
    }
  }
  +showMagazineName: false
  +showEntryTitle: false
  +showNested: true
  +level: 1
  +canSeeTrash: false
  +dateAsUrl: false
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
  -authorizationChecker: Symfony\Component\Security\Core\Authorization\AuthorizationChecker {#931 …}
}
user_inline App\Twig\Components\UserInlineComponent 16.0 MiB 0.18 ms
Input props
[
  "user" => App\Entity\User {#5322
    +avatar: null
    +cover: null
    +email: "CallOfTheWild@lemmy.world"
    +username: "@CallOfTheWild@lemmy.world"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1727656077 {#5306
      date: 2024-09-30 02:27:57.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5323 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5325 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5327 …}
    +entries: Doctrine\ORM\PersistentCollection {#5329 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5331 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5333 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5335 …}
    +posts: Doctrine\ORM\PersistentCollection {#5337 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5339 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5341 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5343 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5345 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5347 …}
    +follows: Doctrine\ORM\PersistentCollection {#5349 …}
    +followers: Doctrine\ORM\PersistentCollection {#5351 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5353 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5355 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5357 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5359 …}
    +reports: Doctrine\ORM\PersistentCollection {#5361 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5363 …}
    +violations: Doctrine\ORM\PersistentCollection {#5365 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5367 …}
    +awards: Doctrine\ORM\PersistentCollection {#5369 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5371 …}
    +categories: Doctrine\ORM\PersistentCollection {#5373 …}
    -id: 56140
    -password: "$2y$13$MT58iKH4KlhmvVAwoVspKeyy0xLt14GPM5Vag4bCLE1XvVKkeIsCm"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5375 …}
    +apId: "CallOfTheWild@lemmy.world"
    +apProfileId: "https://lemmy.world/u/CallOfTheWild"
    +apPublicUrl: "https://lemmy.world/u/CallOfTheWild"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemmy.world/inbox"
    +apDomain: "lemmy.world"
    +apPreferredUsername: "CallOfTheWild"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729283562 {#5307
      date: 2024-10-18 22:32:42.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697054349 {#5308
      date: 2023-10-11 21:59:09.0 +02:00
    }
  }
  "showAvatar" => false
]
Attributes
[]
Component
App\Twig\Components\UserInlineComponent {#8836
  +user: App\Entity\User {#5322
    +avatar: null
    +cover: null
    +email: "CallOfTheWild@lemmy.world"
    +username: "@CallOfTheWild@lemmy.world"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1727656077 {#5306
      date: 2024-09-30 02:27:57.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5323 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5325 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5327 …}
    +entries: Doctrine\ORM\PersistentCollection {#5329 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5331 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5333 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5335 …}
    +posts: Doctrine\ORM\PersistentCollection {#5337 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5339 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5341 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5343 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5345 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5347 …}
    +follows: Doctrine\ORM\PersistentCollection {#5349 …}
    +followers: Doctrine\ORM\PersistentCollection {#5351 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5353 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5355 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5357 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5359 …}
    +reports: Doctrine\ORM\PersistentCollection {#5361 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5363 …}
    +violations: Doctrine\ORM\PersistentCollection {#5365 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5367 …}
    +awards: Doctrine\ORM\PersistentCollection {#5369 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5371 …}
    +categories: Doctrine\ORM\PersistentCollection {#5373 …}
    -id: 56140
    -password: "$2y$13$MT58iKH4KlhmvVAwoVspKeyy0xLt14GPM5Vag4bCLE1XvVKkeIsCm"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5375 …}
    +apId: "CallOfTheWild@lemmy.world"
    +apProfileId: "https://lemmy.world/u/CallOfTheWild"
    +apPublicUrl: "https://lemmy.world/u/CallOfTheWild"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemmy.world/inbox"
    +apDomain: "lemmy.world"
    +apPreferredUsername: "CallOfTheWild"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729283562 {#5307
      date: 2024-10-18 22:32:42.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697054349 {#5308
      date: 2023-10-11 21:59:09.0 +02:00
    }
  }
  +showAvatar: false
}
date App\Twig\Components\DateComponent 16.0 MiB 0.14 ms
Input props
[
  "date" => DateTimeImmutable @1698415589 {#5305
    date: 2023-10-27 16:06:29.0 +02:00
  }
]
Attributes
[]
Component
App\Twig\Components\DateComponent {#8891
  +date: DateTimeImmutable @1698415589 {#5305
    date: 2023-10-27 16:06:29.0 +02:00
  }
}
date_edited App\Twig\Components\DateEditedComponent 16.0 MiB 0.10 ms
Input props
[
  "createdAt" => DateTimeImmutable @1698415589 {#5305
    date: 2023-10-27 16:06:29.0 +02:00
  }
  "editedAt" => null
]
Attributes
[]
Component
App\Twig\Components\DateEditedComponent {#8945
  +createdAt: DateTimeImmutable @1698415589 {#5305
    date: 2023-10-27 16:06:29.0 +02:00
  }
  +editedAt: null
}
user_avatar App\Twig\Components\UserAvatarComponent 16.0 MiB 0.14 ms
Input props
[
  "user" => App\Entity\User {#5322
    +avatar: null
    +cover: null
    +email: "CallOfTheWild@lemmy.world"
    +username: "@CallOfTheWild@lemmy.world"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1727656077 {#5306
      date: 2024-09-30 02:27:57.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5323 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5325 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5327 …}
    +entries: Doctrine\ORM\PersistentCollection {#5329 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5331 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5333 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5335 …}
    +posts: Doctrine\ORM\PersistentCollection {#5337 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5339 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5341 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5343 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5345 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5347 …}
    +follows: Doctrine\ORM\PersistentCollection {#5349 …}
    +followers: Doctrine\ORM\PersistentCollection {#5351 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5353 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5355 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5357 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5359 …}
    +reports: Doctrine\ORM\PersistentCollection {#5361 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5363 …}
    +violations: Doctrine\ORM\PersistentCollection {#5365 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5367 …}
    +awards: Doctrine\ORM\PersistentCollection {#5369 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5371 …}
    +categories: Doctrine\ORM\PersistentCollection {#5373 …}
    -id: 56140
    -password: "$2y$13$MT58iKH4KlhmvVAwoVspKeyy0xLt14GPM5Vag4bCLE1XvVKkeIsCm"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5375 …}
    +apId: "CallOfTheWild@lemmy.world"
    +apProfileId: "https://lemmy.world/u/CallOfTheWild"
    +apPublicUrl: "https://lemmy.world/u/CallOfTheWild"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemmy.world/inbox"
    +apDomain: "lemmy.world"
    +apPreferredUsername: "CallOfTheWild"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729283562 {#5307
      date: 2024-10-18 22:32:42.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697054349 {#5308
      date: 2023-10-11 21:59:09.0 +02:00
    }
  }
  "width" => 40
  "height" => 40
  "asLink" => true
]
Attributes
[]
Component
App\Twig\Components\UserAvatarComponent {#8999
  +width: 40
  +height: 40
  +user: App\Entity\User {#5322
    +avatar: null
    +cover: null
    +email: "CallOfTheWild@lemmy.world"
    +username: "@CallOfTheWild@lemmy.world"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1727656077 {#5306
      date: 2024-09-30 02:27:57.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5323 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5325 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5327 …}
    +entries: Doctrine\ORM\PersistentCollection {#5329 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5331 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5333 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5335 …}
    +posts: Doctrine\ORM\PersistentCollection {#5337 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5339 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5341 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5343 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5345 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5347 …}
    +follows: Doctrine\ORM\PersistentCollection {#5349 …}
    +followers: Doctrine\ORM\PersistentCollection {#5351 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5353 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5355 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5357 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5359 …}
    +reports: Doctrine\ORM\PersistentCollection {#5361 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5363 …}
    +violations: Doctrine\ORM\PersistentCollection {#5365 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5367 …}
    +awards: Doctrine\ORM\PersistentCollection {#5369 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5371 …}
    +categories: Doctrine\ORM\PersistentCollection {#5373 …}
    -id: 56140
    -password: "$2y$13$MT58iKH4KlhmvVAwoVspKeyy0xLt14GPM5Vag4bCLE1XvVKkeIsCm"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5375 …}
    +apId: "CallOfTheWild@lemmy.world"
    +apProfileId: "https://lemmy.world/u/CallOfTheWild"
    +apPublicUrl: "https://lemmy.world/u/CallOfTheWild"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemmy.world/inbox"
    +apDomain: "lemmy.world"
    +apPreferredUsername: "CallOfTheWild"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729283562 {#5307
      date: 2024-10-18 22:32:42.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697054349 {#5308
      date: 2023-10-11 21:59:09.0 +02:00
    }
  }
  +asLink: true
}
vote App\Twig\Components\VoteComponent 16.0 MiB 2.89 ms
Input props
[
  "subject" => App\Entity\EntryComment {#5309
    +user: App\Entity\User {#5322
      +avatar: null
      +cover: null
      +email: "CallOfTheWild@lemmy.world"
      +username: "@CallOfTheWild@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727656077 {#5306
        date: 2024-09-30 02:27:57.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5323 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5325 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5327 …}
      +entries: Doctrine\ORM\PersistentCollection {#5329 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5331 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5333 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5335 …}
      +posts: Doctrine\ORM\PersistentCollection {#5337 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5339 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5341 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5343 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5345 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5347 …}
      +follows: Doctrine\ORM\PersistentCollection {#5349 …}
      +followers: Doctrine\ORM\PersistentCollection {#5351 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5353 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5355 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5357 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5359 …}
      +reports: Doctrine\ORM\PersistentCollection {#5361 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5363 …}
      +violations: Doctrine\ORM\PersistentCollection {#5365 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5367 …}
      +awards: Doctrine\ORM\PersistentCollection {#5369 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5371 …}
      +categories: Doctrine\ORM\PersistentCollection {#5373 …}
      -id: 56140
      -password: "$2y$13$MT58iKH4KlhmvVAwoVspKeyy0xLt14GPM5Vag4bCLE1XvVKkeIsCm"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5375 …}
      +apId: "CallOfTheWild@lemmy.world"
      +apProfileId: "https://lemmy.world/u/CallOfTheWild"
      +apPublicUrl: "https://lemmy.world/u/CallOfTheWild"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "CallOfTheWild"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729283562 {#5307
        date: 2024-10-18 22:32:42.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697054349 {#5308
        date: 2023-10-11 21:59:09.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Saving"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698415589 {#5304
      date: 2023-10-27 16:06:29.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5310 …}
    +nested: Doctrine\ORM\PersistentCollection {#5312 …}
    +votes: Doctrine\ORM\PersistentCollection {#5314 …}
    +reports: Doctrine\ORM\PersistentCollection {#5316 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5318 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5320 …}
    -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 {#5305
      date: 2023-10-27 16:06:29.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\VoteComponent {#9068
  +subject: App\Entity\EntryComment {#5309
    +user: App\Entity\User {#5322
      +avatar: null
      +cover: null
      +email: "CallOfTheWild@lemmy.world"
      +username: "@CallOfTheWild@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727656077 {#5306
        date: 2024-09-30 02:27:57.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5323 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5325 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5327 …}
      +entries: Doctrine\ORM\PersistentCollection {#5329 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5331 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5333 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5335 …}
      +posts: Doctrine\ORM\PersistentCollection {#5337 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5339 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5341 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5343 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5345 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5347 …}
      +follows: Doctrine\ORM\PersistentCollection {#5349 …}
      +followers: Doctrine\ORM\PersistentCollection {#5351 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5353 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5355 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5357 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5359 …}
      +reports: Doctrine\ORM\PersistentCollection {#5361 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5363 …}
      +violations: Doctrine\ORM\PersistentCollection {#5365 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5367 …}
      +awards: Doctrine\ORM\PersistentCollection {#5369 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5371 …}
      +categories: Doctrine\ORM\PersistentCollection {#5373 …}
      -id: 56140
      -password: "$2y$13$MT58iKH4KlhmvVAwoVspKeyy0xLt14GPM5Vag4bCLE1XvVKkeIsCm"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5375 …}
      +apId: "CallOfTheWild@lemmy.world"
      +apProfileId: "https://lemmy.world/u/CallOfTheWild"
      +apPublicUrl: "https://lemmy.world/u/CallOfTheWild"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "CallOfTheWild"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729283562 {#5307
        date: 2024-10-18 22:32:42.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697054349 {#5308
        date: 2023-10-11 21:59:09.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Saving"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698415589 {#5304
      date: 2023-10-27 16:06:29.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5310 …}
    +nested: Doctrine\ORM\PersistentCollection {#5312 …}
    +votes: Doctrine\ORM\PersistentCollection {#5314 …}
    +reports: Doctrine\ORM\PersistentCollection {#5316 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5318 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5320 …}
    -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 {#5305
      date: 2023-10-27 16:06:29.0 +02:00
    }
  }
  +formDest: "entry_comment"
  +showDownvote: true
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
boost App\Twig\Components\BoostComponent 16.0 MiB 7.24 ms
Input props
[
  "subject" => App\Entity\EntryComment {#5309
    +user: App\Entity\User {#5322
      +avatar: null
      +cover: null
      +email: "CallOfTheWild@lemmy.world"
      +username: "@CallOfTheWild@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727656077 {#5306
        date: 2024-09-30 02:27:57.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5323 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5325 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5327 …}
      +entries: Doctrine\ORM\PersistentCollection {#5329 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5331 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5333 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5335 …}
      +posts: Doctrine\ORM\PersistentCollection {#5337 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5339 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5341 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5343 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5345 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5347 …}
      +follows: Doctrine\ORM\PersistentCollection {#5349 …}
      +followers: Doctrine\ORM\PersistentCollection {#5351 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5353 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5355 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5357 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5359 …}
      +reports: Doctrine\ORM\PersistentCollection {#5361 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5363 …}
      +violations: Doctrine\ORM\PersistentCollection {#5365 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5367 …}
      +awards: Doctrine\ORM\PersistentCollection {#5369 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5371 …}
      +categories: Doctrine\ORM\PersistentCollection {#5373 …}
      -id: 56140
      -password: "$2y$13$MT58iKH4KlhmvVAwoVspKeyy0xLt14GPM5Vag4bCLE1XvVKkeIsCm"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5375 …}
      +apId: "CallOfTheWild@lemmy.world"
      +apProfileId: "https://lemmy.world/u/CallOfTheWild"
      +apPublicUrl: "https://lemmy.world/u/CallOfTheWild"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "CallOfTheWild"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729283562 {#5307
        date: 2024-10-18 22:32:42.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697054349 {#5308
        date: 2023-10-11 21:59:09.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Saving"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698415589 {#5304
      date: 2023-10-27 16:06:29.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5310 …}
    +nested: Doctrine\ORM\PersistentCollection {#5312 …}
    +votes: Doctrine\ORM\PersistentCollection {#5314 …}
    +reports: Doctrine\ORM\PersistentCollection {#5316 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5318 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5320 …}
    -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 {#5305
      date: 2023-10-27 16:06:29.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\BoostComponent {#9125
  +formDest: "entry_comment"
  +subject: App\Entity\EntryComment {#5309
    +user: App\Entity\User {#5322
      +avatar: null
      +cover: null
      +email: "CallOfTheWild@lemmy.world"
      +username: "@CallOfTheWild@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727656077 {#5306
        date: 2024-09-30 02:27:57.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5323 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5325 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5327 …}
      +entries: Doctrine\ORM\PersistentCollection {#5329 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5331 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5333 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5335 …}
      +posts: Doctrine\ORM\PersistentCollection {#5337 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5339 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5341 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5343 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5345 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5347 …}
      +follows: Doctrine\ORM\PersistentCollection {#5349 …}
      +followers: Doctrine\ORM\PersistentCollection {#5351 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5353 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5355 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5357 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5359 …}
      +reports: Doctrine\ORM\PersistentCollection {#5361 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5363 …}
      +violations: Doctrine\ORM\PersistentCollection {#5365 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5367 …}
      +awards: Doctrine\ORM\PersistentCollection {#5369 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5371 …}
      +categories: Doctrine\ORM\PersistentCollection {#5373 …}
      -id: 56140
      -password: "$2y$13$MT58iKH4KlhmvVAwoVspKeyy0xLt14GPM5Vag4bCLE1XvVKkeIsCm"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5375 …}
      +apId: "CallOfTheWild@lemmy.world"
      +apProfileId: "https://lemmy.world/u/CallOfTheWild"
      +apPublicUrl: "https://lemmy.world/u/CallOfTheWild"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "CallOfTheWild"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729283562 {#5307
        date: 2024-10-18 22:32:42.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697054349 {#5308
        date: 2023-10-11 21:59:09.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Saving"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698415589 {#5304
      date: 2023-10-27 16:06:29.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5310 …}
    +nested: Doctrine\ORM\PersistentCollection {#5312 …}
    +votes: Doctrine\ORM\PersistentCollection {#5314 …}
    +reports: Doctrine\ORM\PersistentCollection {#5316 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5318 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5320 …}
    -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 {#5305
      date: 2023-10-27 16:06:29.0 +02:00
    }
  }
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
entry_comments_nested App\Twig\Components\EntryCommentsNestedComponent 16.0 MiB 52.27 ms
Input props
[
  "comment" => App\Entity\EntryComment {#5309
    +user: App\Entity\User {#5322
      +avatar: null
      +cover: null
      +email: "CallOfTheWild@lemmy.world"
      +username: "@CallOfTheWild@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727656077 {#5306
        date: 2024-09-30 02:27:57.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5323 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5325 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5327 …}
      +entries: Doctrine\ORM\PersistentCollection {#5329 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5331 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5333 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5335 …}
      +posts: Doctrine\ORM\PersistentCollection {#5337 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5339 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5341 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5343 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5345 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5347 …}
      +follows: Doctrine\ORM\PersistentCollection {#5349 …}
      +followers: Doctrine\ORM\PersistentCollection {#5351 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5353 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5355 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5357 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5359 …}
      +reports: Doctrine\ORM\PersistentCollection {#5361 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5363 …}
      +violations: Doctrine\ORM\PersistentCollection {#5365 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5367 …}
      +awards: Doctrine\ORM\PersistentCollection {#5369 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5371 …}
      +categories: Doctrine\ORM\PersistentCollection {#5373 …}
      -id: 56140
      -password: "$2y$13$MT58iKH4KlhmvVAwoVspKeyy0xLt14GPM5Vag4bCLE1XvVKkeIsCm"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5375 …}
      +apId: "CallOfTheWild@lemmy.world"
      +apProfileId: "https://lemmy.world/u/CallOfTheWild"
      +apPublicUrl: "https://lemmy.world/u/CallOfTheWild"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "CallOfTheWild"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729283562 {#5307
        date: 2024-10-18 22:32:42.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697054349 {#5308
        date: 2023-10-11 21:59:09.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Saving"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698415589 {#5304
      date: 2023-10-27 16:06:29.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5310 …}
    +nested: Doctrine\ORM\PersistentCollection {#5312 …}
    +votes: Doctrine\ORM\PersistentCollection {#5314 …}
    +reports: Doctrine\ORM\PersistentCollection {#5316 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5318 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5320 …}
    -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 {#5305
      date: 2023-10-27 16:06:29.0 +02:00
    }
  }
  "level" => 1
  "showNested" => true
  "view" => "tree"
]
Attributes
[
  "showNested" => true
]
Component
App\Twig\Components\EntryCommentsNestedComponent {#9365
  +comment: App\Entity\EntryComment {#5309
    +user: App\Entity\User {#5322
      +avatar: null
      +cover: null
      +email: "CallOfTheWild@lemmy.world"
      +username: "@CallOfTheWild@lemmy.world"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1727656077 {#5306
        date: 2024-09-30 02:27:57.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5323 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5325 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5327 …}
      +entries: Doctrine\ORM\PersistentCollection {#5329 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5331 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5333 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5335 …}
      +posts: Doctrine\ORM\PersistentCollection {#5337 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5339 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5341 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5343 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5345 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5347 …}
      +follows: Doctrine\ORM\PersistentCollection {#5349 …}
      +followers: Doctrine\ORM\PersistentCollection {#5351 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5353 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5355 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5357 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5359 …}
      +reports: Doctrine\ORM\PersistentCollection {#5361 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5363 …}
      +violations: Doctrine\ORM\PersistentCollection {#5365 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5367 …}
      +awards: Doctrine\ORM\PersistentCollection {#5369 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5371 …}
      +categories: Doctrine\ORM\PersistentCollection {#5373 …}
      -id: 56140
      -password: "$2y$13$MT58iKH4KlhmvVAwoVspKeyy0xLt14GPM5Vag4bCLE1XvVKkeIsCm"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5375 …}
      +apId: "CallOfTheWild@lemmy.world"
      +apProfileId: "https://lemmy.world/u/CallOfTheWild"
      +apPublicUrl: "https://lemmy.world/u/CallOfTheWild"
      +apFollowersUrl: null
      +apInboxUrl: "https://lemmy.world/inbox"
      +apDomain: "lemmy.world"
      +apPreferredUsername: "CallOfTheWild"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729283562 {#5307
        date: 2024-10-18 22:32:42.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1697054349 {#5308
        date: 2023-10-11 21:59:09.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Saving"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698415589 {#5304
      date: 2023-10-27 16:06:29.0 +02:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5310 …}
    +nested: Doctrine\ORM\PersistentCollection {#5312 …}
    +votes: Doctrine\ORM\PersistentCollection {#5314 …}
    +reports: Doctrine\ORM\PersistentCollection {#5316 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5318 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5320 …}
    -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 {#5305
      date: 2023-10-27 16:06:29.0 +02:00
    }
  }
  +nestedComments: []
  +level: 1
  +view: "tree"
  -entryCommentRepository: App\Repository\EntryCommentRepository {#555 …}
  -twig: Twig\Environment {#1252 …}
  -security: Symfony\Bundle\SecurityBundle\Security {#1101 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
}
entry_comment App\Twig\Components\EntryCommentComponent 16.0 MiB 72.73 ms
Input props
[
  "comment" => App\Entity\EntryComment {#5382
    +user: App\Entity\User {#5395
      +avatar: null
      +cover: null
      +email: "Gooey0210@sh.itjust.works"
      +username: "@Gooey0210@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1729550030 {#5379
        date: 2024-10-22 00:33:50.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5396 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5398 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5400 …}
      +entries: Doctrine\ORM\PersistentCollection {#5402 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5404 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5406 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5408 …}
      +posts: Doctrine\ORM\PersistentCollection {#5410 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5412 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5414 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5416 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5418 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5420 …}
      +follows: Doctrine\ORM\PersistentCollection {#5422 …}
      +followers: Doctrine\ORM\PersistentCollection {#5424 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5426 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5428 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5430 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5432 …}
      +reports: Doctrine\ORM\PersistentCollection {#5434 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5436 …}
      +violations: Doctrine\ORM\PersistentCollection {#5438 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5440 …}
      +awards: Doctrine\ORM\PersistentCollection {#5442 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5444 …}
      +categories: Doctrine\ORM\PersistentCollection {#5446 …}
      -id: 54329
      -password: "$2y$13$RtmYmbeNPhKJn.B78pWEX.Z2UIGF5h7Dw9blvH9WXtbJ33UdM9Gze"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5448 …}
      +apId: "Gooey0210@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/Gooey0210"
      +apPublicUrl: "https://sh.itjust.works/u/Gooey0210"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "Gooey0210"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729146266 {#5380
        date: 2024-10-17 08:24:26.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1696838162 {#5381
        date: 2023-10-09 09:56:02.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Look into jellyfin + jellyserr"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698767930 {#5377
      date: 2023-10-31 16:58:50.0 +01:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5383 …}
    +nested: Doctrine\ORM\PersistentCollection {#5385 …}
    +votes: Doctrine\ORM\PersistentCollection {#5387 …}
    +reports: Doctrine\ORM\PersistentCollection {#5389 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5391 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5393 …}
    -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 {#5378
      date: 2023-10-31 16:58:50.0 +01:00
    }
  }
  "showNested" => true
  "dateAsUrl" => false
  "showMagazineName" => false
  "showEntryTitle" => false
]
Attributes
[]
Component
App\Twig\Components\EntryCommentComponent {#9435
  +comment: App\Entity\EntryComment {#5382
    +user: App\Entity\User {#5395
      +avatar: null
      +cover: null
      +email: "Gooey0210@sh.itjust.works"
      +username: "@Gooey0210@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1729550030 {#5379
        date: 2024-10-22 00:33:50.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5396 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5398 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5400 …}
      +entries: Doctrine\ORM\PersistentCollection {#5402 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5404 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5406 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5408 …}
      +posts: Doctrine\ORM\PersistentCollection {#5410 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5412 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5414 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5416 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5418 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5420 …}
      +follows: Doctrine\ORM\PersistentCollection {#5422 …}
      +followers: Doctrine\ORM\PersistentCollection {#5424 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5426 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5428 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5430 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5432 …}
      +reports: Doctrine\ORM\PersistentCollection {#5434 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5436 …}
      +violations: Doctrine\ORM\PersistentCollection {#5438 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5440 …}
      +awards: Doctrine\ORM\PersistentCollection {#5442 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5444 …}
      +categories: Doctrine\ORM\PersistentCollection {#5446 …}
      -id: 54329
      -password: "$2y$13$RtmYmbeNPhKJn.B78pWEX.Z2UIGF5h7Dw9blvH9WXtbJ33UdM9Gze"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5448 …}
      +apId: "Gooey0210@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/Gooey0210"
      +apPublicUrl: "https://sh.itjust.works/u/Gooey0210"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "Gooey0210"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729146266 {#5380
        date: 2024-10-17 08:24:26.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1696838162 {#5381
        date: 2023-10-09 09:56:02.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Look into jellyfin + jellyserr"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698767930 {#5377
      date: 2023-10-31 16:58:50.0 +01:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5383 …}
    +nested: Doctrine\ORM\PersistentCollection {#5385 …}
    +votes: Doctrine\ORM\PersistentCollection {#5387 …}
    +reports: Doctrine\ORM\PersistentCollection {#5389 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5391 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5393 …}
    -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 {#5378
      date: 2023-10-31 16:58:50.0 +01:00
    }
  }
  +showMagazineName: false
  +showEntryTitle: false
  +showNested: true
  +level: 1
  +canSeeTrash: false
  +dateAsUrl: false
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
  -authorizationChecker: Symfony\Component\Security\Core\Authorization\AuthorizationChecker {#931 …}
}
user_inline App\Twig\Components\UserInlineComponent 16.0 MiB 0.23 ms
Input props
[
  "user" => App\Entity\User {#5395
    +avatar: null
    +cover: null
    +email: "Gooey0210@sh.itjust.works"
    +username: "@Gooey0210@sh.itjust.works"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1729550030 {#5379
      date: 2024-10-22 00:33:50.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5396 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5398 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5400 …}
    +entries: Doctrine\ORM\PersistentCollection {#5402 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5404 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5406 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5408 …}
    +posts: Doctrine\ORM\PersistentCollection {#5410 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5412 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5414 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5416 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5418 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5420 …}
    +follows: Doctrine\ORM\PersistentCollection {#5422 …}
    +followers: Doctrine\ORM\PersistentCollection {#5424 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5426 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5428 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5430 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5432 …}
    +reports: Doctrine\ORM\PersistentCollection {#5434 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5436 …}
    +violations: Doctrine\ORM\PersistentCollection {#5438 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5440 …}
    +awards: Doctrine\ORM\PersistentCollection {#5442 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5444 …}
    +categories: Doctrine\ORM\PersistentCollection {#5446 …}
    -id: 54329
    -password: "$2y$13$RtmYmbeNPhKJn.B78pWEX.Z2UIGF5h7Dw9blvH9WXtbJ33UdM9Gze"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5448 …}
    +apId: "Gooey0210@sh.itjust.works"
    +apProfileId: "https://sh.itjust.works/u/Gooey0210"
    +apPublicUrl: "https://sh.itjust.works/u/Gooey0210"
    +apFollowersUrl: null
    +apInboxUrl: "https://sh.itjust.works/inbox"
    +apDomain: "sh.itjust.works"
    +apPreferredUsername: "Gooey0210"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729146266 {#5380
      date: 2024-10-17 08:24:26.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1696838162 {#5381
      date: 2023-10-09 09:56:02.0 +02:00
    }
  }
  "showAvatar" => false
]
Attributes
[]
Component
App\Twig\Components\UserInlineComponent {#9480
  +user: App\Entity\User {#5395
    +avatar: null
    +cover: null
    +email: "Gooey0210@sh.itjust.works"
    +username: "@Gooey0210@sh.itjust.works"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1729550030 {#5379
      date: 2024-10-22 00:33:50.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5396 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5398 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5400 …}
    +entries: Doctrine\ORM\PersistentCollection {#5402 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5404 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5406 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5408 …}
    +posts: Doctrine\ORM\PersistentCollection {#5410 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5412 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5414 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5416 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5418 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5420 …}
    +follows: Doctrine\ORM\PersistentCollection {#5422 …}
    +followers: Doctrine\ORM\PersistentCollection {#5424 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5426 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5428 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5430 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5432 …}
    +reports: Doctrine\ORM\PersistentCollection {#5434 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5436 …}
    +violations: Doctrine\ORM\PersistentCollection {#5438 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5440 …}
    +awards: Doctrine\ORM\PersistentCollection {#5442 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5444 …}
    +categories: Doctrine\ORM\PersistentCollection {#5446 …}
    -id: 54329
    -password: "$2y$13$RtmYmbeNPhKJn.B78pWEX.Z2UIGF5h7Dw9blvH9WXtbJ33UdM9Gze"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5448 …}
    +apId: "Gooey0210@sh.itjust.works"
    +apProfileId: "https://sh.itjust.works/u/Gooey0210"
    +apPublicUrl: "https://sh.itjust.works/u/Gooey0210"
    +apFollowersUrl: null
    +apInboxUrl: "https://sh.itjust.works/inbox"
    +apDomain: "sh.itjust.works"
    +apPreferredUsername: "Gooey0210"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729146266 {#5380
      date: 2024-10-17 08:24:26.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1696838162 {#5381
      date: 2023-10-09 09:56:02.0 +02:00
    }
  }
  +showAvatar: false
}
date App\Twig\Components\DateComponent 16.0 MiB 1.20 ms
Input props
[
  "date" => DateTimeImmutable @1698767930 {#5378
    date: 2023-10-31 16:58:50.0 +01:00
  }
]
Attributes
[]
Component
App\Twig\Components\DateComponent {#9535
  +date: DateTimeImmutable @1698767930 {#5378
    date: 2023-10-31 16:58:50.0 +01:00
  }
}
date_edited App\Twig\Components\DateEditedComponent 16.0 MiB 1.45 ms
Input props
[
  "createdAt" => DateTimeImmutable @1698767930 {#5378
    date: 2023-10-31 16:58:50.0 +01:00
  }
  "editedAt" => null
]
Attributes
[]
Component
App\Twig\Components\DateEditedComponent {#9589
  +createdAt: DateTimeImmutable @1698767930 {#5378
    date: 2023-10-31 16:58:50.0 +01:00
  }
  +editedAt: null
}
user_avatar App\Twig\Components\UserAvatarComponent 16.0 MiB 1.04 ms
Input props
[
  "user" => App\Entity\User {#5395
    +avatar: null
    +cover: null
    +email: "Gooey0210@sh.itjust.works"
    +username: "@Gooey0210@sh.itjust.works"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1729550030 {#5379
      date: 2024-10-22 00:33:50.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5396 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5398 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5400 …}
    +entries: Doctrine\ORM\PersistentCollection {#5402 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5404 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5406 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5408 …}
    +posts: Doctrine\ORM\PersistentCollection {#5410 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5412 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5414 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5416 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5418 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5420 …}
    +follows: Doctrine\ORM\PersistentCollection {#5422 …}
    +followers: Doctrine\ORM\PersistentCollection {#5424 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5426 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5428 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5430 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5432 …}
    +reports: Doctrine\ORM\PersistentCollection {#5434 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5436 …}
    +violations: Doctrine\ORM\PersistentCollection {#5438 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5440 …}
    +awards: Doctrine\ORM\PersistentCollection {#5442 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5444 …}
    +categories: Doctrine\ORM\PersistentCollection {#5446 …}
    -id: 54329
    -password: "$2y$13$RtmYmbeNPhKJn.B78pWEX.Z2UIGF5h7Dw9blvH9WXtbJ33UdM9Gze"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5448 …}
    +apId: "Gooey0210@sh.itjust.works"
    +apProfileId: "https://sh.itjust.works/u/Gooey0210"
    +apPublicUrl: "https://sh.itjust.works/u/Gooey0210"
    +apFollowersUrl: null
    +apInboxUrl: "https://sh.itjust.works/inbox"
    +apDomain: "sh.itjust.works"
    +apPreferredUsername: "Gooey0210"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729146266 {#5380
      date: 2024-10-17 08:24:26.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1696838162 {#5381
      date: 2023-10-09 09:56:02.0 +02:00
    }
  }
  "width" => 40
  "height" => 40
  "asLink" => true
]
Attributes
[]
Component
App\Twig\Components\UserAvatarComponent {#9643
  +width: 40
  +height: 40
  +user: App\Entity\User {#5395
    +avatar: null
    +cover: null
    +email: "Gooey0210@sh.itjust.works"
    +username: "@Gooey0210@sh.itjust.works"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: null
    +lastActive: DateTime @1729550030 {#5379
      date: 2024-10-22 00:33:50.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: false
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: true
    +notifyOnNewEntryCommentReply: true
    +notifyOnNewPost: false
    +notifyOnNewPostReply: true
    +notifyOnNewPostCommentReply: true
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#5396 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5398 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#5400 …}
    +entries: Doctrine\ORM\PersistentCollection {#5402 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#5404 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#5406 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5408 …}
    +posts: Doctrine\ORM\PersistentCollection {#5410 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#5412 …}
    +postComments: Doctrine\ORM\PersistentCollection {#5414 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#5416 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#5418 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#5420 …}
    +follows: Doctrine\ORM\PersistentCollection {#5422 …}
    +followers: Doctrine\ORM\PersistentCollection {#5424 …}
    +blocks: Doctrine\ORM\PersistentCollection {#5426 …}
    +blockers: Doctrine\ORM\PersistentCollection {#5428 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#5430 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#5432 …}
    +reports: Doctrine\ORM\PersistentCollection {#5434 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5436 …}
    +violations: Doctrine\ORM\PersistentCollection {#5438 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5440 …}
    +awards: Doctrine\ORM\PersistentCollection {#5442 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#5444 …}
    +categories: Doctrine\ORM\PersistentCollection {#5446 …}
    -id: 54329
    -password: "$2y$13$RtmYmbeNPhKJn.B78pWEX.Z2UIGF5h7Dw9blvH9WXtbJ33UdM9Gze"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5448 …}
    +apId: "Gooey0210@sh.itjust.works"
    +apProfileId: "https://sh.itjust.works/u/Gooey0210"
    +apPublicUrl: "https://sh.itjust.works/u/Gooey0210"
    +apFollowersUrl: null
    +apInboxUrl: "https://sh.itjust.works/inbox"
    +apDomain: "sh.itjust.works"
    +apPreferredUsername: "Gooey0210"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729146266 {#5380
      date: 2024-10-17 08:24:26.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1696838162 {#5381
      date: 2023-10-09 09:56:02.0 +02:00
    }
  }
  +asLink: true
}
vote App\Twig\Components\VoteComponent 16.0 MiB 2.95 ms
Input props
[
  "subject" => App\Entity\EntryComment {#5382
    +user: App\Entity\User {#5395
      +avatar: null
      +cover: null
      +email: "Gooey0210@sh.itjust.works"
      +username: "@Gooey0210@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1729550030 {#5379
        date: 2024-10-22 00:33:50.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5396 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5398 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5400 …}
      +entries: Doctrine\ORM\PersistentCollection {#5402 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5404 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5406 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5408 …}
      +posts: Doctrine\ORM\PersistentCollection {#5410 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5412 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5414 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5416 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5418 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5420 …}
      +follows: Doctrine\ORM\PersistentCollection {#5422 …}
      +followers: Doctrine\ORM\PersistentCollection {#5424 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5426 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5428 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5430 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5432 …}
      +reports: Doctrine\ORM\PersistentCollection {#5434 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5436 …}
      +violations: Doctrine\ORM\PersistentCollection {#5438 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5440 …}
      +awards: Doctrine\ORM\PersistentCollection {#5442 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5444 …}
      +categories: Doctrine\ORM\PersistentCollection {#5446 …}
      -id: 54329
      -password: "$2y$13$RtmYmbeNPhKJn.B78pWEX.Z2UIGF5h7Dw9blvH9WXtbJ33UdM9Gze"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5448 …}
      +apId: "Gooey0210@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/Gooey0210"
      +apPublicUrl: "https://sh.itjust.works/u/Gooey0210"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "Gooey0210"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729146266 {#5380
        date: 2024-10-17 08:24:26.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1696838162 {#5381
        date: 2023-10-09 09:56:02.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Look into jellyfin + jellyserr"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698767930 {#5377
      date: 2023-10-31 16:58:50.0 +01:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5383 …}
    +nested: Doctrine\ORM\PersistentCollection {#5385 …}
    +votes: Doctrine\ORM\PersistentCollection {#5387 …}
    +reports: Doctrine\ORM\PersistentCollection {#5389 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5391 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5393 …}
    -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 {#5378
      date: 2023-10-31 16:58:50.0 +01:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\VoteComponent {#9712
  +subject: App\Entity\EntryComment {#5382
    +user: App\Entity\User {#5395
      +avatar: null
      +cover: null
      +email: "Gooey0210@sh.itjust.works"
      +username: "@Gooey0210@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1729550030 {#5379
        date: 2024-10-22 00:33:50.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5396 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5398 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5400 …}
      +entries: Doctrine\ORM\PersistentCollection {#5402 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5404 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5406 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5408 …}
      +posts: Doctrine\ORM\PersistentCollection {#5410 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5412 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5414 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5416 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5418 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5420 …}
      +follows: Doctrine\ORM\PersistentCollection {#5422 …}
      +followers: Doctrine\ORM\PersistentCollection {#5424 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5426 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5428 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5430 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5432 …}
      +reports: Doctrine\ORM\PersistentCollection {#5434 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5436 …}
      +violations: Doctrine\ORM\PersistentCollection {#5438 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5440 …}
      +awards: Doctrine\ORM\PersistentCollection {#5442 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5444 …}
      +categories: Doctrine\ORM\PersistentCollection {#5446 …}
      -id: 54329
      -password: "$2y$13$RtmYmbeNPhKJn.B78pWEX.Z2UIGF5h7Dw9blvH9WXtbJ33UdM9Gze"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5448 …}
      +apId: "Gooey0210@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/Gooey0210"
      +apPublicUrl: "https://sh.itjust.works/u/Gooey0210"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "Gooey0210"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729146266 {#5380
        date: 2024-10-17 08:24:26.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1696838162 {#5381
        date: 2023-10-09 09:56:02.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Look into jellyfin + jellyserr"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698767930 {#5377
      date: 2023-10-31 16:58:50.0 +01:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5383 …}
    +nested: Doctrine\ORM\PersistentCollection {#5385 …}
    +votes: Doctrine\ORM\PersistentCollection {#5387 …}
    +reports: Doctrine\ORM\PersistentCollection {#5389 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5391 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5393 …}
    -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 {#5378
      date: 2023-10-31 16:58:50.0 +01:00
    }
  }
  +formDest: "entry_comment"
  +showDownvote: true
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
boost App\Twig\Components\BoostComponent 16.0 MiB 6.11 ms
Input props
[
  "subject" => App\Entity\EntryComment {#5382
    +user: App\Entity\User {#5395
      +avatar: null
      +cover: null
      +email: "Gooey0210@sh.itjust.works"
      +username: "@Gooey0210@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1729550030 {#5379
        date: 2024-10-22 00:33:50.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5396 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5398 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5400 …}
      +entries: Doctrine\ORM\PersistentCollection {#5402 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5404 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5406 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5408 …}
      +posts: Doctrine\ORM\PersistentCollection {#5410 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5412 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5414 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5416 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5418 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5420 …}
      +follows: Doctrine\ORM\PersistentCollection {#5422 …}
      +followers: Doctrine\ORM\PersistentCollection {#5424 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5426 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5428 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5430 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5432 …}
      +reports: Doctrine\ORM\PersistentCollection {#5434 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5436 …}
      +violations: Doctrine\ORM\PersistentCollection {#5438 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5440 …}
      +awards: Doctrine\ORM\PersistentCollection {#5442 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5444 …}
      +categories: Doctrine\ORM\PersistentCollection {#5446 …}
      -id: 54329
      -password: "$2y$13$RtmYmbeNPhKJn.B78pWEX.Z2UIGF5h7Dw9blvH9WXtbJ33UdM9Gze"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5448 …}
      +apId: "Gooey0210@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/Gooey0210"
      +apPublicUrl: "https://sh.itjust.works/u/Gooey0210"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "Gooey0210"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729146266 {#5380
        date: 2024-10-17 08:24:26.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1696838162 {#5381
        date: 2023-10-09 09:56:02.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Look into jellyfin + jellyserr"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698767930 {#5377
      date: 2023-10-31 16:58:50.0 +01:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5383 …}
    +nested: Doctrine\ORM\PersistentCollection {#5385 …}
    +votes: Doctrine\ORM\PersistentCollection {#5387 …}
    +reports: Doctrine\ORM\PersistentCollection {#5389 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5391 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5393 …}
    -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 {#5378
      date: 2023-10-31 16:58:50.0 +01:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\BoostComponent {#9769
  +formDest: "entry_comment"
  +subject: App\Entity\EntryComment {#5382
    +user: App\Entity\User {#5395
      +avatar: null
      +cover: null
      +email: "Gooey0210@sh.itjust.works"
      +username: "@Gooey0210@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1729550030 {#5379
        date: 2024-10-22 00:33:50.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5396 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5398 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5400 …}
      +entries: Doctrine\ORM\PersistentCollection {#5402 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5404 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5406 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5408 …}
      +posts: Doctrine\ORM\PersistentCollection {#5410 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5412 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5414 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5416 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5418 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5420 …}
      +follows: Doctrine\ORM\PersistentCollection {#5422 …}
      +followers: Doctrine\ORM\PersistentCollection {#5424 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5426 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5428 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5430 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5432 …}
      +reports: Doctrine\ORM\PersistentCollection {#5434 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5436 …}
      +violations: Doctrine\ORM\PersistentCollection {#5438 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5440 …}
      +awards: Doctrine\ORM\PersistentCollection {#5442 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5444 …}
      +categories: Doctrine\ORM\PersistentCollection {#5446 …}
      -id: 54329
      -password: "$2y$13$RtmYmbeNPhKJn.B78pWEX.Z2UIGF5h7Dw9blvH9WXtbJ33UdM9Gze"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5448 …}
      +apId: "Gooey0210@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/Gooey0210"
      +apPublicUrl: "https://sh.itjust.works/u/Gooey0210"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "Gooey0210"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729146266 {#5380
        date: 2024-10-17 08:24:26.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1696838162 {#5381
        date: 2023-10-09 09:56:02.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Look into jellyfin + jellyserr"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698767930 {#5377
      date: 2023-10-31 16:58:50.0 +01:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5383 …}
    +nested: Doctrine\ORM\PersistentCollection {#5385 …}
    +votes: Doctrine\ORM\PersistentCollection {#5387 …}
    +reports: Doctrine\ORM\PersistentCollection {#5389 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5391 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5393 …}
    -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 {#5378
      date: 2023-10-31 16:58:50.0 +01:00
    }
  }
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
}
entry_comments_nested App\Twig\Components\EntryCommentsNestedComponent 16.0 MiB 14.71 ms
Input props
[
  "comment" => App\Entity\EntryComment {#5382
    +user: App\Entity\User {#5395
      +avatar: null
      +cover: null
      +email: "Gooey0210@sh.itjust.works"
      +username: "@Gooey0210@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1729550030 {#5379
        date: 2024-10-22 00:33:50.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5396 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5398 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5400 …}
      +entries: Doctrine\ORM\PersistentCollection {#5402 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5404 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5406 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5408 …}
      +posts: Doctrine\ORM\PersistentCollection {#5410 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5412 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5414 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5416 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5418 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5420 …}
      +follows: Doctrine\ORM\PersistentCollection {#5422 …}
      +followers: Doctrine\ORM\PersistentCollection {#5424 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5426 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5428 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5430 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5432 …}
      +reports: Doctrine\ORM\PersistentCollection {#5434 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5436 …}
      +violations: Doctrine\ORM\PersistentCollection {#5438 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5440 …}
      +awards: Doctrine\ORM\PersistentCollection {#5442 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5444 …}
      +categories: Doctrine\ORM\PersistentCollection {#5446 …}
      -id: 54329
      -password: "$2y$13$RtmYmbeNPhKJn.B78pWEX.Z2UIGF5h7Dw9blvH9WXtbJ33UdM9Gze"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5448 …}
      +apId: "Gooey0210@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/Gooey0210"
      +apPublicUrl: "https://sh.itjust.works/u/Gooey0210"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "Gooey0210"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729146266 {#5380
        date: 2024-10-17 08:24:26.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1696838162 {#5381
        date: 2023-10-09 09:56:02.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Look into jellyfin + jellyserr"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698767930 {#5377
      date: 2023-10-31 16:58:50.0 +01:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5383 …}
    +nested: Doctrine\ORM\PersistentCollection {#5385 …}
    +votes: Doctrine\ORM\PersistentCollection {#5387 …}
    +reports: Doctrine\ORM\PersistentCollection {#5389 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5391 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5393 …}
    -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 {#5378
      date: 2023-10-31 16:58:50.0 +01:00
    }
  }
  "level" => 1
  "showNested" => true
  "view" => "tree"
]
Attributes
[
  "showNested" => true
]
Component
App\Twig\Components\EntryCommentsNestedComponent {#10009
  +comment: App\Entity\EntryComment {#5382
    +user: App\Entity\User {#5395
      +avatar: null
      +cover: null
      +email: "Gooey0210@sh.itjust.works"
      +username: "@Gooey0210@sh.itjust.works"
      +roles: []
      +followersCount: 0
      +homepage: "front"
      +about: null
      +lastActive: DateTime @1729550030 {#5379
        date: 2024-10-22 00:33:50.0 +02:00
      }
      +markedForDeletionAt: null
      +fields: null
      +oauthGithubId: null
      +oauthGoogleId: null
      +oauthFacebookId: null
      +oauthKeycloakId: null
      +hideAdult: true
      +showSubscribedUsers: true
      +showSubscribedMagazines: true
      +showSubscribedDomains: true
      +preferredLanguages: []
      +featuredMagazines: null
      +showProfileSubscriptions: false
      +showProfileFollowings: true
      +markNewComments: false
      +notifyOnNewEntry: false
      +notifyOnNewEntryReply: true
      +notifyOnNewEntryCommentReply: true
      +notifyOnNewPost: false
      +notifyOnNewPostReply: true
      +notifyOnNewPostCommentReply: true
      +addMentionsEntries: false
      +addMentionsPosts: true
      +isBanned: false
      +isVerified: false
      +isDeleted: false
      +isBot: false
      +spamProtection: true
      +customCss: null
      +ignoreMagazinesCustomCss: false
      +moderatorTokens: Doctrine\ORM\PersistentCollection {#5396 …}
      +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#5398 …}
      +moderatorRequests: Doctrine\ORM\PersistentCollection {#5400 …}
      +entries: Doctrine\ORM\PersistentCollection {#5402 …}
      +entryVotes: Doctrine\ORM\PersistentCollection {#5404 …}
      +entryComments: Doctrine\ORM\PersistentCollection {#5406 …}
      +entryCommentVotes: Doctrine\ORM\PersistentCollection {#5408 …}
      +posts: Doctrine\ORM\PersistentCollection {#5410 …}
      +postVotes: Doctrine\ORM\PersistentCollection {#5412 …}
      +postComments: Doctrine\ORM\PersistentCollection {#5414 …}
      +postCommentVotes: Doctrine\ORM\PersistentCollection {#5416 …}
      +subscriptions: Doctrine\ORM\PersistentCollection {#5418 …}
      +subscribedDomains: Doctrine\ORM\PersistentCollection {#5420 …}
      +follows: Doctrine\ORM\PersistentCollection {#5422 …}
      +followers: Doctrine\ORM\PersistentCollection {#5424 …}
      +blocks: Doctrine\ORM\PersistentCollection {#5426 …}
      +blockers: Doctrine\ORM\PersistentCollection {#5428 …}
      +blockedMagazines: Doctrine\ORM\PersistentCollection {#5430 …}
      +blockedDomains: Doctrine\ORM\PersistentCollection {#5432 …}
      +reports: Doctrine\ORM\PersistentCollection {#5434 …}
      +favourites: Doctrine\ORM\PersistentCollection {#5436 …}
      +violations: Doctrine\ORM\PersistentCollection {#5438 …}
      +notifications: Doctrine\ORM\PersistentCollection {#5440 …}
      +awards: Doctrine\ORM\PersistentCollection {#5442 …}
      +subscribedCategories: Doctrine\ORM\PersistentCollection {#5444 …}
      +categories: Doctrine\ORM\PersistentCollection {#5446 …}
      -id: 54329
      -password: "$2y$13$RtmYmbeNPhKJn.B78pWEX.Z2UIGF5h7Dw9blvH9WXtbJ33UdM9Gze"
      -totpSecret: null
      -totpBackupCodes: []
      -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#5448 …}
      +apId: "Gooey0210@sh.itjust.works"
      +apProfileId: "https://sh.itjust.works/u/Gooey0210"
      +apPublicUrl: "https://sh.itjust.works/u/Gooey0210"
      +apFollowersUrl: null
      +apInboxUrl: "https://sh.itjust.works/inbox"
      +apDomain: "sh.itjust.works"
      +apPreferredUsername: "Gooey0210"
      +apDiscoverable: true
      +apManuallyApprovesFollowers: false
      +privateKey: null
      +publicKey: null
      +apFetchedAt: DateTime @1729146266 {#5380
        date: 2024-10-17 08:24:26.0 +02:00
      }
      +apDeletedAt: null
      +apTimeoutAt: null
      +visibility: "visible             "
      +createdAt: DateTimeImmutable @1696838162 {#5381
        date: 2023-10-09 09:56:02.0 +02:00
      }
    }
    +entry: App\Entity\Entry {#2412
      +user: Proxies\__CG__\App\Entity\User {#1978
        +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
        +cover: null
        +email: "db0@lemmy.dbzer0.com"
        +username: "@db0@lemmy.dbzer0.com"
        +roles: []
        +followersCount: 0
        +homepage: "front"
        +about: """
          Epicurean Revolutionary Libertarian Socialist\n
          \n
          I make [FOSS](https://github.com/db0) things:\n
          \n
          - [AI Horde](https://aihorde.net)\n
          - [Fediseer](https://fediseer.com)\n
          - [Pythörhead](https://github.com/db0/pythorhead)\n
          - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
          \n
          wiki-user: db0
          """
        +lastActive: DateTime @1729133551 {#1516
          date: 2024-10-17 04:52:31.0 +02:00
        }
        +markedForDeletionAt: null
        +fields: null
        +oauthGithubId: null
        +oauthGoogleId: null
        +oauthFacebookId: null
        +oauthKeycloakId: null
        +hideAdult: true
        +showSubscribedUsers: true
        +showSubscribedMagazines: true
        +showSubscribedDomains: true
        +preferredLanguages: []
        +featuredMagazines: null
        +showProfileSubscriptions: true
        +showProfileFollowings: true
        +markNewComments: false
        +notifyOnNewEntry: false
        +notifyOnNewEntryReply: false
        +notifyOnNewEntryCommentReply: false
        +notifyOnNewPost: false
        +notifyOnNewPostReply: false
        +notifyOnNewPostCommentReply: false
        +addMentionsEntries: false
        +addMentionsPosts: true
        +isBanned: false
        +isVerified: false
        +isDeleted: false
        +isBot: false
        +spamProtection: true
        +customCss: null
        +ignoreMagazinesCustomCss: false
        +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
        +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
        +entries: Doctrine\ORM\PersistentCollection {#1713 …}
        +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
        +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
        +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
        +posts: Doctrine\ORM\PersistentCollection {#1738 …}
        +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
        +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
        +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
        +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
        +follows: Doctrine\ORM\PersistentCollection {#1449 …}
        +followers: Doctrine\ORM\PersistentCollection {#1636 …}
        +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
        +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
        +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
        +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
        +reports: Doctrine\ORM\PersistentCollection {#1456 …}
        +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
        +violations: Doctrine\ORM\PersistentCollection {#1700 …}
        +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
        +awards: Doctrine\ORM\PersistentCollection {#1440 …}
        +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
        +categories: Doctrine\ORM\PersistentCollection {#1648 …}
        -id: 3194
        -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
        -totpSecret: null
        -totpBackupCodes: []
        -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
        +apId: "db0@lemmy.dbzer0.com"
        +apProfileId: "https://lemmy.dbzer0.com/u/db0"
        +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
        +apFollowersUrl: null
        +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
        +apDomain: "lemmy.dbzer0.com"
        +apPreferredUsername: "db0"
        +apDiscoverable: true
        +apManuallyApprovesFollowers: false
        +privateKey: null
        +publicKey: null
        +apFetchedAt: DateTime @1729136030 {#1518
          date: 2024-10-17 05:33:50.0 +02:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1687056004 {#1519
          date: 2023-06-18 04:40:04.0 +02:00
        }
        +__isInitialized__: true
         …2
      }
      +magazine: App\Entity\Magazine {#264
        +icon: Proxies\__CG__\App\Entity\Image {#245 …}
        +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 {#274
          date: 2024-10-22 09:16:09.0 +02:00
        }
        +markedForDeletionAt: null
        +tags: null
        +moderators: Doctrine\ORM\PersistentCollection {#236 …}
        +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
        +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
        +entries: Doctrine\ORM\PersistentCollection {#179 …}
        +posts: Doctrine\ORM\PersistentCollection {#137 …}
        +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
        +bans: Doctrine\ORM\PersistentCollection {#116 …}
        +reports: Doctrine\ORM\PersistentCollection {#102 …}
        +badges: Doctrine\ORM\PersistentCollection {#80 …}
        +logs: Doctrine\ORM\PersistentCollection {#70 …}
        +awards: Doctrine\ORM\PersistentCollection {#1360 …}
        +categories: Doctrine\ORM\PersistentCollection {#1792 …}
        -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 {#268
          date: 2024-02-24 05:17:09.0 +01:00
        }
        +apDeletedAt: null
        +apTimeoutAt: null
        +visibility: "visible             "
        +createdAt: DateTimeImmutable @1697197339 {#270
          date: 2023-10-13 13:42:19.0 +02:00
        }
      }
      +image: Proxies\__CG__\App\Entity\Image {#1970 …}
      +domain: Proxies\__CG__\App\Entity\Domain {#1915 …}
      +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 {#2418
        date: 2024-08-11 16:16:33.0 +02:00
      }
      +ip: null
      +adaAmount: 0
      +tags: null
      +mentions: null
      +comments: Doctrine\ORM\PersistentCollection {#1884 …}
      +votes: Doctrine\ORM\PersistentCollection {#1961 …}
      +reports: Doctrine\ORM\PersistentCollection {#1959 …}
      +favourites: Doctrine\ORM\PersistentCollection {#1399 …}
      +notifications: Doctrine\ORM\PersistentCollection {#2440 …}
      +badges: Doctrine\ORM\PersistentCollection {#2436 …}
      +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 {#1858
        date: 2023-10-09 12:26:17.0 +02:00
      }
    }
    +magazine: App\Entity\Magazine {#264}
    +image: null
    +parent: null
    +root: null
    +body: "Look into jellyfin + jellyserr"
    +lang: "en"
    +isAdult: false
    +favouriteCount: 1
    +score: 0
    +lastActive: DateTime @1698767930 {#5377
      date: 2023-10-31 16:58:50.0 +01:00
    }
    +ip: null
    +tags: null
    +mentions: [
      "@db0@lemmy.dbzer0.com"
    ]
    +children: Doctrine\ORM\PersistentCollection {#5383 …}
    +nested: Doctrine\ORM\PersistentCollection {#5385 …}
    +votes: Doctrine\ORM\PersistentCollection {#5387 …}
    +reports: Doctrine\ORM\PersistentCollection {#5389 …}
    +favourites: Doctrine\ORM\PersistentCollection {#5391 …}
    +notifications: Doctrine\ORM\PersistentCollection {#5393 …}
    -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 {#5378
      date: 2023-10-31 16:58:50.0 +01:00
    }
  }
  +nestedComments: []
  +level: 1
  +view: "tree"
  -entryCommentRepository: App\Repository\EntryCommentRepository {#555 …}
  -twig: Twig\Environment {#1252 …}
  -security: Symfony\Bundle\SecurityBundle\Security {#1101 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
}
settings_row_enum App\Twig\Components\SettingsRowEnumComponent 16.0 MiB 0.54 ms
Input props
[
  "label" => "Sidebar position"
  "settingsKey" => "KBIN_GENERAL_SIDEBAR_POSITION"
  "values" => [
    [
      "name" => "Left"
      "value" => "LEFT"
    ]
    [
      "name" => "Right"
      "value" => "RIGHT"
    ]
  ]
  "defaultValue" => "RIGHT"
]
Attributes
[]
Component
App\Twig\Components\SettingsRowEnumComponent {#10139
  +label: "Sidebar position"
  +help: ""
  +settingsKey: "KBIN_GENERAL_SIDEBAR_POSITION"
  +values: [
    [
      "name" => "Left"
      "value" => "LEFT"
    ]
    [
      "name" => "Right"
      "value" => "RIGHT"
    ]
  ]
  +defaultValue: "RIGHT"
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 0.25 ms
Input props
[
  "label" => "Dynamic lists"
  "settingsKey" => "KBIN_GENERAL_DYNAMIC_LISTS"
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#10211
  +label: "Dynamic lists"
  +help: ""
  +settingsKey: "KBIN_GENERAL_DYNAMIC_LISTS"
  +defaultValue: false
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 8.21 ms
Input props
[
  "label" => "Rounded edges"
  "settingsKey" => "KBIN_GENERAL_ROUNDED_EDGES"
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#10274
  +label: "Rounded edges"
  +help: ""
  +settingsKey: "KBIN_GENERAL_ROUNDED_EDGES"
  +defaultValue: false
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 0.18 ms
Input props
[
  "label" => "Infinite scrolling"
  "help" => "Automatically load more content when you reach the bottom of the page."
  "settingsKey" => "KBIN_GENERAL_INFINITE_SCROLL"
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#10330
  +label: "Infinite scrolling"
  +help: "Automatically load more content when you reach the bottom of the page."
  +settingsKey: "KBIN_GENERAL_INFINITE_SCROLL"
  +defaultValue: false
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 0.16 ms
Input props
[
  "label" => "Sticky navbar"
  "help" => "The navbar will stick to the top of the page when you scroll down."
  "settingsKey" => "KBIN_GENERAL_FIXED_NAVBAR"
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#10389
  +label: "Sticky navbar"
  +help: "The navbar will stick to the top of the page when you scroll down."
  +settingsKey: "KBIN_GENERAL_FIXED_NAVBAR"
  +defaultValue: false
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 0.15 ms
Input props
[
  "label" => "Show top bar"
  "settingsKey" => "KBIN_GENERAL_TOPBAR"
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#10445
  +label: "Show top bar"
  +help: ""
  +settingsKey: "KBIN_GENERAL_TOPBAR"
  +defaultValue: false
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 0.14 ms
Input props
[
  "label" => "Turbo mode (experimental)"
  "settingsKey" => "KBIN_GENERAL_TURBO"
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#10501
  +label: "Turbo mode (experimental)"
  +help: ""
  +settingsKey: "KBIN_GENERAL_TURBO"
  +defaultValue: false
  +reloadRequired: true
}
user_settings_row_switch App\Twig\Components\UserSettingsRowSwitchComponent 16.0 MiB 0.25 ms
Input props
[
  "label" => "Mark new comments"
  "settingsKey" => "KBIN_MARK_NEW_COMMENTS"
]
Attributes
[]
Component
App\Twig\Components\UserSettingsRowSwitchComponent {#10559
  +label: "Mark new comments"
  +help: ""
  +settingsKey: "KBIN_MARK_NEW_COMMENTS"
  +defaultValue: false
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 0.19 ms
Input props
[
  "label" => "Show "Support Us" block"
  "settingsKey" => "KBIN_GENERAL_SUPPORT_US_BLOCK"
  "defaultValue" => true
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#10622
  +label: "Show "Support Us" block"
  +help: ""
  +settingsKey: "KBIN_GENERAL_SUPPORT_US_BLOCK"
  +defaultValue: true
  +reloadRequired: true
}
user_settings_row_switch App\Twig\Components\UserSettingsRowSwitchComponent 16.0 MiB 0.20 ms
Input props
[
  "label" => "Show subscribed users"
  "settingsKey" => "KBIN_SUB_CHANNEL_USERS"
]
Attributes
[]
Component
App\Twig\Components\UserSettingsRowSwitchComponent {#10680
  +label: "Show subscribed users"
  +help: ""
  +settingsKey: "KBIN_SUB_CHANNEL_USERS"
  +defaultValue: false
  +reloadRequired: true
}
user_settings_row_switch App\Twig\Components\UserSettingsRowSwitchComponent 16.0 MiB 0.19 ms
Input props
[
  "label" => "Show subscribed magazines"
  "settingsKey" => "KBIN_SUB_CHANNEL_MAGAZINES"
]
Attributes
[]
Component
App\Twig\Components\UserSettingsRowSwitchComponent {#10736
  +label: "Show subscribed magazines"
  +help: ""
  +settingsKey: "KBIN_SUB_CHANNEL_MAGAZINES"
  +defaultValue: false
  +reloadRequired: true
}
user_settings_row_switch App\Twig\Components\UserSettingsRowSwitchComponent 16.0 MiB 0.21 ms
Input props
[
  "label" => "Show subscribed domains"
  "settingsKey" => "KBIN_SUB_CHANNEL_DOMAINS"
]
Attributes
[]
Component
App\Twig\Components\UserSettingsRowSwitchComponent {#10792
  +label: "Show subscribed domains"
  +help: ""
  +settingsKey: "KBIN_SUB_CHANNEL_DOMAINS"
  +defaultValue: false
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 0.15 ms
Input props
[
  "label" => "Auto media preview"
  "help" => "Automatically expand media previews."
  "settingsKey" => "KBIN_ENTRIES_SHOW_PREVIEW"
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#10848
  +label: "Auto media preview"
  +help: "Automatically expand media previews."
  +settingsKey: "KBIN_ENTRIES_SHOW_PREVIEW"
  +defaultValue: false
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 0.14 ms
Input props
[
  "label" => "Compact view"
  "settingsKey" => "KBIN_ENTRIES_COMPACT"
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#10904
  +label: "Compact view"
  +help: ""
  +settingsKey: "KBIN_ENTRIES_COMPACT"
  +defaultValue: false
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 0.14 ms
Input props
[
  "label" => "Show users’ avatars"
  "settingsKey" => "KBIN_ENTRIES_SHOW_USERS_AVATARS"
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#10960
  +label: "Show users’ avatars"
  +help: ""
  +settingsKey: "KBIN_ENTRIES_SHOW_USERS_AVATARS"
  +defaultValue: false
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 0.15 ms
Input props
[
  "label" => "Show magazines’ icons"
  "settingsKey" => "KBIN_ENTRIES_SHOW_MAGAZINES_ICONS"
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#11016
  +label: "Show magazines’ icons"
  +help: ""
  +settingsKey: "KBIN_ENTRIES_SHOW_MAGAZINES_ICONS"
  +defaultValue: false
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 0.14 ms
Input props
[
  "label" => "Show thumbnails"
  "settingsKey" => "KBIN_ENTRIES_SHOW_THUMBNAILS"
  "defaultValue" => true
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#11072
  +label: "Show thumbnails"
  +help: ""
  +settingsKey: "KBIN_ENTRIES_SHOW_THUMBNAILS"
  +defaultValue: true
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 0.14 ms
Input props
[
  "label" => "Auto media preview"
  "help" => "Automatically expand media previews."
  "settingsKey" => "KBIN_POSTS_SHOW_PREVIEW"
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#11128
  +label: "Auto media preview"
  +help: "Automatically expand media previews."
  +settingsKey: "KBIN_POSTS_SHOW_PREVIEW"
  +defaultValue: false
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 0.19 ms
Input props
[
  "label" => "Show users’ avatars"
  "settingsKey" => "KBIN_POSTS_SHOW_USERS_AVATARS"
  "defaultValue" => true
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#11184
  +label: "Show users’ avatars"
  +help: ""
  +settingsKey: "KBIN_POSTS_SHOW_USERS_AVATARS"
  +defaultValue: true
  +reloadRequired: true
}
settings_row_enum App\Twig\Components\SettingsRowEnumComponent 16.0 MiB 0.18 ms
Input props
[
  "label" => "Comment reply position"
  "help" => "Display the comment reply form either at the top or bottom of the page. When 'infinite scroll' is enabled the position will always appear at the top."
  "settingsKey" => "KBIN_COMMENTS_REPLY_POSITION"
  "values" => [
    [
      "name" => "top"
      "value" => "TOP"
    ]
    [
      "name" => "bottom"
      "value" => "BOTTOM"
    ]
  ]
  "defaultValue" => "TOP"
]
Attributes
[]
Component
App\Twig\Components\SettingsRowEnumComponent {#11240
  +label: "Comment reply position"
  +help: "Display the comment reply form either at the top or bottom of the page. When 'infinite scroll' is enabled the position will always appear at the top."
  +settingsKey: "KBIN_COMMENTS_REPLY_POSITION"
  +values: [
    [
      "name" => "top"
      "value" => "TOP"
    ]
    [
      "name" => "bottom"
      "value" => "BOTTOM"
    ]
  ]
  +defaultValue: "TOP"
  +reloadRequired: true
}
settings_row_switch App\Twig\Components\SettingsRowSwitchComponent 16.0 MiB 0.14 ms
Input props
[
  "label" => "Show Comment Avatars"
  "help" => "Display/hide user avatars when viewing comments on a single thread or post."
  "settingsKey" => "KBIN_COMMENTS_SHOW_USER_AVATAR"
  "defaultValue" => true
]
Attributes
[]
Component
App\Twig\Components\SettingsRowSwitchComponent {#11298
  +label: "Show Comment Avatars"
  +help: "Display/hide user avatars when viewing comments on a single thread or post."
  +settingsKey: "KBIN_COMMENTS_SHOW_USER_AVATAR"
  +defaultValue: true
  +reloadRequired: true
}
user_actions App\Twig\Components\UserActionsComponent 16.0 MiB 0.48 ms
Input props
[
  "user" => Proxies\__CG__\App\Entity\User {#1978
    +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
    +cover: null
    +email: "db0@lemmy.dbzer0.com"
    +username: "@db0@lemmy.dbzer0.com"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: """
      Epicurean Revolutionary Libertarian Socialist\n
      \n
      I make [FOSS](https://github.com/db0) things:\n
      \n
      - [AI Horde](https://aihorde.net)\n
      - [Fediseer](https://fediseer.com)\n
      - [Pythörhead](https://github.com/db0/pythorhead)\n
      - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
      \n
      wiki-user: db0
      """
    +lastActive: DateTime @1729133551 {#1516
      date: 2024-10-17 04:52:31.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: true
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: false
    +notifyOnNewEntryCommentReply: false
    +notifyOnNewPost: false
    +notifyOnNewPostReply: false
    +notifyOnNewPostCommentReply: false
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
    +entries: Doctrine\ORM\PersistentCollection {#1713 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
    +posts: Doctrine\ORM\PersistentCollection {#1738 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
    +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
    +follows: Doctrine\ORM\PersistentCollection {#1449 …}
    +followers: Doctrine\ORM\PersistentCollection {#1636 …}
    +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
    +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
    +reports: Doctrine\ORM\PersistentCollection {#1456 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
    +violations: Doctrine\ORM\PersistentCollection {#1700 …}
    +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
    +awards: Doctrine\ORM\PersistentCollection {#1440 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
    +categories: Doctrine\ORM\PersistentCollection {#1648 …}
    -id: 3194
    -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
    +apId: "db0@lemmy.dbzer0.com"
    +apProfileId: "https://lemmy.dbzer0.com/u/db0"
    +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
    +apDomain: "lemmy.dbzer0.com"
    +apPreferredUsername: "db0"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729136030 {#1518
      date: 2024-10-17 05:33:50.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1687056004 {#1519
      date: 2023-06-18 04:40:04.0 +02:00
    }
    +__isInitialized__: true
     …2
  }
]
Attributes
[]
Component
App\Twig\Components\UserActionsComponent {#11377
  +user: Proxies\__CG__\App\Entity\User {#1978
    +avatar: Proxies\__CG__\App\Entity\Image {#1520 …}
    +cover: null
    +email: "db0@lemmy.dbzer0.com"
    +username: "@db0@lemmy.dbzer0.com"
    +roles: []
    +followersCount: 0
    +homepage: "front"
    +about: """
      Epicurean Revolutionary Libertarian Socialist\n
      \n
      I make [FOSS](https://github.com/db0) things:\n
      \n
      - [AI Horde](https://aihorde.net)\n
      - [Fediseer](https://fediseer.com)\n
      - [Pythörhead](https://github.com/db0/pythorhead)\n
      - [Lucid Creations](https://dbzer0.itch.io/lucid-creations)\n
      \n
      wiki-user: db0
      """
    +lastActive: DateTime @1729133551 {#1516
      date: 2024-10-17 04:52:31.0 +02:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: true
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: false
    +notifyOnNewEntryCommentReply: false
    +notifyOnNewPost: false
    +notifyOnNewPostReply: false
    +notifyOnNewPostCommentReply: false
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: false
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#1517 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#1623 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#1406 …}
    +entries: Doctrine\ORM\PersistentCollection {#1713 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#1710 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#1742 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#1471 …}
    +posts: Doctrine\ORM\PersistentCollection {#1738 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#1496 …}
    +postComments: Doctrine\ORM\PersistentCollection {#1751 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#1644 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#1476 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#1660 …}
    +follows: Doctrine\ORM\PersistentCollection {#1449 …}
    +followers: Doctrine\ORM\PersistentCollection {#1636 …}
    +blocks: Doctrine\ORM\PersistentCollection {#1427 …}
    +blockers: Doctrine\ORM\PersistentCollection {#1418 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#1459 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#1437 …}
    +reports: Doctrine\ORM\PersistentCollection {#1456 …}
    +favourites: Doctrine\ORM\PersistentCollection {#1431 …}
    +violations: Doctrine\ORM\PersistentCollection {#1700 …}
    +notifications: Doctrine\ORM\PersistentCollection {#1697 …}
    +awards: Doctrine\ORM\PersistentCollection {#1440 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#1606 …}
    +categories: Doctrine\ORM\PersistentCollection {#1648 …}
    -id: 3194
    -password: "$2y$13$q45DmduSSvkmf5f312QK3eA4kCqt.yoS9on6oiMQZ0se4qVoiwI.a"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#1666 …}
    +apId: "db0@lemmy.dbzer0.com"
    +apProfileId: "https://lemmy.dbzer0.com/u/db0"
    +apPublicUrl: "https://lemmy.dbzer0.com/u/db0"
    +apFollowersUrl: null
    +apInboxUrl: "https://lemmy.dbzer0.com/inbox"
    +apDomain: "lemmy.dbzer0.com"
    +apPreferredUsername: "db0"
    +apDiscoverable: true
    +apManuallyApprovesFollowers: false
    +privateKey: null
    +publicKey: null
    +apFetchedAt: DateTime @1729136030 {#1518
      date: 2024-10-17 05:33:50.0 +02:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1687056004 {#1519
      date: 2023-06-18 04:40:04.0 +02:00
    }
    +__isInitialized__: true
     …2
  }
}
date App\Twig\Components\DateComponent 16.0 MiB 0.14 ms
Input props
[
  "date" => DateTimeImmutable @1696847177 {#1858
    date: 2023-10-09 12:26:17.0 +02:00
  }
]
Attributes
[]
Component
App\Twig\Components\DateComponent {#11438
  +date: DateTimeImmutable @1696847177 {#1858
    date: 2023-10-09 12:26:17.0 +02:00
  }
}
magazine_box App\Twig\Components\MagazineBoxComponent 16.0 MiB 24.40 ms
Input props
[
  "magazine" => App\Entity\Magazine {#264
    +icon: Proxies\__CG__\App\Entity\Image {#245 …}
    +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 {#274
      date: 2024-10-22 09:16:09.0 +02:00
    }
    +markedForDeletionAt: null
    +tags: null
    +moderators: Doctrine\ORM\PersistentCollection {#236 …}
    +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
    +entries: Doctrine\ORM\PersistentCollection {#179 …}
    +posts: Doctrine\ORM\PersistentCollection {#137 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
    +bans: Doctrine\ORM\PersistentCollection {#116 …}
    +reports: Doctrine\ORM\PersistentCollection {#102 …}
    +badges: Doctrine\ORM\PersistentCollection {#80 …}
    +logs: Doctrine\ORM\PersistentCollection {#70 …}
    +awards: Doctrine\ORM\PersistentCollection {#1360 …}
    +categories: Doctrine\ORM\PersistentCollection {#1792 …}
    -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 {#268
      date: 2024-02-24 05:17:09.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697197339 {#270
      date: 2023-10-13 13:42:19.0 +02:00
    }
  }
  "showSectionTitle" => true
]
Attributes
[]
Component
App\Twig\Components\MagazineBoxComponent {#11494
  +magazine: App\Entity\Magazine {#264
    +icon: Proxies\__CG__\App\Entity\Image {#245 …}
    +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 {#274
      date: 2024-10-22 09:16:09.0 +02:00
    }
    +markedForDeletionAt: null
    +tags: null
    +moderators: Doctrine\ORM\PersistentCollection {#236 …}
    +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
    +entries: Doctrine\ORM\PersistentCollection {#179 …}
    +posts: Doctrine\ORM\PersistentCollection {#137 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
    +bans: Doctrine\ORM\PersistentCollection {#116 …}
    +reports: Doctrine\ORM\PersistentCollection {#102 …}
    +badges: Doctrine\ORM\PersistentCollection {#80 …}
    +logs: Doctrine\ORM\PersistentCollection {#70 …}
    +awards: Doctrine\ORM\PersistentCollection {#1360 …}
    +categories: Doctrine\ORM\PersistentCollection {#1792 …}
    -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 {#268
      date: 2024-02-24 05:17:09.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697197339 {#270
      date: 2023-10-13 13:42:19.0 +02:00
    }
  }
  +showCover: true
  +showDescription: true
  +showRules: true
  +showSubscribeButton: true
  +showInfo: true
  +showMeta: true
  +showSectionTitle: true
  +stretchedLink: true
}
magazine_sub App\Twig\Components\MagazineSubComponent 16.0 MiB 0.66 ms
Input props
[
  "magazine" => App\Entity\Magazine {#264
    +icon: Proxies\__CG__\App\Entity\Image {#245 …}
    +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 {#274
      date: 2024-10-22 09:16:09.0 +02:00
    }
    +markedForDeletionAt: null
    +tags: null
    +moderators: Doctrine\ORM\PersistentCollection {#236 …}
    +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
    +entries: Doctrine\ORM\PersistentCollection {#179 …}
    +posts: Doctrine\ORM\PersistentCollection {#137 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
    +bans: Doctrine\ORM\PersistentCollection {#116 …}
    +reports: Doctrine\ORM\PersistentCollection {#102 …}
    +badges: Doctrine\ORM\PersistentCollection {#80 …}
    +logs: Doctrine\ORM\PersistentCollection {#70 …}
    +awards: Doctrine\ORM\PersistentCollection {#1360 …}
    +categories: Doctrine\ORM\PersistentCollection {#1792 …}
    -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 {#268
      date: 2024-02-24 05:17:09.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697197339 {#270
      date: 2023-10-13 13:42:19.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\MagazineSubComponent {#11553
  +magazine: App\Entity\Magazine {#264
    +icon: Proxies\__CG__\App\Entity\Image {#245 …}
    +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 {#274
      date: 2024-10-22 09:16:09.0 +02:00
    }
    +markedForDeletionAt: null
    +tags: null
    +moderators: Doctrine\ORM\PersistentCollection {#236 …}
    +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
    +entries: Doctrine\ORM\PersistentCollection {#179 …}
    +posts: Doctrine\ORM\PersistentCollection {#137 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
    +bans: Doctrine\ORM\PersistentCollection {#116 …}
    +reports: Doctrine\ORM\PersistentCollection {#102 …}
    +badges: Doctrine\ORM\PersistentCollection {#80 …}
    +logs: Doctrine\ORM\PersistentCollection {#70 …}
    +awards: Doctrine\ORM\PersistentCollection {#1360 …}
    +categories: Doctrine\ORM\PersistentCollection {#1792 …}
    -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 {#268
      date: 2024-02-24 05:17:09.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697197339 {#270
      date: 2023-10-13 13:42:19.0 +02:00
    }
  }
}
date App\Twig\Components\DateComponent 16.0 MiB 0.15 ms
Input props
[
  "date" => DateTimeImmutable @1697197339 {#270
    date: 2023-10-13 13:42:19.0 +02:00
  }
]
Attributes
[]
Component
App\Twig\Components\DateComponent {#11755
  +date: DateTimeImmutable @1697197339 {#270
    date: 2023-10-13 13:42:19.0 +02:00
  }
}
user_inline App\Twig\Components\UserInlineComponent 16.0 MiB 8.95 ms
Input props
[
  "user" => Proxies\__CG__\App\Entity\User {#11814
    +avatar: null
    +cover: null
    +email: "kbin@j0h.nl"
    +username: "Sprite_tm"
    +roles: [
      "ROLE_ADMIN"
    ]
    +followersCount: 0
    +homepage: "front"
    +about: "Hi! I'm Sprite_tm. You may know me from sites like https://spritesmods.com."
    +lastActive: DateTime @1707547382 {#11861
      date: 2024-02-10 07:43:02.0 +01:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: true
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: false
    +notifyOnNewEntryCommentReply: false
    +notifyOnNewPost: false
    +notifyOnNewPostReply: false
    +notifyOnNewPostCommentReply: false
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: true
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#11863 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#11865 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#11867 …}
    +entries: Doctrine\ORM\PersistentCollection {#11869 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#11871 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#11873 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#11875 …}
    +posts: Doctrine\ORM\PersistentCollection {#11877 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#11879 …}
    +postComments: Doctrine\ORM\PersistentCollection {#11881 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#11883 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#11885 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#11887 …}
    +follows: Doctrine\ORM\PersistentCollection {#11889 …}
    +followers: Doctrine\ORM\PersistentCollection {#11891 …}
    +blocks: Doctrine\ORM\PersistentCollection {#11893 …}
    +blockers: Doctrine\ORM\PersistentCollection {#11895 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#11897 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#11899 …}
    +reports: Doctrine\ORM\PersistentCollection {#11901 …}
    +favourites: Doctrine\ORM\PersistentCollection {#11903 …}
    +violations: Doctrine\ORM\PersistentCollection {#11905 …}
    +notifications: Doctrine\ORM\PersistentCollection {#11907 …}
    +awards: Doctrine\ORM\PersistentCollection {#11909 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#11911 …}
    +categories: Doctrine\ORM\PersistentCollection {#11913 …}
    -id: 1
    -password: "$2y$13$ZX7Aou2QOPRGkHPp4y5x8OWfxZMoT1BGH7bRLlPP7mwZFTkfiaPGG"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#11915 …}
    +apId: null
    +apProfileId: null
    +apPublicUrl: null
    +apFollowersUrl: null
    +apInboxUrl: null
    +apDomain: null
    +apPreferredUsername: null
    +apDiscoverable: null
    +apManuallyApprovesFollowers: null
    +privateKey: """
      -----BEGIN PRIVATE KEY-----\r\n
      MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDleeotz5TBiMlC\r\n
      YsJYJHVNxjvnvt0qsQA282B7vdqBTbARfD49iKPiMIwgU2yhCI0oTSQwc2Zy9AQ+\r\n
      31rwmvBx8VvcLgQvKpNzPVhMQjelK7k5iPiPc/W1soaauepq3YwQKgGod4c5Vh9f\r\n
      MInSANfOLOUSo3pUzfaQaGEvQc5DbKjDgIjsv/OKI1acbzu067KQzIThu+1BvcqQ\r\n
      Ypo2Ux5W23nNqkrRZ++z/r1MI2jS3vwi5OSwz4fWhLPJXE6lwokc6b/uAZe7sLT6\r\n
      QQtjevLnmMyRIVnmxbtHPMSfhLdz8ssQhoNCfAkMnBjDUX31SSs67pU8v5O3Fn2H\r\n
      d+qFWCjrREwSpBAd24INJqKsjSa6j3oLL8Xw8HZf+x6QRPJch/c3FNWRtM2b9n8V\r\n
      sAQiD985pafyeQ1TqIe4iSjI0iUgy2WgwO0C1Z0PNbQzQmRk0EOAlxIXjPmB229P\r\n
      V4+OcZxLT9phP/rid1Qt9Ro+2LdkS9Zqe8c2JHeJKc5Nv/8OOX5uQ/B82JXnuXYi\r\n
      /oVEJb5t42G8u3IIkYM5G/Gt033WU6dbyKOBmdnbXaPw9LC3M7oop3yyCb3UDLfg\r\n
      g/XnZVvZxSPCPlh5G1Lb0r47siKq/0k9YRua0AFsVg0dhqfuwsb6G9Hx5EicuPsu\r\n
      OIjXINBTjlnE4SdMz0ZJt7bLjwlKdQIDAQABAoICAAlWo8QHfYs+sMoF0Njbavam\r\n
      SYvNxZxWJacW0mdWu4ylh7O+dZ31cI3k4d7y5inLeksYkI90MsgczAtu9XlzJLPO\r\n
      WamlKcBtoCCBb5Vy4GbVV61SuKLF2krxn+6uAC8nIusJepXLf3JC4fXyuLkWFbIr\r\n
      O4s9od3Pn+gSh1nv+J/fzSJfmbLgwN1vQLgPAsQDD3o7CHFTP318ZsDnclUhnst0\r\n
      FQnckzzgWO3fQP7XNg3WyzX0UKYtW97L+bEJE55FQ2Us0gWyhOU7dLH2casztqzc\r\n
      F/8T91+fzlZAz9OaCAks6Tyb7L2I5KlhtNRF/bU8rAiy6tnVBgLeZG9d3upcQxX0\r\n
      L+SMPWg55qERGI5mO+BxFdUnVtcmswziKmySYtzgm+c4jmPS5cWhGB9HFCTW2S0x\r\n
      GoVA2cZGWjMTrbZQhgJjBqzp76fhLtXTufd328sYmX7fBYKEWFYNwrEJaWYUNl/V\r\n
      yEyl0aMQWKhVokx6eCqnuDZUc77LeuGuCleIdhQ53NYHrXMCmgVyLfmGdrOS3Uh6\r\n
      RrAYmnvvMkAUTOQajW2csC345PmgBOjE7vB7349ylKUkXvN4L+9xZCYaVjBt3O24\r\n
      aRoQSQDGhk+NIaYleiFx+u7dJSryxdx/6ut6dQ2S+jKlm1oN1qq6ppO5y/TFRQ1e\r\n
      qn7kjIGzUT80fANDFqdhAoIBAQD1+cGiWXRQhUrJc5X3ngH1zHoLWpmSZcUUDFn/\r\n
      bV/CChd2M43fOpneIQETZ1oS7BsU3y92kTw63ytYOUg7C5iT5/r9ZoBGq0HZSbll\r\n
      riRJWGiajr2aYCmIes++CrfUvCcD6+l8QMZ3s8eXdk80GX+vt1xEfRpWV9e9huJK\r\n
      K1e8wXfFmPAmxUi63IePscdc+SVQGeooMYDnMwLWvxpAtp5mGOaQc4D5dviWXjSE\r\n
      Z/PJa+gectpD1iDIPUXm3o17ivE2UYFia8/FCGUN6Yz7ucRKF+2SPO8hLefk5UvJ\r\n
      Lxlkh67MXKkneDqRU9C82Qmcfz5nQLQadC0nbE44YeXrnlIdAoIBAQDu1AWMIe6f\r\n
      7TZYCWnTa3nT6penJ9CMaGDPI/62dKTmGnI4oo3u9DGGrnuWbcFFCQA02vcYdpuw\r\n
      CVy6mkP/yqN5VSV3EHZiJUA0aKIxot3o3YOiobpVYn9hwvzzOdMZO4SOuevNfY1c\r\n
      qmnLGhYoDvR1c2yaudCf/BDwQqlLoSg9F5X57bRtwaRyUjhtXVKXWb59qtiwwrvp\r\n
      1vPjxciEIxAtgSXtIUQz3ljDRNUHjpyfYM3ska5jkxMIPNYUYFMX2x+Gxn9PZEG3\r\n
      Im391BRynZsnkvJO6i4i5N1xsPK5SyPiKBnlMxW/6ZLi5aAQHV3cc2KLzV+T+s2B\r\n
      v9LTAyO7nWo5AoIBAASA/jqqyKZwyl3F8AkIq6CEjfeHQSidFG65iyxSJF65MJTJ\r\n
      fN+Jgye+Evb3/X47NIO9UnEpV6D8VR7YbaonHDQZG09ogRDKMfp4jxx9g8yUAdZS\r\n
      psYc3KXTGdqw94y9pTk9KJlN1lR6xjzPvcOGdAATq2zVnZXXJewifCI/iOu73yWP\r\n
      F1aeZiaFwzWuW6goJ7a/wrnZrjKNjI/CEAj/TwcvjYk3lDT9KLAYKX4DKUOW5jko\r\n
      gTacxRzlglIn4Q9SC/iipWvX7YX+EVuf2yUA0cdJiOAUnYxN+uEGEc0tP5nHoju7\r\n
      tp0yZmAi2L+cecCT0+CwHpwdZHZEVWpS4JLf40ECggEBALFSZIgGDZlaU5YL7zHV\r\n
      Q5APRugKDLKjMPW7IPwxINnj2tioAL/hOQBpfkNTXEM4ipmz1fCo57FNUjcOINzD\r\n
      hJqqmHWNmIgIZmJDKeG2rhKenYTblXCeADwCvTKNxWmfoi0iZ6ybwqCBuqjcxoSZ\r\n
      jfHCcGl0+yw9yAnLRM1ta2XopCb70ZIIS2PCHjk9J/xN2ryNY/PhsgnN2ilMiTNq\r\n
      oTFYCWPF5lCojrj020KQJUPEaUBzbcpqwZ/FI6HfXvKAdCjqKk40/wHNI2Np2oC6\r\n
      +h7o4NWs0/J+gNhP6/edjZf19DwTsNtbvf6PRUeRtkXeudVY99T0Sy9B0HNxik9b\r\n
      cikCggEAM2wassiP1i0Gc3wrbNLHyQN+yqMaAp0xF+8l0fU3T8zPL/tYDcITnZPY\r\n
      pEFV/aodP9X7XFuQD0iGTOTGDXiMSLPOLI/ifmwbT41rgIN9x14MpU2EtWeVz7sx\r\n
      ZIFMt98rHx6BsZx/DnSFDQ8iqrKF3u+OOv7s6j+8odz4Rq53+16vMev5VUMOPq+E\r\n
      aQn8SDKkOjZzwb9QGB9bXS5s9yyj4pLyggQ0O5S2ugZjUcmCecNpktN8bUR3I9VQ\r\n
      KWkcQa9yCpidp/JYrQtlbqAPiIzptA4T4RNh+F6pKbmw7hNMIPipPzbQezEMaBOn\r\n
      Cgb38EldyAVGjCzRGfhu9SNU9B03bg==\r\n
      -----END PRIVATE KEY-----
      """
    +publicKey: """
      -----BEGIN PUBLIC KEY-----\r\n
      MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5XnqLc+UwYjJQmLCWCR1\r\n
      TcY7577dKrEANvNge73agU2wEXw+PYij4jCMIFNsoQiNKE0kMHNmcvQEPt9a8Jrw\r\n
      cfFb3C4ELyqTcz1YTEI3pSu5OYj4j3P1tbKGmrnqat2MECoBqHeHOVYfXzCJ0gDX\r\n
      zizlEqN6VM32kGhhL0HOQ2yow4CI7L/ziiNWnG87tOuykMyE4bvtQb3KkGKaNlMe\r\n
      Vtt5zapK0Wfvs/69TCNo0t78IuTksM+H1oSzyVxOpcKJHOm/7gGXu7C0+kELY3ry\r\n
      55jMkSFZ5sW7RzzEn4S3c/LLEIaDQnwJDJwYw1F99UkrOu6VPL+TtxZ9h3fqhVgo\r\n
      60RMEqQQHduCDSairI0muo96Cy/F8PB2X/sekETyXIf3NxTVkbTNm/Z/FbAEIg/f\r\n
      OaWn8nkNU6iHuIkoyNIlIMtloMDtAtWdDzW0M0JkZNBDgJcSF4z5gdtvT1ePjnGc\r\n
      S0/aYT/64ndULfUaPti3ZEvWanvHNiR3iSnOTb//Djl+bkPwfNiV57l2Iv6FRCW+\r\n
      beNhvLtyCJGDORvxrdN91lOnW8ijgZnZ212j8PSwtzO6KKd8sgm91Ay34IP152Vb\r\n
      2cUjwj5YeRtS29K+O7Iiqv9JPWEbmtABbFYNHYan7sLG+hvR8eRInLj7LjiI1yDQ\r\n
      U45ZxOEnTM9GSbe2y48JSnUCAwEAAQ==\r\n
      -----END PUBLIC KEY-----
      """
    +apFetchedAt: null
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1686560440 {#11862
      date: 2023-06-12 11:00:40.0 +02:00
    }
    +__isInitialized__: true
     …2
  }
]
Attributes
[]
Component
App\Twig\Components\UserInlineComponent {#11832
  +user: Proxies\__CG__\App\Entity\User {#11814
    +avatar: null
    +cover: null
    +email: "kbin@j0h.nl"
    +username: "Sprite_tm"
    +roles: [
      "ROLE_ADMIN"
    ]
    +followersCount: 0
    +homepage: "front"
    +about: "Hi! I'm Sprite_tm. You may know me from sites like https://spritesmods.com."
    +lastActive: DateTime @1707547382 {#11861
      date: 2024-02-10 07:43:02.0 +01:00
    }
    +markedForDeletionAt: null
    +fields: null
    +oauthGithubId: null
    +oauthGoogleId: null
    +oauthFacebookId: null
    +oauthKeycloakId: null
    +hideAdult: true
    +showSubscribedUsers: true
    +showSubscribedMagazines: true
    +showSubscribedDomains: true
    +preferredLanguages: []
    +featuredMagazines: null
    +showProfileSubscriptions: true
    +showProfileFollowings: true
    +markNewComments: false
    +notifyOnNewEntry: false
    +notifyOnNewEntryReply: false
    +notifyOnNewEntryCommentReply: false
    +notifyOnNewPost: false
    +notifyOnNewPostReply: false
    +notifyOnNewPostCommentReply: false
    +addMentionsEntries: false
    +addMentionsPosts: true
    +isBanned: false
    +isVerified: true
    +isDeleted: false
    +isBot: false
    +spamProtection: true
    +customCss: null
    +ignoreMagazinesCustomCss: false
    +moderatorTokens: Doctrine\ORM\PersistentCollection {#11863 …}
    +magazineOwnershipRequests: Doctrine\ORM\PersistentCollection {#11865 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#11867 …}
    +entries: Doctrine\ORM\PersistentCollection {#11869 …}
    +entryVotes: Doctrine\ORM\PersistentCollection {#11871 …}
    +entryComments: Doctrine\ORM\PersistentCollection {#11873 …}
    +entryCommentVotes: Doctrine\ORM\PersistentCollection {#11875 …}
    +posts: Doctrine\ORM\PersistentCollection {#11877 …}
    +postVotes: Doctrine\ORM\PersistentCollection {#11879 …}
    +postComments: Doctrine\ORM\PersistentCollection {#11881 …}
    +postCommentVotes: Doctrine\ORM\PersistentCollection {#11883 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#11885 …}
    +subscribedDomains: Doctrine\ORM\PersistentCollection {#11887 …}
    +follows: Doctrine\ORM\PersistentCollection {#11889 …}
    +followers: Doctrine\ORM\PersistentCollection {#11891 …}
    +blocks: Doctrine\ORM\PersistentCollection {#11893 …}
    +blockers: Doctrine\ORM\PersistentCollection {#11895 …}
    +blockedMagazines: Doctrine\ORM\PersistentCollection {#11897 …}
    +blockedDomains: Doctrine\ORM\PersistentCollection {#11899 …}
    +reports: Doctrine\ORM\PersistentCollection {#11901 …}
    +favourites: Doctrine\ORM\PersistentCollection {#11903 …}
    +violations: Doctrine\ORM\PersistentCollection {#11905 …}
    +notifications: Doctrine\ORM\PersistentCollection {#11907 …}
    +awards: Doctrine\ORM\PersistentCollection {#11909 …}
    +subscribedCategories: Doctrine\ORM\PersistentCollection {#11911 …}
    +categories: Doctrine\ORM\PersistentCollection {#11913 …}
    -id: 1
    -password: "$2y$13$ZX7Aou2QOPRGkHPp4y5x8OWfxZMoT1BGH7bRLlPP7mwZFTkfiaPGG"
    -totpSecret: null
    -totpBackupCodes: []
    -oAuth2UserConsents: Doctrine\ORM\PersistentCollection {#11915 …}
    +apId: null
    +apProfileId: null
    +apPublicUrl: null
    +apFollowersUrl: null
    +apInboxUrl: null
    +apDomain: null
    +apPreferredUsername: null
    +apDiscoverable: null
    +apManuallyApprovesFollowers: null
    +privateKey: """
      -----BEGIN PRIVATE KEY-----\r\n
      MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDleeotz5TBiMlC\r\n
      YsJYJHVNxjvnvt0qsQA282B7vdqBTbARfD49iKPiMIwgU2yhCI0oTSQwc2Zy9AQ+\r\n
      31rwmvBx8VvcLgQvKpNzPVhMQjelK7k5iPiPc/W1soaauepq3YwQKgGod4c5Vh9f\r\n
      MInSANfOLOUSo3pUzfaQaGEvQc5DbKjDgIjsv/OKI1acbzu067KQzIThu+1BvcqQ\r\n
      Ypo2Ux5W23nNqkrRZ++z/r1MI2jS3vwi5OSwz4fWhLPJXE6lwokc6b/uAZe7sLT6\r\n
      QQtjevLnmMyRIVnmxbtHPMSfhLdz8ssQhoNCfAkMnBjDUX31SSs67pU8v5O3Fn2H\r\n
      d+qFWCjrREwSpBAd24INJqKsjSa6j3oLL8Xw8HZf+x6QRPJch/c3FNWRtM2b9n8V\r\n
      sAQiD985pafyeQ1TqIe4iSjI0iUgy2WgwO0C1Z0PNbQzQmRk0EOAlxIXjPmB229P\r\n
      V4+OcZxLT9phP/rid1Qt9Ro+2LdkS9Zqe8c2JHeJKc5Nv/8OOX5uQ/B82JXnuXYi\r\n
      /oVEJb5t42G8u3IIkYM5G/Gt033WU6dbyKOBmdnbXaPw9LC3M7oop3yyCb3UDLfg\r\n
      g/XnZVvZxSPCPlh5G1Lb0r47siKq/0k9YRua0AFsVg0dhqfuwsb6G9Hx5EicuPsu\r\n
      OIjXINBTjlnE4SdMz0ZJt7bLjwlKdQIDAQABAoICAAlWo8QHfYs+sMoF0Njbavam\r\n
      SYvNxZxWJacW0mdWu4ylh7O+dZ31cI3k4d7y5inLeksYkI90MsgczAtu9XlzJLPO\r\n
      WamlKcBtoCCBb5Vy4GbVV61SuKLF2krxn+6uAC8nIusJepXLf3JC4fXyuLkWFbIr\r\n
      O4s9od3Pn+gSh1nv+J/fzSJfmbLgwN1vQLgPAsQDD3o7CHFTP318ZsDnclUhnst0\r\n
      FQnckzzgWO3fQP7XNg3WyzX0UKYtW97L+bEJE55FQ2Us0gWyhOU7dLH2casztqzc\r\n
      F/8T91+fzlZAz9OaCAks6Tyb7L2I5KlhtNRF/bU8rAiy6tnVBgLeZG9d3upcQxX0\r\n
      L+SMPWg55qERGI5mO+BxFdUnVtcmswziKmySYtzgm+c4jmPS5cWhGB9HFCTW2S0x\r\n
      GoVA2cZGWjMTrbZQhgJjBqzp76fhLtXTufd328sYmX7fBYKEWFYNwrEJaWYUNl/V\r\n
      yEyl0aMQWKhVokx6eCqnuDZUc77LeuGuCleIdhQ53NYHrXMCmgVyLfmGdrOS3Uh6\r\n
      RrAYmnvvMkAUTOQajW2csC345PmgBOjE7vB7349ylKUkXvN4L+9xZCYaVjBt3O24\r\n
      aRoQSQDGhk+NIaYleiFx+u7dJSryxdx/6ut6dQ2S+jKlm1oN1qq6ppO5y/TFRQ1e\r\n
      qn7kjIGzUT80fANDFqdhAoIBAQD1+cGiWXRQhUrJc5X3ngH1zHoLWpmSZcUUDFn/\r\n
      bV/CChd2M43fOpneIQETZ1oS7BsU3y92kTw63ytYOUg7C5iT5/r9ZoBGq0HZSbll\r\n
      riRJWGiajr2aYCmIes++CrfUvCcD6+l8QMZ3s8eXdk80GX+vt1xEfRpWV9e9huJK\r\n
      K1e8wXfFmPAmxUi63IePscdc+SVQGeooMYDnMwLWvxpAtp5mGOaQc4D5dviWXjSE\r\n
      Z/PJa+gectpD1iDIPUXm3o17ivE2UYFia8/FCGUN6Yz7ucRKF+2SPO8hLefk5UvJ\r\n
      Lxlkh67MXKkneDqRU9C82Qmcfz5nQLQadC0nbE44YeXrnlIdAoIBAQDu1AWMIe6f\r\n
      7TZYCWnTa3nT6penJ9CMaGDPI/62dKTmGnI4oo3u9DGGrnuWbcFFCQA02vcYdpuw\r\n
      CVy6mkP/yqN5VSV3EHZiJUA0aKIxot3o3YOiobpVYn9hwvzzOdMZO4SOuevNfY1c\r\n
      qmnLGhYoDvR1c2yaudCf/BDwQqlLoSg9F5X57bRtwaRyUjhtXVKXWb59qtiwwrvp\r\n
      1vPjxciEIxAtgSXtIUQz3ljDRNUHjpyfYM3ska5jkxMIPNYUYFMX2x+Gxn9PZEG3\r\n
      Im391BRynZsnkvJO6i4i5N1xsPK5SyPiKBnlMxW/6ZLi5aAQHV3cc2KLzV+T+s2B\r\n
      v9LTAyO7nWo5AoIBAASA/jqqyKZwyl3F8AkIq6CEjfeHQSidFG65iyxSJF65MJTJ\r\n
      fN+Jgye+Evb3/X47NIO9UnEpV6D8VR7YbaonHDQZG09ogRDKMfp4jxx9g8yUAdZS\r\n
      psYc3KXTGdqw94y9pTk9KJlN1lR6xjzPvcOGdAATq2zVnZXXJewifCI/iOu73yWP\r\n
      F1aeZiaFwzWuW6goJ7a/wrnZrjKNjI/CEAj/TwcvjYk3lDT9KLAYKX4DKUOW5jko\r\n
      gTacxRzlglIn4Q9SC/iipWvX7YX+EVuf2yUA0cdJiOAUnYxN+uEGEc0tP5nHoju7\r\n
      tp0yZmAi2L+cecCT0+CwHpwdZHZEVWpS4JLf40ECggEBALFSZIgGDZlaU5YL7zHV\r\n
      Q5APRugKDLKjMPW7IPwxINnj2tioAL/hOQBpfkNTXEM4ipmz1fCo57FNUjcOINzD\r\n
      hJqqmHWNmIgIZmJDKeG2rhKenYTblXCeADwCvTKNxWmfoi0iZ6ybwqCBuqjcxoSZ\r\n
      jfHCcGl0+yw9yAnLRM1ta2XopCb70ZIIS2PCHjk9J/xN2ryNY/PhsgnN2ilMiTNq\r\n
      oTFYCWPF5lCojrj020KQJUPEaUBzbcpqwZ/FI6HfXvKAdCjqKk40/wHNI2Np2oC6\r\n
      +h7o4NWs0/J+gNhP6/edjZf19DwTsNtbvf6PRUeRtkXeudVY99T0Sy9B0HNxik9b\r\n
      cikCggEAM2wassiP1i0Gc3wrbNLHyQN+yqMaAp0xF+8l0fU3T8zPL/tYDcITnZPY\r\n
      pEFV/aodP9X7XFuQD0iGTOTGDXiMSLPOLI/ifmwbT41rgIN9x14MpU2EtWeVz7sx\r\n
      ZIFMt98rHx6BsZx/DnSFDQ8iqrKF3u+OOv7s6j+8odz4Rq53+16vMev5VUMOPq+E\r\n
      aQn8SDKkOjZzwb9QGB9bXS5s9yyj4pLyggQ0O5S2ugZjUcmCecNpktN8bUR3I9VQ\r\n
      KWkcQa9yCpidp/JYrQtlbqAPiIzptA4T4RNh+F6pKbmw7hNMIPipPzbQezEMaBOn\r\n
      Cgb38EldyAVGjCzRGfhu9SNU9B03bg==\r\n
      -----END PRIVATE KEY-----
      """
    +publicKey: """
      -----BEGIN PUBLIC KEY-----\r\n
      MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5XnqLc+UwYjJQmLCWCR1\r\n
      TcY7577dKrEANvNge73agU2wEXw+PYij4jCMIFNsoQiNKE0kMHNmcvQEPt9a8Jrw\r\n
      cfFb3C4ELyqTcz1YTEI3pSu5OYj4j3P1tbKGmrnqat2MECoBqHeHOVYfXzCJ0gDX\r\n
      zizlEqN6VM32kGhhL0HOQ2yow4CI7L/ziiNWnG87tOuykMyE4bvtQb3KkGKaNlMe\r\n
      Vtt5zapK0Wfvs/69TCNo0t78IuTksM+H1oSzyVxOpcKJHOm/7gGXu7C0+kELY3ry\r\n
      55jMkSFZ5sW7RzzEn4S3c/LLEIaDQnwJDJwYw1F99UkrOu6VPL+TtxZ9h3fqhVgo\r\n
      60RMEqQQHduCDSairI0muo96Cy/F8PB2X/sekETyXIf3NxTVkbTNm/Z/FbAEIg/f\r\n
      OaWn8nkNU6iHuIkoyNIlIMtloMDtAtWdDzW0M0JkZNBDgJcSF4z5gdtvT1ePjnGc\r\n
      S0/aYT/64ndULfUaPti3ZEvWanvHNiR3iSnOTb//Djl+bkPwfNiV57l2Iv6FRCW+\r\n
      beNhvLtyCJGDORvxrdN91lOnW8ijgZnZ212j8PSwtzO6KKd8sgm91Ay34IP152Vb\r\n
      2cUjwj5YeRtS29K+O7Iiqv9JPWEbmtABbFYNHYan7sLG+hvR8eRInLj7LjiI1yDQ\r\n
      U45ZxOEnTM9GSbe2y48JSnUCAwEAAQ==\r\n
      -----END PUBLIC KEY-----
      """
    +apFetchedAt: null
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1686560440 {#11862
      date: 2023-06-12 11:00:40.0 +02:00
    }
    +__isInitialized__: true
     …2
  }
  +showAvatar: true
}
related_magazines App\Twig\Components\RelatedMagazinesComponent 16.0 MiB 3.66 ms
Input props
[
  "magazine" => "piracy@lemmy.dbzer0.com"
  "tag" => null
]
Attributes
[]
Component
App\Twig\Components\RelatedMagazinesComponent {#12023
  +limit: 4
  +tag: null
  +magazine: "piracy@lemmy.dbzer0.com"
  +type: "magazine"
  +title: "related_magazines"
  +refreshedRandom: false
  -repository: App\Repository\MagazineRepository {#332 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -twig: Twig\Environment {#1252 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
}
active_users App\Twig\Components\ActiveUsersComponent 16.0 MiB 0.26 ms
Input props
[
  "magazine" => App\Entity\Magazine {#264
    +icon: Proxies\__CG__\App\Entity\Image {#245 …}
    +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 {#274
      date: 2024-10-22 09:16:09.0 +02:00
    }
    +markedForDeletionAt: null
    +tags: null
    +moderators: Doctrine\ORM\PersistentCollection {#236 …}
    +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
    +entries: Doctrine\ORM\PersistentCollection {#179 …}
    +posts: Doctrine\ORM\PersistentCollection {#137 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
    +bans: Doctrine\ORM\PersistentCollection {#116 …}
    +reports: Doctrine\ORM\PersistentCollection {#102 …}
    +badges: Doctrine\ORM\PersistentCollection {#80 …}
    +logs: Doctrine\ORM\PersistentCollection {#70 …}
    +awards: Doctrine\ORM\PersistentCollection {#1360 …}
    +categories: Doctrine\ORM\PersistentCollection {#1792 …}
    -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 {#268
      date: 2024-02-24 05:17:09.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697197339 {#270
      date: 2023-10-13 13:42:19.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\ActiveUsersComponent {#12110
  +magazine: App\Entity\Magazine {#264
    +icon: Proxies\__CG__\App\Entity\Image {#245 …}
    +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 {#274
      date: 2024-10-22 09:16:09.0 +02:00
    }
    +markedForDeletionAt: null
    +tags: null
    +moderators: Doctrine\ORM\PersistentCollection {#236 …}
    +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
    +entries: Doctrine\ORM\PersistentCollection {#179 …}
    +posts: Doctrine\ORM\PersistentCollection {#137 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
    +bans: Doctrine\ORM\PersistentCollection {#116 …}
    +reports: Doctrine\ORM\PersistentCollection {#102 …}
    +badges: Doctrine\ORM\PersistentCollection {#80 …}
    +logs: Doctrine\ORM\PersistentCollection {#70 …}
    +awards: Doctrine\ORM\PersistentCollection {#1360 …}
    +categories: Doctrine\ORM\PersistentCollection {#1792 …}
    -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 {#268
      date: 2024-02-24 05:17:09.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697197339 {#270
      date: 2023-10-13 13:42:19.0 +02:00
    }
  }
  -userRepository: App\Repository\UserRepository {#603 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -twig: Twig\Environment {#1252 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
}
related_categories App\Twig\Components\RelatedCategoriesComponent 16.0 MiB 1.81 ms
Input props
[
  "magazine" => "piracy@lemmy.dbzer0.com"
  "tag" => null
]
Attributes
[]
Component
App\Twig\Components\RelatedCategoriesComponent {#12169
  +limit: 4
  +tag: null
  +magazine: "piracy@lemmy.dbzer0.com"
  +type: "related"
  +title: "related_categories"
  +refreshedRandom: false
  -repository: App\Repository\CategoryRepository {#12170 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -twig: Twig\Environment {#1252 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
}
related_posts App\Twig\Components\RelatedPostsComponent 16.0 MiB 2.92 ms
Input props
[
  "magazine" => "piracy@lemmy.dbzer0.com"
  "tag" => null
]
Attributes
[]
Component
App\Twig\Components\RelatedPostsComponent {#12240
  +limit: 4
  +tag: null
  +magazine: "piracy@lemmy.dbzer0.com"
  +type: "magazine"
  +post: null
  +title: "related_posts"
  +refreshedRandom: false
  -repository: App\Repository\PostRepository {#12239 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -twig: Twig\Environment {#1252 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
  -mentionManager: App\Service\MentionManager {#388 …}
}
related_entries App\Twig\Components\RelatedEntriesComponent 16.0 MiB 8.13 ms
Input props
[
  "magazine" => "piracy@lemmy.dbzer0.com"
  "tag" => null
]
Attributes
[]
Component
App\Twig\Components\RelatedEntriesComponent {#12309
  +limit: 4
  +tag: null
  +magazine: "piracy@lemmy.dbzer0.com"
  +type: "magazine"
  +entry: null
  +title: "related_entries"
  +refreshedRandom: false
  -repository: App\Repository\EntryRepository {#269 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -twig: Twig\Environment {#1252 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
  -mentionManager: App\Service\MentionManager {#388 …}
}
support_us_block App\Twig\Components\SupportUsBlock 16.0 MiB 0.25 ms
Input props
[]
Attributes
[]
Component
App\Twig\Components\SupportUsBlock {#12378
  +subject: ? App\Entity\Contracts\VotableInterface
  +url: ? string
  -twig: Twig\Environment {#1252 …}
  -cache: Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter {#600 …}
  -requestStack: Symfony\Component\HttpFoundation\RequestStack {#1328 …}
  -partnerBlockRepository: App\Repository\PartnerBlockRepository {#12379 …}
}
featured_magazines App\Twig\Components\FeaturedMagazinesComponent 16.0 MiB 0.74 ms
Input props
[
  "magazine" => App\Entity\Magazine {#264
    +icon: Proxies\__CG__\App\Entity\Image {#245 …}
    +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 {#274
      date: 2024-10-22 09:16:09.0 +02:00
    }
    +markedForDeletionAt: null
    +tags: null
    +moderators: Doctrine\ORM\PersistentCollection {#236 …}
    +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
    +entries: Doctrine\ORM\PersistentCollection {#179 …}
    +posts: Doctrine\ORM\PersistentCollection {#137 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
    +bans: Doctrine\ORM\PersistentCollection {#116 …}
    +reports: Doctrine\ORM\PersistentCollection {#102 …}
    +badges: Doctrine\ORM\PersistentCollection {#80 …}
    +logs: Doctrine\ORM\PersistentCollection {#70 …}
    +awards: Doctrine\ORM\PersistentCollection {#1360 …}
    +categories: Doctrine\ORM\PersistentCollection {#1792 …}
    -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 {#268
      date: 2024-02-24 05:17:09.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697197339 {#270
      date: 2023-10-13 13:42:19.0 +02:00
    }
  }
]
Attributes
[]
Component
App\Twig\Components\FeaturedMagazinesComponent {#12467
  +magazine: App\Entity\Magazine {#264
    +icon: Proxies\__CG__\App\Entity\Image {#245 …}
    +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 {#274
      date: 2024-10-22 09:16:09.0 +02:00
    }
    +markedForDeletionAt: null
    +tags: null
    +moderators: Doctrine\ORM\PersistentCollection {#236 …}
    +ownershipRequests: Doctrine\ORM\PersistentCollection {#232 …}
    +moderatorRequests: Doctrine\ORM\PersistentCollection {#221 …}
    +entries: Doctrine\ORM\PersistentCollection {#179 …}
    +posts: Doctrine\ORM\PersistentCollection {#137 …}
    +subscriptions: Doctrine\ORM\PersistentCollection {#199 …}
    +bans: Doctrine\ORM\PersistentCollection {#116 …}
    +reports: Doctrine\ORM\PersistentCollection {#102 …}
    +badges: Doctrine\ORM\PersistentCollection {#80 …}
    +logs: Doctrine\ORM\PersistentCollection {#70 …}
    +awards: Doctrine\ORM\PersistentCollection {#1360 …}
    +categories: Doctrine\ORM\PersistentCollection {#1792 …}
    -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 {#268
      date: 2024-02-24 05:17:09.0 +01:00
    }
    +apDeletedAt: null
    +apTimeoutAt: null
    +visibility: "visible             "
    +createdAt: DateTimeImmutable @1697197339 {#270
      date: 2023-10-13 13:42:19.0 +02:00
    }
  }
  -twig: Twig\Environment {#1252 …}
  -repository: App\Repository\MagazineRepository {#332 …}
}