commit c0d0d669c9a6d830e9b284471eac928774ae263c Author: Niklas Kapelle Date: Fri Mar 22 17:01:43 2024 +0100 initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..a4bda86 --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +# Gold Roger + +A complete media suit in docker. Handles Torrents/VPN/Indexer/Automatic downloads and many more. The only thing required outside of this is VPN access from mullvad. + +# Used software + +- qBittorent +- gluetun +- jackett +- radarr +- sonarr + +# Required configuration + +## VPN + +Gluetun supports many VPN providers. I use [Mullvad](https://mullvad.net/). Check the gluetun [wiki](https://github.com/qdm12/gluetun-wiki) for infomation on setting +up your provider. + +## Docker Volumes + +In the `bulk` volume create a `movies` and `series` directory. + +Change ownership to `1000:1000` with `chown 1000:1000 -R .`. + +## qBittroent + +Default login is `admin` and the password is printed on the logs. + +Downloads --> Save Management --> Default Save Path to `/bulk/downloads`. +Connection --> Proxy server --> `SOCKS5` and `10.64.0.1` and port `1080` and check `Use proxy for peer connections`. +BitTorrent --> Seeding Limits --> check `When total seeding time reaches` and set to `30`. Do not set it to 0. This will prevents sonarr/radarr from importing. Also we can't seed with mullvad vpn. + +## Radarr / Sonarr + +Media Management --> Root Folders --> Add root folder. Set to `/bulk/movies` or `/bulk/series`. + +Indexers --> Add --> Torznab --> Custom + URL: Copy Torznab url from jackett. (Make sure the hostname is correct `jacket:9117`) + API key: Copy from jackett + Click Test + +Download clients: +Add qBittorent: + Host: `gluetun` (Because qBittorent is bound to gluetun) + Port: `8080` + Username: `admin` + Password: As set in qbt + Click test. \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..184dcc5 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,161 @@ +version: '3.8' + +services: + qbittorrent: + image: lscr.io/linuxserver/qbittorrent:latest + container_name: qbittorrent + network_mode: "service:gluetun" + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/Berlin + - WEBUI_PORT=8080 + healthcheck: # Use healthcheck for mullvadvpn + test: ["CMD-SHELL", "curl https://am.i.mullvad.net/json | jq '.mullvad_exit_ip' | grep 'true'"] + interval: 3m + timeout: 10s + volumes: + - qbittorrent_config:/config + - bulk:/bulk + restart: unless-stopped + + jackett: + image: lscr.io/linuxserver/jackett:latest + container_name: jackett + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/Berlin + networks: + - indexer + - web + volumes: + - jackett_config:/config + labels: + - traefik.enable=true + - traefik.http.services.jackett.loadbalancer.server.port=9117 + - traefik.http.routers.jackett-http.rule=Host(`jackett.localhost`) + - traefik.http.routers.jackett-http.entrypoints=web + + gluetun: + image: qmcgaw/gluetun:latest + container_name: gluetun + cap_add: + - NET_ADMIN + networks: + - web + environment: + - VPN_SERVICE_PROVIDER=mullvad + - VPN_TYPE=wireguard + - WIREGUARD_PRIVATE_KEY=xxxxxxxxxx + - WIREGUARD_ADDRESSES=10.xxxxx/32 + - SERVER_CITIES=zurich,madrid,warsaw + - TZ=Berlin/Europe + labels: + - traefik.enable=true + - traefik.http.services.qbittorrent.loadbalancer.server.port=8080 + - traefik.http.routers.qbittorrent-http.rule=Host(`qbt.localhost`) + - traefik.http.routers.qbittorrent-http.entrypoints=web + # ports: + # - 8888:8888/tcp # HTTP proxy + # - 8388:8388/tcp # Shadowsocks + # - 8388:8388/udp # Shadowsocks + + radarr: + image: lscr.io/linuxserver/radarr:latest + container_name: radarr + environment: + - PUID=1000 + - PGID=1000 + - TZ=Berlin/Europe + networks: + - indexer + - web + volumes: + - radarr_config:/config + - bulk:/bulk + labels: + - traefik.enable=true + - traefik.http.services.radarr.loadbalancer.server.port=7878 + - traefik.http.routers.radarr-http.rule=Host(`radarr.localhost`) + - traefik.http.routers.radarr-http.entrypoints=web + + sonarr: + image: lscr.io/linuxserver/sonarr:latest + container_name: sonarr + environment: + - PUID=1000 + - PGID=1000 + - TZ=Berlin/Europe + networks: + - indexer + - web + volumes: + - sonarr_config:/config + - bulk:/bulk + labels: + - traefik.enable=true + - traefik.http.services.sonarr.loadbalancer.server.port=8989 + - traefik.http.routers.sonarr-http.rule=Host(`sonarr.localhost`) + - traefik.http.routers.sonarr-http.entrypoints=web + + jellyfin: + image: lscr.io/linuxserver/jellyfin:latest + container_name: jellyfin + environment: + - PUID=1000 + - PGID=1000 + - TZ=Berlin/Europe + networks: + - web + volumes: + - bulk:/data + - jellyfin_config:/config + labels: + - traefik.enable=true + - traefik.http.routers.jelly-http.rule=Host(`jelly.localhost`) + - traefik.http.routers.jelly-http.entrypoints=web + + traefik: + container_name: traefik + image: traefik:latest + command: + - --accesslog=false + - --entrypoints.web=true + - --entrypoints.web.address=:80 + - --entrypoints.web-secure=true + - --entrypoints.web-secure.address=:443 + - --providers.docker=true + - --providers.docker.exposedbydefault=false + - --providers.docker.network=web + volumes: + - "/var/run/docker.sock:/var/run/docker.sock:ro" + networks: + - web + ports: + - "0.0.0.0:80:80" + - "0.0.0.0:443:443" + +networks: + indexer: + name: indexer + driver: bridge + internal: true + web: + name: web + driver: bridge + internal: true + +volumes: + jackett_config: + name: jackett_config + qbittorrent_config: + name: qbittorrent_config + radarr_config: + name: radarr_config + sonarr_config: + name: sonarr_config + jellyfin_config: + name: jellyfin_config + bulk: + name: bulk