{"id":22055364,"url":"https://github.com/sogladev/home-media-server","last_synced_at":"2025-05-12T15:36:49.415Z","repository":{"id":191167971,"uuid":"476536030","full_name":"sogladev/home-media-server","owner":"sogladev","description":"docker-compose.yml+.env for a docker stack containing: transmission, -arrs, calibre, plex/jellyfin","archived":false,"fork":false,"pushed_at":"2025-04-29T00:54:32.000Z","size":70,"stargazers_count":6,"open_issues_count":11,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-29T01:46:20.957Z","etag":null,"topics":["calibre","docker","home-media-server","kobo-ereader","plex-media-server","radarr","sonarr","torrent","transmission"],"latest_commit_sha":null,"homepage":"","language":null,"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/sogladev.png","metadata":{"files":{"readme":".github/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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-04-01T01:38:52.000Z","updated_at":"2025-04-14T11:27:31.000Z","dependencies_parsed_at":"2023-08-28T14:39:13.170Z","dependency_job_id":"d127cc4b-792a-44bb-a3a5-84611aed4140","html_url":"https://github.com/sogladev/home-media-server","commit_stats":null,"previous_names":["jellemeeus/home-media-server","sogladev/home-media-server"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sogladev%2Fhome-media-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sogladev%2Fhome-media-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sogladev%2Fhome-media-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sogladev%2Fhome-media-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sogladev","download_url":"https://codeload.github.com/sogladev/home-media-server/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253766647,"owners_count":21960960,"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":["calibre","docker","home-media-server","kobo-ereader","plex-media-server","radarr","sonarr","torrent","transmission"],"created_at":"2024-11-30T16:06:43.559Z","updated_at":"2025-05-12T15:36:49.398Z","avatar_url":"https://github.com/sogladev.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Home Media Server\n\n`docker-compose.yml` setup for a comprehensive home media server stack. Seamlessly manage and access your content, including movies, TV shows, music, web links, rss feeds and eBooks + Kobo eReader sync. Featuring apps like Plex/Jellyfin, Overseerr/Jellyseerr, Transmission, Prowlarr, Radarr, Sonarr, Lidarr, Freshrss, Linkwarden, Calibre, and Filebrowser, this server empowers you to enjoy and organize your media collection with ease.\n\nYou have two configuration options:\n\n1. Without VPN (`*-novpn.yml`): For straightforward local use.\n1. (deprecated, see vpn branch) With VPN (`*-vpn.yml`): Enhances privacy and secures your P2P traffic via OpenVPN\n\nOptional Stacks:\n\n- Traefik: Simplifies service management by providing a reverse proxy with easy-to-configure, accessible URLs for all services.\n\n## Services and their use\n\n| Service                                                 | Use                           |\n| ------------------------------------------------------- | ----------------------------- |\n| [bazarr](https://www.bazarr.media/)                     | Subtitle management           |\n| [calibre](https://calibre-ebook.com/)                   | Ebook management              |\n| [calibre-web](https://github.com/janeczku/calibre-web)  | Web interface for Calibre     |\n| [filebrowser](https://filebrowser.org/)                 | File management               |\n| [freshrss](https://freshrss.org/)                       | RSS feed reader               |\n| [jellyfin](https://jellyfin.org/)                       | Media server                  |\n| [jellyseerr](https://github.com/Fallenbagel/jellyseerr) | Media request management      |\n| [lidarr](https://lidarr.audio/)                         | Music collection manager      |\n| [linkwarden](https://github.com/linkwarden/linkwarden)  | Bookmark manager              |\n| [openbooks](https://github.com/evan-buss/openbooks)     | Book searcher (\\*)            |\n| [organizr](https://github.com/causefx/Organizr)         | Unified web interface         |\n| [overseerr](https://overseerr.dev/)                     | Media request management      |\n| [plex](https://www.plex.tv/)                            | Media server                  |\n| [prowlarr](https://prowlarr.com/)                       | Indexer manager               |\n| [radarr](https://radarr.video/)                         | Movie collection manager      |\n| [sonarr](https://sonarr.tv/)                            | TV show collection manager    |\n| [soularr](https://soularr.net)                          | connects Lidarr with Soulseek |\n| [slsk](https://www.slsknet.org/)                        | Soulseek P2P file sharing     |\n| [transmission](https://transmissionbt.com/)             | BitTorrent client             |\n\n```\n(*) Alternative:  Library Genesis (Libgen)\n```\n\n## Folder structure\n\n```\n/\n├── appdata\n     ├── bazarr\n     ├── calibre\n     ├── calibre-web\n     ├── filebrowser\n     ├── freshrss\n     ├── jackett\n     ├── jellyfin\n     ├── jellyseerr\n     ├── lidarr\n     ├── linkwarden\n     ├── openbooks\n     ├── organizr\n     ├── overseerr\n     ├── plex\n     ├── prowlarr\n     ├── radarr\n     ├── slskd\n     ├── sonarr\n     ├── soularr\n     ├── soulseek\n     ├── traefik\n     └── transmission\n└── data\n     ├── media\n     │   ├── books\n     │   ├── books_not_in_library\n     │   ├── filebrowser\n     │   ├── movies\n     │   ├── music\n     │   └── tv\n     ├── soulseek\n     │   ├── downloads\n     │   └── incomplete\n     └── torrents\n          ├── incomplete\n          ├── movies\n          └── tv\n```\n\n## Deploying the stack\n\nThis section covers deployment options for your home media server stack. You can choose to deploy using Portainer, Docker Compose with Docker Desktop, or Podman. Each method has its own advantages, but for simplicity and ease of use, I recommend using Portainer.\n\n### Using portainer\n\ncopypaste `docker-compose*.yml` to portainer\n\nconfig and add `home-media-server*.env` to portainer\n\nlaunch stack\n\n### Command line\n\nsetup a folder so that:\n\n```\n.\n├── docker-compose.yml\n└── stack.env\n```\n\n```sh\n$ docker compose --env-file stack.env up --detach\n```\n\n## Config\n\nAfter launching for the first time, some configuration is required. Always refer to the official docs (see [Services and their use](#services-and-their-use)). Some pointers are listed per application.\n\nConfig through web by going to `http://0.0.0.0:{port}/`\n\n| Port  | Application     | Domain                          | Domain Short |\n| ----- | --------------- | ------------------------------- | ------------ |\n| 6767  | bazarr          | bazarr.domain.duckdns.org       | b            |\n| 8093  | calibre https   | calibre.domain.duckdns.org      | c            |\n| 8092  | calibre http    |                                 |              |\n| 8083  | calibre-web     | calibre-web.domain.duckdns.org  | cw           |\n| 8090  | filebrowser     | filebrowser.domain.duckdns.org  | f            |\n| 9092  | freshrss        | freshrss.domain.duckdns.org     | rss          |\n| 8096  | jellyfin        | jellyfin.domain.duckdns.org     | j            |\n| 5056  | jellyseerr      | jellyseerr.domain.duckdns.org   | js           |\n| 8686  | lidarr          | lidarr.domain.duckdns.org       | l            |\n| 9093  | linkwarden      | linkwarden.domain.duckdns.org   | lw           |\n| 8099  | openbooks       | openbooks.domain.duckdns.org    | op           |\n| 9983  | organizr        | organizr.domain.duckdns.org     | o            |\n| 5055  | overseerr       | overseerr.domain.duckdns.org    | ov           |\n| 32400 | plex            | plex.domain.duckdns.org         | p            |\n| 9696  | prowlarr        | prowlarr.domain.duckdns.org     | pr           |\n| 7880  | radarr          | radarr.domain.duckdns.org       | r            |\n| 5030  | slsk (soulseek) | soulseek.domain.duckdns.org     | so           |\n| 8989  | sonarr          | sonarr.domain.duckdns.org       | s            |\n| 9091  | transmission    | transmission.domain.duckdns.org | t            |\n\n### Transmission\n\nmapping:\ndownloads: `/data/torrents`\nincomplete: `/data/torrents/incomplete`\n\n#### non-default web UI\n\nmanually install\n\nhttps://github.com/johman10/flood-for-transmission\n\n1. cd appdata/transmission\n2. curl\n3. unzip\n\n### Prowlarr\n\nhttps://docs.prowler.com/projects/prowler-open-source/en/latest/\n\ninstead of localhost, use their service names:\n\n```\nhttp://prowlarr:9696\nhttp://radarr:7878\n```\n\n### Sonarr, radarr, lidarr\n\nThese services require you to setup an indexer (prowlarr) and a download client (transmission)\n\n1. Add indexers to apps\n   copy the API key from the app then add the app in the Prowlarr web interface\n\n2. Add download client\n\n```\nTransmission client\n    Add category {tv|movies}\n```\n\n### Calibre, calibre-web\n\ndefault login calibre: `abc abc`\ndefault login calibre-web: `admin admin123`\n\nUse calibre to add books, calibre-web to setup a store endpoint to enable Kobo Sync\n\n#### Setup eReader with Kobo sync and calibre-web\n\ndocumentation: https://github.com/janeczku/calibre-web/wiki/Kobo-Integration\nNote that the following is written and tested for a `Kobo Aura H2O` model, steps may be different or this might not work at all for any other models.\n\nUnder abc's Profile (default profile)\n\"Kobo Sync Token\" click \"create/view token\"\n\nThis feature might need to be enabled by default\n\n\u003e Enable Kobo sync checkbox in the Basic configuration \u003e\u003e Feature\n\u003e Configuration page.\n\nNext connect eReader with a usb-cable to your computer. A single line in a configuration file needs to change to point the store to your home media server.\n\n\u003e The Kobo eReader.conf file found under the .kobo/Kobo directory on Kobo devices is used to configure which URL the device uses for syncing books.\n\u003e By default, the config file contains the following row:\n\u003e\n\u003e api_endpoint=https://storeapi.kobo.com\n\u003e\n\u003e Users can generate a URL to sync with Calibre-Web instead by clicking the\n\u003e Create/View button under their Calibre-Web profile page.\n\nYou need to change the ip to your local ip address, for example:\n\n```\napi_endpoint=http://192.168.0.205:8083/kobo/0cf8e8ccb456ad872f781f88b2cfdf83\n```\n\n#### Troubleshooting\n\nbooks aren't updating? Test with\n\n```\nhttp://localhost:8083/calibreweb/kobo/{token}/v1/library/sync\n```\n\nGo the api_endpoint in browser. If this is empty, consider pressing \"Force full kobo sync\" in the user options in calibre-web\n\n### Filebrowser\n\n`- /home/${USER}/Applications/Filebrowser:/srv`\n\nMounts a single folder called Filebrowser to /srv. This folder must be empty.\n\nOther folders are mounted as such: /srv/Pictures\nso they are accessible in the container as /Pictures\n\nThis will create Pictures/ under Applications. Pictures/ will be empty\n\nfilebrowser.db must exist before mounting, else mounts a directory\n`touch filebrowser.db`\n\nsame with settings.json\n\n```\n❯ cat settings.json\n{\n  \"port\": 80,\n  \"baseURL\": \"\",\n  \"address\": \"\",\n  \"log\": \"stdout\",\n  \"database\": \"/database/filebrowser.db\",\n  \"root\": \"/srv\"\n}\n```\n\nadmin/admin on initial login :8090\n\n### Openbooks\n\ndocumentation: https://evan-buss.github.io/openbooks/setup/docker/\n\nBooks are downloaded through the browser. They need to be manually added to calibre's library:\n\n- Move downloaded file to `/books_add_me` folder. This is mapped in the compose file (`.yml`) file\n- open calibre and click the `Add books` button. This copies the file to the library.\n- The downloaded file can be removed\n\nThe library will automaticly synchronize with `calibre web` and can then be synced to your ereader. Periodic syncing should be enabled by default on your ereader.\n\n### Organizr\n\ndocumentation: https://docs.organizr.app/\nhttps://github.com/causefx/Organizr\n\n### Slskd\n\ndefault username and password:\nslskd\n\nexample config in `slskd/slskd.yml`\n\n## Credits\n\nInspired by Youtube tutorial of a similar setup [Easy Automated Home Media Server: VPN, Radarr, Sonarr, Lidarr, Librarian in 10 Minutes.](https://www.youtube.com/watch?v=5rtGBwBuzQE)\n\nThe traefik reverse proxy setup is adapted from \"Traefik 3 Docker Certificates Guide\" by [TechnoTim](https://github.com/timothystewart6), originally published at https://technotim.live/posts/traefik-3-docker-certificates/, and licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). Changes were made to customize the configuration for use with DuckDNS instead of Cloudflare and routing services.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsogladev%2Fhome-media-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsogladev%2Fhome-media-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsogladev%2Fhome-media-server/lists"}