{"id":21459930,"url":"https://github.com/juftin/media-center","last_synced_at":"2025-07-15T02:31:51.120Z","repository":{"id":54854785,"uuid":"219915735","full_name":"juftin/media-center","owner":"juftin","description":"Multi-Container Home Media Center Application","archived":false,"fork":false,"pushed_at":"2021-05-13T23:34:59.000Z","size":3395,"stargazers_count":3,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-08T19:52:19.207Z","etag":null,"topics":["docker","docker-compose","plex-media-server","radarr","sonarr"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juftin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-11-06T05:02:42.000Z","updated_at":"2023-11-30T17:38:16.000Z","dependencies_parsed_at":"2022-08-14T04:50:34.587Z","dependency_job_id":null,"html_url":"https://github.com/juftin/media-center","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/juftin/media-center","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juftin%2Fmedia-center","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juftin%2Fmedia-center/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juftin%2Fmedia-center/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juftin%2Fmedia-center/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juftin","download_url":"https://codeload.github.com/juftin/media-center/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juftin%2Fmedia-center/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265390885,"owners_count":23757605,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","plex-media-server","radarr","sonarr"],"created_at":"2024-11-23T06:37:13.010Z","updated_at":"2025-07-15T02:31:50.374Z","avatar_url":"https://github.com/juftin.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/static/juftin.png\" width=\"250\" height=\"250\"  alt=\"juftin logo\"\u003e\n  \u003cimg src=\"docs/static/media-center-logo.png\" width=\"500\" alt=\"media-center\"\u003e\n\u003c/p\u003e\n\nMedia and home server stack.  It's a docker-compose project built\naround Plex, including schedulers/orchestrators for TV / Movie downloads, \nan always behind VPN torrenting webserver, and a site for users to request new downloads. \nSSL and a GoogleOAuth whitelist are built in as well.\n\n### ❗️ Important Notice ❗\n\nThis docker-compose application stack is dependent on a separate container \nstack consisting of Traefik Reverse Proxy, Dynamic DNS Syncing, and a \nDocker socket proxy.\n\n##### [⭐ Traefik Configuration ⭐](https://github.com/juftin/traefik/blob/master/README.md)\n\nSeparately, this repository has a \n[standalone](https://github.com/juftin/media-center/tree/standalone) branch which has a self-contained\nTraefik Reverse Proxy. Personally, I prefer to separate my reverse proxy from other ap️plications to \nreduce dependencies and to allow new apps and endpoints to be spun up and torn down. This \nstandalone branch is mostly un-maintained so make sure to carefully review any differences from master.\n\n### Application Setup + Container Info\n\nMost application set up and configuration is straightforward. \nPlease review the information of the various containers and applications. \nHelpful descriptions, screenshots are available to assist in initial configuration.\nImportant links to the source code, documentation,\nand more are available for review as well. \n\n# Containers\n\n-   [plex](#plex)\n-   [sonarr](#sonarr)\n-   [jackett](#jackett)\n-   [radarr](#radarr)\n-   [ombi](#ombi)\n-   [heimdall](#heimdall)\n-   [portainer](#portainer)\n-   [tautulli](#tautulli)\n-   [transmission](#transmission)\n-   [watchtower](#watchtower)\n\n## plex\n\n[Docker Hub](https://hub.docker.com/r/linuxserver/plex/) \\|\\|\n[GitHub](https://github.com/linuxserver/docker-plex) \\|\\|\n[Website](https://plex.tv) \\|\\|\n[Documentation](https://support.plex.tv/articles/)\n\n\u003cimg src=\"docs/static/plex_logo.png\" width=\"290\" alt=\"Plex Logo\"\u003e\n\nPlex organizes video, music and photos from personal media libraries \nand streams them to smart TVs, streaming boxes and mobile devices. This \ncontainer is packaged as a standalone Plex Media Server. Straightforward \ndesign and bulk actions mean getting things done faster.\n\n#### Configuration:\n\nPlex setup is fairly intuitive and straightforward. When setting up libraries you will\nuse the root directories, `/tv/` and `/movies/`\n\n## sonarr\n\n[Docker Hub](https://hub.docker.com/r/linuxserver/sonarr/) \\|\\|\n[GitHub](https://github.com/linuxserver/docker-sonarr) \\|\\|\n[Documentation](https://github.com/Sonarr/Sonarr/wiki)\n\n\u003cimg src=\"docs/static/sonarr_logo.png\" width=\"250\" alt=\"Sonarr Logo\"\u003e\n\nSonarr (formerly NZBdrone) is a PVR for usenet and bittorrent users. \nIt can monitor multiple RSS feeds for new episodes of your \nfavorite shows and will grab, sort and rename them. It can also be \nconfigured to automatically upgrade the quality of files already \ndownloaded when a better quality format becomes available.\n\n#### Configuration:\n\nFor security, I like to set up a basic authorization form on the `General Settings` to\nexclude non-admin users from accessing the application using the `ADMIN_USER` and \n`ADMIN_PASSWORD` variables.\n\n##### Download Client Configuration:\n\n\u003cimg src=\"docs/static/sonarr_download_client_config.png\" width=\"600\" alt=\"sonarr_download_client_config\"\u003e\n\n##### Indexer Client Configuration:\n\n\u003cimg src=\"docs/static/sonarr_indexer_config.png\" width=\"600\" alt=\"sonarr_indexer_config\"\u003e\n\n## jackett\n\n[Docker Hub](https://hub.docker.com/r/linuxserver/jackett/) \\|\\|\n[GitHub](https://github.com/linuxserver/docker-jackett) |\\|\n[Documentation](https://github.com/Jackett/Jackett/wiki)\n\n\u003cimg src=\"docs/static/jackett_logo.png\" width=\"200\" alt=\"Jackett Logo\"\u003e\n\nJackett works as a proxy server: it translates queries from apps \n(Sonarr, SickRage, CouchPotato, Mylar, etc) into tracker-site-specific \nhttp queries, parses the html response, then sends results back to the \nrequesting software. This allows for getting recent uploads (like RSS) \nand performing searches. Jackett is a single repository of maintained \nindexer scraping \u0026 translation logic - removing the burden from other apps.\n\n#### Configuration:\n\nJackett's configuration is fairly simple. The API Key is fisplayed in the \ntop right of the page. To track a new indexer, click `+Add Indexer` and search for \nit by name. These entries will be added as TORZNAB feeds on applications like\nSonarr and Radarr.\n\n\u003cimg src=\"docs/static/jackett_add_indexer.png\" width=\"500\" alt=\"jackett_add_indexer\"\u003e\n\n#### Recommended Indexers:\n\n- TV\n    - The Pirate Bay\n        - Endpoint: http://jackett:9117/api/v2.0/indexers/thepiratebay/results/torznab/\n        - Categories: 5000,5040,5050,100208,100205\n    - 1337x\n        - Endpoint: http://jackett:9117/api/v2.0/indexers/1337x/results/torznab/\n        - Categories: 5000,5030,5040,5070,5080,100074,100006,100009,100004,100041,100071,100075,100007\n    - RARBG\n        - Endpoint: http://jackett:9117/api/v2.0/indexers/thepiratebay/results/torznab/\n        - Categories: 5030,5030,5040,5045,100018,100041,100049\n    - kickasstorrents\n        - Endpoint: http://jackett:9117/api/v2.0/indexers/thepiratebay/results/torznab/\n        - Categories: 5000,5070,5080,103583               \n\n- Movies\n    - The Pirate Bay\n        - Endpoint: http://jackett:9117/api/v2.0/indexers/thepiratebay/results/torznab/\n        - Categories: 2000,2020,2040,2060,100207,100505,100201,100202,100501,100502\n    - 1337x\n        - Endpoint: http://jackett:9117/api/v2.0/indexers/1337x/results/torznab/\n        - Categories: 2000,2010,2030,2040,2045,2060,2070,100066,100073,100002,100004,100001,100054,100042,100070,100055,100003,100076\n    - RARBG\n        - Endpoint: http://jackett:9117/api/v2.0/indexers/thepiratebay/results/torznab/\n        - Categories: 2000,2030,2040,2045,2050,2060,100046,100042,100049,100017,100044,100047,100050,100045,100054,100051,100014,100048,100052\n    - kickasstorrents\n        - Endpoint: http://jackett:9117/api/v2.0/indexers/thepiratebay/results/torznab/\n        - Categories: 2000,112696,105134  \n    \n###### Notes:\n\n\u003e Jackett's default endpoint will be populated with your custom domain, it can be contacted\n\u003einternally at http://jackett:9117\n\u003e\n\u003e Make sure to pay close attention to the category codes relating to your particular download type.\n\n## radarr\n\n[Docker Hub](https://hub.docker.com/r/linuxserver/radarr/) \\|\\|\n[GitHub](https://github.com/linuxserver/docker-radarr) \\|\\|\n[Documentation](https://github.com/Radarr/Radarr/wiki)\n\n\u003cimg src=\"docs/static/radarr_logo.png\" width=\"250\" alt=\"Radarr Logo\"\u003e\n\nRadarr is an independent fork of Sonarr reworked for automatically \ndownloading movies via Usenet and BitTorrent.\n\n#### Configuration:\n\nSee the [jackett](#jackett) and [sonarr](#sonarr) sections for more detailed \ninstructions around setting up Indexers and Download clients with radarr. For \nsecurity, I like to set up a basic authorization form on the `General Settings` to\nexclude non-admin users from accessing the application using the `ADMIN_USER` and \n`ADMIN_PASSWORD` variables.\n\n## ombi\n\n[Docker Hub](https://hub.docker.com/r/linuxserver/ombi/) \\|\\|\n[GitHub](https://github.com/linuxserver/docker-ombi) \\|\\|\n[Website](https://ombi.io/) \\|\\|\n[Documentation](https://github.com/tidusjar/Ombi/wiki)\n\n\u003cimg src=\"docs/static/ombi_logo.png\" width=\"300\" alt=\"ombi_logo\"\u003e\n\nOmbi allows you to host your own Plex Request and user management system. \nIf you are sharing your Plex server with other users, allow \nthem to request new content using an easy to manage interface! \nManage all your requests for Movies and TV with ease, leave notes \nfor the user and get notification when a user requests something. \nAllow your users to post issues against their requests so you know there \nis a problem with the audio etc. Even automatically send them weekly newsletters \nof new content that has been added to your Plex server!\n\n#### Configuration:\n\nOmbi has a few different notification settings, personally I use its \nPushover (push notifications) and email integrations to notify users. \nPlease refer to the documentation link for further details.\n\n##### Media Server (Plex) Config\n\n\u003cimg src=\"docs/static/ombi_plex_config.png\" width=\"600\" alt=\"ombi_plex_config\"\u003e\n\n##### TV (Sonarr) Config\n\n\u003cimg src=\"docs/static/ombi_sonarr_config.png\" width=\"600\" alt=\"ombi_sonarr_config\"\u003e\n\n##### Movies (Radarr) Config\n\n\u003cimg src=\"docs/static/ombi_radarr_config.png\" width=\"600\" alt=\"ombi_radarr_config\"\u003e\n\n## heimdall\n\n[Docker Hub](https://hub.docker.com/r/linuxserver/heimdall/) \\|\\|\n[GitHub](https://github.com/linuxserver/docker-heimdall) \\|\\|\n[Website](https://www.heimdall.site)\n\n\u003cimg src=\"docs/static/heimdall_logo.svg\" width=\"220\" alt=\"Heimdall Logo\"\u003e\n\nHeimdall is a way to organise all those links to your most used web sites and \nweb applications in a simple way. Simplicity is the key to Heimdall. \nWhy not use it as your browser start page? It even has the ability to \ninclude a search bar using either Google, Bing or DuckDuckGo.\n\n\u003cimg src=\"docs/static/heimdall.png\" width=\"600\" alt=\"Heimdall\"\u003e\n\n###### Notes:\n\n\u003e enter the full url path of the domain in new tabs \n\u003e for a redirect. (ie. `https://app.example.com`)\n\n## portainer\n\n[Docker Hub](https://hub.docker.com/r/portainer/portainer/) \\|\\|\n[GitHub](https://github.com/portainer/portainer) \\|\\|\n[Website](https://www.portainer.io/) \\|\\|\n[Documentation](https://portainer.readthedocs.io/en/stable/)\n\n\u003cimg src=\"docs/static/portainer_logo.png\" width=\"250\" alt=\"Portainer Logo\"\u003e\n\nPortainer is a lightweight management UI which allows you to \neasily manage your different Docker environments (Docker hosts or Swarm clusters).\nPortainer is meant to be as simple to deploy as it is to use. It consists of\na single container that can run on any Docker engine (can be deployed as\nLinux container or a Windows native container, supports other platforms too). \nPortainer allows you to manage all your Docker resources (containers, images, volumes, \nnetworks and more) ! It is compatible with the standalone Docker engine and \nwith Docker Swarm mode.\n\n#### Configuration:\n\nThe administration password is set using the `ADMIN_HTPASSWD` on the [`.env` file](../example.env).\nBy default the username is `admin`. I prefer to create a new admin user using both `ADMIN_USER` and \n`ADMIN_PASSWORD` variables.\n\n## tautulli\n\n[Docker Hub](https://hub.docker.com/r/linuxserver/tautulli/) \\|\\|\n[GitHub](https://github.com/linuxserver/docker-tautulli) \\|\\|\n[Website](https://tautulli.com/)\n\n\u003cimg src=\"docs/static/tautulli_logo.png\" width=\"250\" alt=\"tautulli Logo\"\u003e\n\nTautulli is a 3rd party application that you can run alongside \nyour Plex Media Server to monitor activity and track various statistics. \nMost importantly, these statistics include what has been watched, \nwho watched it, when and where they watched it, and how it was watched. \nThe only thing missing is \"why they watched it\", but who am I to question \nyour 42 plays of Frozen. All statistics are presented in a nice and clean \ninterface with many tables and graphs, which makes it easy to brag about \nyour server to everyone else.\n\n#### Configuration:\n\nTautulli configuration is simple, and automated upon first launch of the\napplication.\n\n## transmission\n\n[Docker Hub](https://hub.docker.com/r/haugene/transmission-openvpn) \\|\\|\n[GitHub](https://github.com/haugene/docker-transmission-openvpn)\n\n\u003cimg src=\"docs/static/transmission_logo.png\" width=\"250\" alt=\"traefik Logo\"\u003e\n\nThis container contains OpenVPN and Transmission with a configuration \nwhere Transmission is running only when OpenVPN has an active tunnel. \nIt bundles configuration files for many popular VPN providers to \nmake the setup easier.\n\n###### Notes:\n\n\u003eCurrently, transmission is avaiulable to any user whitelisted by Google OAuth. \n\u003eThere should be future work to add an extra layer of proection.  \n\u003e\n\u003eThis container has a health check that pings google.com with data \n\u003eto verify a stable connnection. Traefik takes roughly \n\u003e5 minutes to recognize this container as healthy before making it available.\n\u003e\n\u003e As a sanity check I like to use the torrent magnet \n\u003eIP tool at \u003chttps://ipleak.net\u003e to verfiy a stable VPN connection.\n\n## watchtower\n\n[Docker Hub](https://hub.docker.com/r/containrrr/watchtower) \\|\\|\n[GitHub](https://github.com/containrrr/watchtower) \\|\\|\n[Documentation](https://containrrr.dev/watchtower/)\n\n\u003cimg src=\"docs/static/watchtower_logo.png\" width=\"250\" alt=\"traefik Logo\"\u003e\n\nWith watchtower you can update the running version of your containerized \napp simply by pushing a new image to the Docker Hub or your own image registry. \nWatchtower will pull down your new image, gracefully shut down your \nexisting container and restart it with the same options that were used \nwhen it was deployed initially.\n\n\n* * *\n\n### Special Thank You\n\nThis configuration was inspired by, and \nimmensely helped by the article at \n[https://smarthomebeginner.com](https://www.smarthomebeginner.com/traefik-2-docker-tutorial). \n\n\n[Here](https://github.com/htpcBeginner/docker-traefik) \nis their massive home server setup on GitHub, and the accompanying \n[docker-compose](https://github.com/htpcBeginner/docker-traefik/blob/master/docker-compose-t2.yml) \nfile.\n\n* * *\n\n* * *\n\n\u003cbr/\u003e\n\u003cbr/\u003e\n\u003cbr/\u003e\n\n###### Cool stuff happens in Denver, CO [\u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/6/61/Flag_of_Denver%2C_Colorado.svg/800px-Flag_of_Denver%2C_Colorado.svg.png\" width=\"25\" alt=\"Denver\"\u003e](https://denver-devs.slack.com/)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuftin%2Fmedia-center","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuftin%2Fmedia-center","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuftin%2Fmedia-center/lists"}