From 159187b5635d45f9336426a8454c0634c115bc7a Mon Sep 17 00:00:00 2001 From: Jean Froment Date: Wed, 2 Dec 2020 14:50:11 +0100 Subject: [PATCH 01/10] Format docker-compose.yml, use ghcr.io when possible --- docker-compose.yml | 696 ++++++++++++++++++++++----------------------- 1 file changed, 348 insertions(+), 348 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index c43cd92..f53efc4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,290 +1,290 @@ version: "3.7" services: - traefik: - image: traefik - container_name: traefik - restart: always - command: - - --certificatesresolvers.le.acme.email=${ACME_MAIL} - - --pilot.token=${PILOT_TOKEN} - ports: - - "80:80" - - "443:443" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - ./traefik:/etc/traefik:ro - - configtraefik:/config:ro - environment: - - TRAEFIK_DOMAIN=${TRAEFIK_DOMAIN} - - TZ=${TZ} - labels: - - "traefik.enable=true" - # Docker labels for enabling Traefik dashboard - - "traefik.http.routers.traefik.rule=Host(`traefik.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.traefik.service=api@internal" - - "traefik.http.routers.traefik.middlewares=common-auth@file" + traefik: + image: traefik + container_name: traefik + restart: always + command: + - --certificatesresolvers.le.acme.email=${ACME_MAIL} + - --pilot.token=${PILOT_TOKEN} + ports: + - "80:80" + - "443:443" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./traefik:/etc/traefik:ro + - configtraefik:/config:ro + environment: + - TRAEFIK_DOMAIN=${TRAEFIK_DOMAIN} + - TZ=${TZ} + labels: + - "traefik.enable=true" + # Docker labels for enabling Traefik dashboard + - "traefik.http.routers.traefik.rule=Host(`traefik.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.traefik.service=api@internal" + - "traefik.http.routers.traefik.middlewares=common-auth@file" - deluge: - image: linuxserver/deluge - container_name: deluge - restart: always - volumes: - - torrents:/torrents - - configdeluge:/config - - downloads:/downloads - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.routers.deluge.rule=Host(`deluge.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.deluge.middlewares=common-auth@file" + deluge: + image: ghcr.io/linuxserver/deluge + container_name: deluge + restart: always + volumes: + - torrents:/torrents + - configdeluge:/config + - downloads:/downloads + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.deluge.rule=Host(`deluge.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.deluge.middlewares=common-auth@file" - plex: - image: linuxserver/plex - container_name: plex - restart: always - ports: - - "32400:32400" - - "32400:32400/udp" - - "32469:32469" - - "32469:32469/udp" - - "5353:5353/udp" - - "1900:1900/udp" - volumes: - - configplex:/config - - torrents:/torrents - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - - VERSION=latest - labels: - - "traefik.enable=true" - - "traefik.http.services.plex-seedbox.loadbalancer.server.port=32400" - - "traefik.http.routers.plex.rule=Host(`plex.${TRAEFIK_DOMAIN}`)" + plex: + image: ghcr.io/linuxserver/plex + container_name: plex + restart: always + ports: + - "32400:32400" + - "32400:32400/udp" + - "32469:32469" + - "32469:32469/udp" + - "5353:5353/udp" + - "1900:1900/udp" + volumes: + - configplex:/config + - torrents:/torrents + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + - VERSION=latest + labels: + - "traefik.enable=true" + - "traefik.http.services.plex-seedbox.loadbalancer.server.port=32400" + - "traefik.http.routers.plex.rule=Host(`plex.${TRAEFIK_DOMAIN}`)" - jackett: - image: linuxserver/jackett - container_name: jackett - restart: always - volumes: - - config:/config - - torrents:/downloads - - /etc/localtime:/etc/localtime:ro - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.routers.jackett.rule=Host(`jackett.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.jackett.middlewares=common-auth@file" + jackett: + image: ghcr.io/linuxserver/jackett + container_name: jackett + restart: always + volumes: + - config:/config + - torrents:/downloads + - /etc/localtime:/etc/localtime:ro + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.jackett.rule=Host(`jackett.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.jackett.middlewares=common-auth@file" - sonarr: - image: linuxserver/sonarr:preview - container_name: sonarr - restart: always - volumes: - - configsonarr:/config - - torrents:/torrents - - /etc/localtime:/etc/localtime:ro - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.routers.sonarr.rule=Host(`sonarr.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.sonarr.middlewares=common-auth@file" + sonarr: + image: ghcr.io/linuxserver/sonarr:preview + container_name: sonarr + restart: always + volumes: + - configsonarr:/config + - torrents:/torrents + - /etc/localtime:/etc/localtime:ro + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.sonarr.rule=Host(`sonarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.sonarr.middlewares=common-auth@file" - radarr: - image: linuxserver/radarr:develop - container_name: radarr - restart: always - volumes: - - configradarr:/config - - torrents:/torrents - - /etc/localtime:/etc/localtime:ro - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.routers.radarr.rule=Host(`radarr.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.radarr.middlewares=common-auth@file" + radarr: + image: ghcr.io/linuxserver/radarr:develop + container_name: radarr + restart: always + volumes: + - configradarr:/config + - torrents:/torrents + - /etc/localtime:/etc/localtime:ro + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.radarr.rule=Host(`radarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.radarr.middlewares=common-auth@file" - bazarr: - image: linuxserver/bazarr - container_name: bazarr - restart: always - volumes: - - torrents:/torrents - - configbazarr:/config - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.routers.bazarr.rule=Host(`bazarr.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.bazarr.middlewares=common-auth@file" + bazarr: + image: ghcr.io/linuxserver/bazarr + container_name: bazarr + restart: always + volumes: + - torrents:/torrents + - configbazarr:/config + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.bazarr.rule=Host(`bazarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.bazarr.middlewares=common-auth@file" - lidarr: - image: linuxserver/lidarr:preview - container_name: lidarr - restart: always - volumes: - - configlidarr:/config - - torrents:/torrents - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.routers.lidarr.rule=Host(`lidarr.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.lidarr.middlewares=common-auth@file" + lidarr: + image: ghcr.io/linuxserver/lidarr:preview + container_name: lidarr + restart: always + volumes: + - configlidarr:/config + - torrents:/torrents + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.lidarr.rule=Host(`lidarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.lidarr.middlewares=common-auth@file" - tautulli: - image: linuxserver/tautulli - container_name: tautulli - restart: always - volumes: - - configtautulli:/config - - config:/logs:ro # Inside of tautulli, bind to logs via "/logs/Plex Media Server/Logs" - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.routers.tautulli.rule=Host(`tautulli.${TRAEFIK_DOMAIN}`)" + tautulli: + image: ghcr.io/linuxserver/tautulli + container_name: tautulli + restart: always + volumes: + - configtautulli:/config + - config:/logs:ro # Inside of tautulli, bind to logs via "/logs/Plex Media Server/Logs" + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.tautulli.rule=Host(`tautulli.${TRAEFIK_DOMAIN}`)" - jdownloader: - image: jlesage/jdownloader-2 - container_name: jdownloader - restart: unless-stopped - volumes: - - configjdownloader:/config - - downloads:/output - environment: - - USER_ID=${PUID} - - GROUP_ID=${PGID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.services.jdownloader-seedbox.loadbalancer.server.port=5800" - - "traefik.http.routers.jdownloader.rule=Host(`jdownloader.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.jdownloader.middlewares=common-auth@file" + jdownloader: + image: jlesage/jdownloader-2 + container_name: jdownloader + restart: unless-stopped + volumes: + - configjdownloader:/config + - downloads:/output + environment: + - USER_ID=${PUID} + - GROUP_ID=${PGID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.services.jdownloader-seedbox.loadbalancer.server.port=5800" + - "traefik.http.routers.jdownloader.rule=Host(`jdownloader.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.jdownloader.middlewares=common-auth@file" - tdarr: - image: haveagitgat/tdarr - container_name: tdarr - restart: always - environment: - - PUID=${PUID} - - PGID=${PGID} - - TZ=${TZ} - volumes: - - torrents:/home/Tdarr/Media - - configtdarr:/home/Tdarr/Documents/Tdarr - - tdarrdb:/var/lib/mongodb - labels: - - "traefik.enable=true" - - "traefik.http.services.tdarr-seedbox.loadbalancer.server.port=8265" - - "traefik.http.routers.tdarr.rule=Host(`tdarr.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.tdarr.middlewares=common-auth@file" + tdarr: + image: haveagitgat/tdarr + container_name: tdarr + restart: always + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + volumes: + - torrents:/home/Tdarr/Media + - configtdarr:/home/Tdarr/Documents/Tdarr + - tdarrdb:/var/lib/mongodb + labels: + - "traefik.enable=true" + - "traefik.http.services.tdarr-seedbox.loadbalancer.server.port=8265" + - "traefik.http.routers.tdarr.rule=Host(`tdarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.tdarr.middlewares=common-auth@file" - nextcloud-db: - image: mariadb:10 - container_name: nextcloud-db - command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW - restart: always - environment: - - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - - MYSQL_DATABASE=${MYSQL_DATABASE} - - MYSQL_USER=${MYSQL_USER} - - MYSQL_PASSWORD=${MYSQL_PASSWORD} - - TZ=${TZ} - volumes: - - nextclouddb:/var/lib/mysql - labels: - - "traefik.enable=false" + nextcloud-db: + image: mariadb:10 + container_name: nextcloud-db + command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW + restart: always + environment: + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} + - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_USER=${MYSQL_USER} + - MYSQL_PASSWORD=${MYSQL_PASSWORD} + - TZ=${TZ} + volumes: + - nextclouddb:/var/lib/mysql + labels: + - "traefik.enable=false" # See tools/init-setup-nextcloud.sh for first install - nextcloud: - depends_on: - - nextcloud-db - image: linuxserver/nextcloud - container_name: nextcloud - restart: always - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - volumes: - - confignextcloud:/config - - nextclouddata:/data - - torrents:/torrents - - config:/seedbox-config - labels: - - "traefik.enable=true" - - "traefik.http.routers.nextcloud.rule=Host(`nextcloud.${TRAEFIK_DOMAIN}`)" - - "traefik.http.services.nextcloud-seedbox.loadbalancer.server.scheme=https" - - "traefik.http.services.nextcloud-seedbox.loadbalancer.server.port=443" + nextcloud: + depends_on: + - nextcloud-db + image: linuxserver/nextcloud + container_name: nextcloud + restart: always + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + volumes: + - confignextcloud:/config + - nextclouddata:/data + - torrents:/torrents + - config:/seedbox-config + labels: + - "traefik.enable=true" + - "traefik.http.routers.nextcloud.rule=Host(`nextcloud.${TRAEFIK_DOMAIN}`)" + - "traefik.http.services.nextcloud-seedbox.loadbalancer.server.scheme=https" + - "traefik.http.services.nextcloud-seedbox.loadbalancer.server.port=443" - portainer: - image: portainer/portainer-ce - container_name: portainer - restart: always - volumes: - - /var/run/docker.sock:/var/run/docker.sock - command: --admin-password ${PORTAINER_ADMIN_PASSWORD} --host=unix:///var/run/docker.sock - labels: - - "traefik.enable=true" - - "traefik.http.routers.portainer.rule=Host(`portainer.${TRAEFIK_DOMAIN}`)" - - "traefik.http.services.portainer-seedbox.loadbalancer.server.port=9000" + portainer: + image: portainer/portainer-ce + container_name: portainer + restart: always + volumes: + - /var/run/docker.sock:/var/run/docker.sock + command: --admin-password ${PORTAINER_ADMIN_PASSWORD} --host=unix:///var/run/docker.sock + labels: + - "traefik.enable=true" + - "traefik.http.routers.portainer.rule=Host(`portainer.${TRAEFIK_DOMAIN}`)" + - "traefik.http.services.portainer-seedbox.loadbalancer.server.port=9000" - netdata: - image: netdata/netdata - restart: always - container_name: netdata - hostname: netdata.${TRAEFIK_DOMAIN} - environment: - PGID: 999 - cap_add: - - SYS_PTRACE - security_opt: - - apparmor:unconfined - volumes: - - /proc:/host/proc:ro - - /sys:/host/sys:ro - - /var/run/docker.sock:/var/run/docker.sock:rw - labels: - - "traefik.enable=true" - - "traefik.http.routers.netdata.rule=Host(`netdata.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.netdata.middlewares=common-auth@file" + netdata: + image: netdata/netdata + restart: always + container_name: netdata + hostname: netdata.${TRAEFIK_DOMAIN} + environment: + PGID: 999 + cap_add: + - SYS_PTRACE + security_opt: + - apparmor:unconfined + volumes: + - /proc:/host/proc:ro + - /sys:/host/sys:ro + - /var/run/docker.sock:/var/run/docker.sock:rw + labels: + - "traefik.enable=true" + - "traefik.http.routers.netdata.rule=Host(`netdata.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.netdata.middlewares=common-auth@file" - duplicati: - image: linuxserver/duplicati - container_name: duplicati - restart: unless-stopped - environment: - - PUID=${PUID} - - PGID=${PGID} - - TZ=${TZ} - volumes: - - configduplicati:/config - - backups:/backups - - alldata:/source - labels: - - "traefik.enable=true" - - "traefik.http.routers.duplicati.rule=Host(`duplicati.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.duplicati.middlewares=common-auth@file" + duplicati: + image: ghcr.io/linuxserver/duplicati + container_name: duplicati + restart: unless-stopped + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + volumes: + - configduplicati:/config + - backups:/backups + - alldata:/source + labels: + - "traefik.enable=true" + - "traefik.http.routers.duplicati.rule=Host(`duplicati.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.duplicati.middlewares=common-auth@file" networks: default: @@ -292,83 +292,83 @@ networks: name: "traefik-network" volumes: - alldata: - driver: local-persist - driver_opts: - mountpoint: /data - config: - driver: local-persist - driver_opts: - mountpoint: /data/config - configtraefik: - driver: local-persist - driver_opts: - mountpoint: /data/config/traefik - configplex: - driver: local-persist - driver_opts: - mountpoint: /data/config/Plex - configsonarr: - driver: local-persist - driver_opts: - mountpoint: /data/config/sonarr - configradarr: - driver: local-persist - driver_opts: - mountpoint: /data/config/radarr - configbazarr: - driver: local-persist - driver_opts: - mountpoint: /data/config/bazarr - configlidarr: - driver: local-persist - driver_opts: - mountpoint: /data/config/lidarr - configdeluge: - driver: local-persist - driver_opts: - mountpoint: /data/config/deluge - configtautulli: - driver: local-persist - driver_opts: - mountpoint: /data/config/tautulli - configjdownloader: - driver: local-persist - driver_opts: - mountpoint: /data/config/jdownloader - configtdarr: - driver: local-persist - driver_opts: - mountpoint: /data/config/tdarr - tdarrdb: - driver: local-persist - driver_opts: - mountpoint: /data/config/tdarr-db - nextclouddb: - driver: local-persist - driver_opts: - mountpoint: /data/nextcloud-db - confignextcloud: - driver: local-persist - driver_opts: - mountpoint: /data/config/nextcloud - nextclouddata: - driver: local-persist - driver_opts: - mountpoint: /data/config/nextcloud-data - torrents: - driver: local-persist - driver_opts: - mountpoint: /data/torrents - downloads: - driver: local-persist - driver_opts: - mountpoint: /data/torrents/deluge - configduplicati: - driver: local-persist - driver_opts: - mountpoint: /data/config/duplicati - backups: - driver: local-persist - driver_opts: - mountpoint: /data/backups + alldata: + driver: local-persist + driver_opts: + mountpoint: /data + config: + driver: local-persist + driver_opts: + mountpoint: /data/config + configtraefik: + driver: local-persist + driver_opts: + mountpoint: /data/config/traefik + configplex: + driver: local-persist + driver_opts: + mountpoint: /data/config/Plex + configsonarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/sonarr + configradarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/radarr + configbazarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/bazarr + configlidarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/lidarr + configdeluge: + driver: local-persist + driver_opts: + mountpoint: /data/config/deluge + configtautulli: + driver: local-persist + driver_opts: + mountpoint: /data/config/tautulli + configjdownloader: + driver: local-persist + driver_opts: + mountpoint: /data/config/jdownloader + configtdarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/tdarr + tdarrdb: + driver: local-persist + driver_opts: + mountpoint: /data/config/tdarr-db + nextclouddb: + driver: local-persist + driver_opts: + mountpoint: /data/nextcloud-db + confignextcloud: + driver: local-persist + driver_opts: + mountpoint: /data/config/nextcloud + nextclouddata: + driver: local-persist + driver_opts: + mountpoint: /data/config/nextcloud-data + torrents: + driver: local-persist + driver_opts: + mountpoint: /data/torrents + downloads: + driver: local-persist + driver_opts: + mountpoint: /data/torrents/deluge + configduplicati: + driver: local-persist + driver_opts: + mountpoint: /data/config/duplicati + backups: + driver: local-persist + driver_opts: + mountpoint: /data/backups From aac50d30b0d954b98b80b92bc1bda737d2089d7b Mon Sep 17 00:00:00 2001 From: Jean Froment Date: Sun, 6 Dec 2020 18:46:10 +0100 Subject: [PATCH 02/10] Add volume bindings to netdata --- docker-compose.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index f53efc4..d71e180 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -263,6 +263,9 @@ services: volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro + - /etc/passwd:/host/etc/passwd:ro + - /etc/group:/host/etc/group:ro + - /etc/os-release:/host/etc/os-release:ro - /var/run/docker.sock:/var/run/docker.sock:rw labels: - "traefik.enable=true" From 990063a17f2b5bcbe6fd79f8af5fae4c857872f2 Mon Sep 17 00:00:00 2001 From: Jean Froment Date: Wed, 16 Dec 2020 10:33:55 +0100 Subject: [PATCH 03/10] Pick change from #8 (cannot merge it due to previous formatting in all the file) --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index d71e180..6091fa2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,7 +14,7 @@ services: volumes: - /var/run/docker.sock:/var/run/docker.sock - ./traefik:/etc/traefik:ro - - configtraefik:/config:ro + - configtraefik:/config environment: - TRAEFIK_DOMAIN=${TRAEFIK_DOMAIN} - TZ=${TZ} From 9b9a1410939a5373c6b492036601d802ddb63485 Mon Sep 17 00:00:00 2001 From: Jean Froment Date: Sun, 20 Dec 2020 15:37:14 +0100 Subject: [PATCH 04/10] Add FlareSolverr and set Jackett to use it --- docker-compose.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 6091fa2..ad5c6dc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -66,6 +66,13 @@ services: - "traefik.http.services.plex-seedbox.loadbalancer.server.port=32400" - "traefik.http.routers.plex.rule=Host(`plex.${TRAEFIK_DOMAIN}`)" + flaresolverr: + image: ghcr.io/flaresolverr/flaresolverr + container_name: flaresolverr + restart: always + environment: + - CAPTCHA_SOLVER=hcaptcha-solver + jackett: image: ghcr.io/linuxserver/jackett container_name: jackett @@ -78,6 +85,7 @@ services: - PGID=${PGID} - PUID=${PUID} - TZ=${TZ} + - RUN_OPTS='-FlareSolverrURL="http://flaresolverr:8191"' labels: - "traefik.enable=true" - "traefik.http.routers.jackett.rule=Host(`jackett.${TRAEFIK_DOMAIN}`)" From 74affa6dae97b133a0634e5fc14cf16ceb9873a4 Mon Sep 17 00:00:00 2001 From: Jean Froment Date: Sun, 31 Jan 2021 18:09:33 +0100 Subject: [PATCH 05/10] Split docker-compose.yml into multiple files in dedicated dir --- .gitignore | 6 +- docker-compose.yaml | 26 +++ docker-compose.yml | 385 ------------------------------------- services/bazarr.yaml | 22 +++ services/deluge.yaml | 23 +++ services/duplicati.yaml | 31 +++ services/flaresolverr.yaml | 7 + services/jackett.yaml | 18 ++ services/jdownloader.yaml | 23 +++ services/lidarr.yaml | 22 +++ services/netdata.yaml | 23 +++ services/nextcloud.yaml | 52 +++++ services/plex.yaml | 30 +++ services/portainer.yaml | 12 ++ services/radarr.yaml | 23 +++ services/sonarr.yaml | 23 +++ services/tautulli.yaml | 21 ++ services/tdarr.yaml | 28 +++ services/traefik.yaml | 30 +++ update-all.sh | 8 +- 20 files changed, 423 insertions(+), 390 deletions(-) create mode 100644 docker-compose.yaml delete mode 100644 docker-compose.yml create mode 100644 services/bazarr.yaml create mode 100644 services/deluge.yaml create mode 100644 services/duplicati.yaml create mode 100644 services/flaresolverr.yaml create mode 100644 services/jackett.yaml create mode 100644 services/jdownloader.yaml create mode 100644 services/lidarr.yaml create mode 100644 services/netdata.yaml create mode 100644 services/nextcloud.yaml create mode 100644 services/plex.yaml create mode 100644 services/portainer.yaml create mode 100644 services/radarr.yaml create mode 100644 services/sonarr.yaml create mode 100644 services/tautulli.yaml create mode 100644 services/tdarr.yaml create mode 100644 services/traefik.yaml diff --git a/.gitignore b/.gitignore index 72bae19..f9f10bb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .DS_Store /config -tunnel-options.sh -.env -traefik/http_auth +**/tunnel-options.sh +**/.env +**/traefik/http_auth backup/ diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..9d62242 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,26 @@ +version: "3.8" + +############################################################################# +## Services are now located in separate files, in the services directory. ## +############################################################################# + +# Common network used by all services +networks: + default: + external: + name: "traefik-network" + +# Common volumes used by at least 2 services +volumes: + config: + driver: local-persist + driver_opts: + mountpoint: /data/config + torrents: + driver: local-persist + driver_opts: + mountpoint: /data/torrents + downloads: + driver: local-persist + driver_opts: + mountpoint: /data/torrents/deluge diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index ad5c6dc..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,385 +0,0 @@ -version: "3.7" - -services: - traefik: - image: traefik - container_name: traefik - restart: always - command: - - --certificatesresolvers.le.acme.email=${ACME_MAIL} - - --pilot.token=${PILOT_TOKEN} - ports: - - "80:80" - - "443:443" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - ./traefik:/etc/traefik:ro - - configtraefik:/config - environment: - - TRAEFIK_DOMAIN=${TRAEFIK_DOMAIN} - - TZ=${TZ} - labels: - - "traefik.enable=true" - # Docker labels for enabling Traefik dashboard - - "traefik.http.routers.traefik.rule=Host(`traefik.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.traefik.service=api@internal" - - "traefik.http.routers.traefik.middlewares=common-auth@file" - - deluge: - image: ghcr.io/linuxserver/deluge - container_name: deluge - restart: always - volumes: - - torrents:/torrents - - configdeluge:/config - - downloads:/downloads - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.routers.deluge.rule=Host(`deluge.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.deluge.middlewares=common-auth@file" - - plex: - image: ghcr.io/linuxserver/plex - container_name: plex - restart: always - ports: - - "32400:32400" - - "32400:32400/udp" - - "32469:32469" - - "32469:32469/udp" - - "5353:5353/udp" - - "1900:1900/udp" - volumes: - - configplex:/config - - torrents:/torrents - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - - VERSION=latest - labels: - - "traefik.enable=true" - - "traefik.http.services.plex-seedbox.loadbalancer.server.port=32400" - - "traefik.http.routers.plex.rule=Host(`plex.${TRAEFIK_DOMAIN}`)" - - flaresolverr: - image: ghcr.io/flaresolverr/flaresolverr - container_name: flaresolverr - restart: always - environment: - - CAPTCHA_SOLVER=hcaptcha-solver - - jackett: - image: ghcr.io/linuxserver/jackett - container_name: jackett - restart: always - volumes: - - config:/config - - torrents:/downloads - - /etc/localtime:/etc/localtime:ro - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - - RUN_OPTS='-FlareSolverrURL="http://flaresolverr:8191"' - labels: - - "traefik.enable=true" - - "traefik.http.routers.jackett.rule=Host(`jackett.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.jackett.middlewares=common-auth@file" - - sonarr: - image: ghcr.io/linuxserver/sonarr:preview - container_name: sonarr - restart: always - volumes: - - configsonarr:/config - - torrents:/torrents - - /etc/localtime:/etc/localtime:ro - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.routers.sonarr.rule=Host(`sonarr.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.sonarr.middlewares=common-auth@file" - - radarr: - image: ghcr.io/linuxserver/radarr:develop - container_name: radarr - restart: always - volumes: - - configradarr:/config - - torrents:/torrents - - /etc/localtime:/etc/localtime:ro - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.routers.radarr.rule=Host(`radarr.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.radarr.middlewares=common-auth@file" - - bazarr: - image: ghcr.io/linuxserver/bazarr - container_name: bazarr - restart: always - volumes: - - torrents:/torrents - - configbazarr:/config - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.routers.bazarr.rule=Host(`bazarr.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.bazarr.middlewares=common-auth@file" - - lidarr: - image: ghcr.io/linuxserver/lidarr:preview - container_name: lidarr - restart: always - volumes: - - configlidarr:/config - - torrents:/torrents - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.routers.lidarr.rule=Host(`lidarr.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.lidarr.middlewares=common-auth@file" - - tautulli: - image: ghcr.io/linuxserver/tautulli - container_name: tautulli - restart: always - volumes: - - configtautulli:/config - - config:/logs:ro # Inside of tautulli, bind to logs via "/logs/Plex Media Server/Logs" - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.routers.tautulli.rule=Host(`tautulli.${TRAEFIK_DOMAIN}`)" - - jdownloader: - image: jlesage/jdownloader-2 - container_name: jdownloader - restart: unless-stopped - volumes: - - configjdownloader:/config - - downloads:/output - environment: - - USER_ID=${PUID} - - GROUP_ID=${PGID} - - TZ=${TZ} - labels: - - "traefik.enable=true" - - "traefik.http.services.jdownloader-seedbox.loadbalancer.server.port=5800" - - "traefik.http.routers.jdownloader.rule=Host(`jdownloader.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.jdownloader.middlewares=common-auth@file" - - tdarr: - image: haveagitgat/tdarr - container_name: tdarr - restart: always - environment: - - PUID=${PUID} - - PGID=${PGID} - - TZ=${TZ} - volumes: - - torrents:/home/Tdarr/Media - - configtdarr:/home/Tdarr/Documents/Tdarr - - tdarrdb:/var/lib/mongodb - labels: - - "traefik.enable=true" - - "traefik.http.services.tdarr-seedbox.loadbalancer.server.port=8265" - - "traefik.http.routers.tdarr.rule=Host(`tdarr.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.tdarr.middlewares=common-auth@file" - - nextcloud-db: - image: mariadb:10 - container_name: nextcloud-db - command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW - restart: always - environment: - - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - - MYSQL_DATABASE=${MYSQL_DATABASE} - - MYSQL_USER=${MYSQL_USER} - - MYSQL_PASSWORD=${MYSQL_PASSWORD} - - TZ=${TZ} - volumes: - - nextclouddb:/var/lib/mysql - labels: - - "traefik.enable=false" - - # See tools/init-setup-nextcloud.sh for first install - nextcloud: - depends_on: - - nextcloud-db - image: linuxserver/nextcloud - container_name: nextcloud - restart: always - environment: - - PGID=${PGID} - - PUID=${PUID} - - TZ=${TZ} - volumes: - - confignextcloud:/config - - nextclouddata:/data - - torrents:/torrents - - config:/seedbox-config - labels: - - "traefik.enable=true" - - "traefik.http.routers.nextcloud.rule=Host(`nextcloud.${TRAEFIK_DOMAIN}`)" - - "traefik.http.services.nextcloud-seedbox.loadbalancer.server.scheme=https" - - "traefik.http.services.nextcloud-seedbox.loadbalancer.server.port=443" - - portainer: - image: portainer/portainer-ce - container_name: portainer - restart: always - volumes: - - /var/run/docker.sock:/var/run/docker.sock - command: --admin-password ${PORTAINER_ADMIN_PASSWORD} --host=unix:///var/run/docker.sock - labels: - - "traefik.enable=true" - - "traefik.http.routers.portainer.rule=Host(`portainer.${TRAEFIK_DOMAIN}`)" - - "traefik.http.services.portainer-seedbox.loadbalancer.server.port=9000" - - netdata: - image: netdata/netdata - restart: always - container_name: netdata - hostname: netdata.${TRAEFIK_DOMAIN} - environment: - PGID: 999 - cap_add: - - SYS_PTRACE - security_opt: - - apparmor:unconfined - volumes: - - /proc:/host/proc:ro - - /sys:/host/sys:ro - - /etc/passwd:/host/etc/passwd:ro - - /etc/group:/host/etc/group:ro - - /etc/os-release:/host/etc/os-release:ro - - /var/run/docker.sock:/var/run/docker.sock:rw - labels: - - "traefik.enable=true" - - "traefik.http.routers.netdata.rule=Host(`netdata.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.netdata.middlewares=common-auth@file" - - duplicati: - image: ghcr.io/linuxserver/duplicati - container_name: duplicati - restart: unless-stopped - environment: - - PUID=${PUID} - - PGID=${PGID} - - TZ=${TZ} - volumes: - - configduplicati:/config - - backups:/backups - - alldata:/source - labels: - - "traefik.enable=true" - - "traefik.http.routers.duplicati.rule=Host(`duplicati.${TRAEFIK_DOMAIN}`)" - - "traefik.http.routers.duplicati.middlewares=common-auth@file" - -networks: - default: - external: - name: "traefik-network" - -volumes: - alldata: - driver: local-persist - driver_opts: - mountpoint: /data - config: - driver: local-persist - driver_opts: - mountpoint: /data/config - configtraefik: - driver: local-persist - driver_opts: - mountpoint: /data/config/traefik - configplex: - driver: local-persist - driver_opts: - mountpoint: /data/config/Plex - configsonarr: - driver: local-persist - driver_opts: - mountpoint: /data/config/sonarr - configradarr: - driver: local-persist - driver_opts: - mountpoint: /data/config/radarr - configbazarr: - driver: local-persist - driver_opts: - mountpoint: /data/config/bazarr - configlidarr: - driver: local-persist - driver_opts: - mountpoint: /data/config/lidarr - configdeluge: - driver: local-persist - driver_opts: - mountpoint: /data/config/deluge - configtautulli: - driver: local-persist - driver_opts: - mountpoint: /data/config/tautulli - configjdownloader: - driver: local-persist - driver_opts: - mountpoint: /data/config/jdownloader - configtdarr: - driver: local-persist - driver_opts: - mountpoint: /data/config/tdarr - tdarrdb: - driver: local-persist - driver_opts: - mountpoint: /data/config/tdarr-db - nextclouddb: - driver: local-persist - driver_opts: - mountpoint: /data/nextcloud-db - confignextcloud: - driver: local-persist - driver_opts: - mountpoint: /data/config/nextcloud - nextclouddata: - driver: local-persist - driver_opts: - mountpoint: /data/config/nextcloud-data - torrents: - driver: local-persist - driver_opts: - mountpoint: /data/torrents - downloads: - driver: local-persist - driver_opts: - mountpoint: /data/torrents/deluge - configduplicati: - driver: local-persist - driver_opts: - mountpoint: /data/config/duplicati - backups: - driver: local-persist - driver_opts: - mountpoint: /data/backups diff --git a/services/bazarr.yaml b/services/bazarr.yaml new file mode 100644 index 0000000..568ad3d --- /dev/null +++ b/services/bazarr.yaml @@ -0,0 +1,22 @@ +services: + bazarr: + image: ghcr.io/linuxserver/bazarr + container_name: bazarr + restart: always + volumes: + - torrents:/torrents + - configbazarr:/config + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.bazarr.rule=Host(`bazarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.bazarr.middlewares=common-auth@file" + +volumes: + configbazarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/bazarr \ No newline at end of file diff --git a/services/deluge.yaml b/services/deluge.yaml new file mode 100644 index 0000000..d304ae3 --- /dev/null +++ b/services/deluge.yaml @@ -0,0 +1,23 @@ +services: + deluge: + image: ghcr.io/linuxserver/deluge + container_name: deluge + restart: always + volumes: + - torrents:/torrents + - configdeluge:/config + - downloads:/downloads + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.deluge.rule=Host(`deluge.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.deluge.middlewares=common-auth@file" + +volumes: + configdeluge: + driver: local-persist + driver_opts: + mountpoint: /data/config/deluge \ No newline at end of file diff --git a/services/duplicati.yaml b/services/duplicati.yaml new file mode 100644 index 0000000..ce6aef0 --- /dev/null +++ b/services/duplicati.yaml @@ -0,0 +1,31 @@ +services: + duplicati: + image: ghcr.io/linuxserver/duplicati + container_name: duplicati + restart: unless-stopped + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + volumes: + - configduplicati:/config + - backups:/backups + - alldata:/source + labels: + - "traefik.enable=true" + - "traefik.http.routers.duplicati.rule=Host(`duplicati.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.duplicati.middlewares=common-auth@file" + +volumes: + alldata: + driver: local-persist + driver_opts: + mountpoint: /data + configduplicati: + driver: local-persist + driver_opts: + mountpoint: /data/config/duplicati + backups: + driver: local-persist + driver_opts: + mountpoint: /data/backups \ No newline at end of file diff --git a/services/flaresolverr.yaml b/services/flaresolverr.yaml new file mode 100644 index 0000000..b47ddd6 --- /dev/null +++ b/services/flaresolverr.yaml @@ -0,0 +1,7 @@ +services: + flaresolverr: + image: ghcr.io/flaresolverr/flaresolverr + container_name: flaresolverr + restart: always + environment: + - CAPTCHA_SOLVER=hcaptcha-solver \ No newline at end of file diff --git a/services/jackett.yaml b/services/jackett.yaml new file mode 100644 index 0000000..ca3b1f8 --- /dev/null +++ b/services/jackett.yaml @@ -0,0 +1,18 @@ +services: + jackett: + image: ghcr.io/linuxserver/jackett + container_name: jackett + restart: always + volumes: + - config:/config + - torrents:/downloads + - /etc/localtime:/etc/localtime:ro + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + - RUN_OPTS='-FlareSolverrURL="http://flaresolverr:8191"' + labels: + - "traefik.enable=true" + - "traefik.http.routers.jackett.rule=Host(`jackett.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.jackett.middlewares=common-auth@file" diff --git a/services/jdownloader.yaml b/services/jdownloader.yaml new file mode 100644 index 0000000..c00eaa8 --- /dev/null +++ b/services/jdownloader.yaml @@ -0,0 +1,23 @@ +services: + jdownloader: + image: jlesage/jdownloader-2 + container_name: jdownloader + restart: unless-stopped + volumes: + - configjdownloader:/config + - downloads:/output + environment: + - USER_ID=${PUID} + - GROUP_ID=${PGID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.services.jdownloader-seedbox.loadbalancer.server.port=5800" + - "traefik.http.routers.jdownloader.rule=Host(`jdownloader.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.jdownloader.middlewares=common-auth@file" + +volumes: + configjdownloader: + driver: local-persist + driver_opts: + mountpoint: /data/config/jdownloader \ No newline at end of file diff --git a/services/lidarr.yaml b/services/lidarr.yaml new file mode 100644 index 0000000..dcd4612 --- /dev/null +++ b/services/lidarr.yaml @@ -0,0 +1,22 @@ +services: + lidarr: + image: ghcr.io/linuxserver/lidarr:preview + container_name: lidarr + restart: always + volumes: + - configlidarr:/config + - torrents:/torrents + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.lidarr.rule=Host(`lidarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.lidarr.middlewares=common-auth@file" + +volumes: + configlidarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/lidarr \ No newline at end of file diff --git a/services/netdata.yaml b/services/netdata.yaml new file mode 100644 index 0000000..5d5a0c9 --- /dev/null +++ b/services/netdata.yaml @@ -0,0 +1,23 @@ +services: + netdata: + image: netdata/netdata + restart: always + container_name: netdata + hostname: netdata.${TRAEFIK_DOMAIN} + environment: + PGID: 999 + cap_add: + - SYS_PTRACE + security_opt: + - apparmor:unconfined + volumes: + - /proc:/host/proc:ro + - /sys:/host/sys:ro + - /etc/passwd:/host/etc/passwd:ro + - /etc/group:/host/etc/group:ro + - /etc/os-release:/host/etc/os-release:ro + - /var/run/docker.sock:/var/run/docker.sock:rw + labels: + - "traefik.enable=true" + - "traefik.http.routers.netdata.rule=Host(`netdata.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.netdata.middlewares=common-auth@file" \ No newline at end of file diff --git a/services/nextcloud.yaml b/services/nextcloud.yaml new file mode 100644 index 0000000..8d2c5e3 --- /dev/null +++ b/services/nextcloud.yaml @@ -0,0 +1,52 @@ +services: + nextcloud-db: + image: mariadb:10 + container_name: nextcloud-db + command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW + restart: always + environment: + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} + - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_USER=${MYSQL_USER} + - MYSQL_PASSWORD=${MYSQL_PASSWORD} + - TZ=${TZ} + volumes: + - nextclouddb:/var/lib/mysql + labels: + - "traefik.enable=false" + + # See tools/init-setup-nextcloud.sh for first install + nextcloud: + depends_on: + - nextcloud-db + image: linuxserver/nextcloud + container_name: nextcloud + restart: always + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + volumes: + - confignextcloud:/config + - nextclouddata:/data + - torrents:/torrents + - config:/seedbox-config + labels: + - "traefik.enable=true" + - "traefik.http.routers.nextcloud.rule=Host(`nextcloud.${TRAEFIK_DOMAIN}`)" + - "traefik.http.services.nextcloud-seedbox.loadbalancer.server.scheme=https" + - "traefik.http.services.nextcloud-seedbox.loadbalancer.server.port=443" + +volumes: + nextclouddb: + driver: local-persist + driver_opts: + mountpoint: /data/nextcloud-db + confignextcloud: + driver: local-persist + driver_opts: + mountpoint: /data/config/nextcloud + nextclouddata: + driver: local-persist + driver_opts: + mountpoint: /data/config/nextcloud-data \ No newline at end of file diff --git a/services/plex.yaml b/services/plex.yaml new file mode 100644 index 0000000..33d1b5c --- /dev/null +++ b/services/plex.yaml @@ -0,0 +1,30 @@ +services: + plex: + image: ghcr.io/linuxserver/plex + container_name: plex + restart: always + ports: + - "32400:32400" + - "32400:32400/udp" + - "32469:32469" + - "32469:32469/udp" + - "5353:5353/udp" + - "1900:1900/udp" + volumes: + - configplex:/config + - torrents:/torrents + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + - VERSION=latest + labels: + - "traefik.enable=true" + - "traefik.http.services.plex-seedbox.loadbalancer.server.port=32400" + - "traefik.http.routers.plex.rule=Host(`plex.${TRAEFIK_DOMAIN}`)" + +volumes: + configplex: + driver: local-persist + driver_opts: + mountpoint: /data/config/Plex \ No newline at end of file diff --git a/services/portainer.yaml b/services/portainer.yaml new file mode 100644 index 0000000..a9da06f --- /dev/null +++ b/services/portainer.yaml @@ -0,0 +1,12 @@ +services: + portainer: + image: portainer/portainer-ce + container_name: portainer + restart: always + volumes: + - /var/run/docker.sock:/var/run/docker.sock + command: --admin-password ${PORTAINER_ADMIN_PASSWORD} --host=unix:///var/run/docker.sock + labels: + - "traefik.enable=true" + - "traefik.http.routers.portainer.rule=Host(`portainer.${TRAEFIK_DOMAIN}`)" + - "traefik.http.services.portainer-seedbox.loadbalancer.server.port=9000" \ No newline at end of file diff --git a/services/radarr.yaml b/services/radarr.yaml new file mode 100644 index 0000000..65fc73d --- /dev/null +++ b/services/radarr.yaml @@ -0,0 +1,23 @@ +services: + radarr: + image: ghcr.io/linuxserver/radarr:develop + container_name: radarr + restart: always + volumes: + - configradarr:/config + - torrents:/torrents + - /etc/localtime:/etc/localtime:ro + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.radarr.rule=Host(`radarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.radarr.middlewares=common-auth@file" + +volumes: + configradarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/radarr \ No newline at end of file diff --git a/services/sonarr.yaml b/services/sonarr.yaml new file mode 100644 index 0000000..d29bfbe --- /dev/null +++ b/services/sonarr.yaml @@ -0,0 +1,23 @@ +services: + sonarr: + image: ghcr.io/linuxserver/sonarr:preview + container_name: sonarr + restart: always + volumes: + - configsonarr:/config + - torrents:/torrents + - /etc/localtime:/etc/localtime:ro + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.sonarr.rule=Host(`sonarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.sonarr.middlewares=common-auth@file" + +volumes: + configsonarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/sonarr \ No newline at end of file diff --git a/services/tautulli.yaml b/services/tautulli.yaml new file mode 100644 index 0000000..5470396 --- /dev/null +++ b/services/tautulli.yaml @@ -0,0 +1,21 @@ +services: + tautulli: + image: ghcr.io/linuxserver/tautulli + container_name: tautulli + restart: always + volumes: + - configtautulli:/config + - config:/logs:ro # Inside of tautulli, bind to logs via "/logs/Plex Media Server/Logs" + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.tautulli.rule=Host(`tautulli.${TRAEFIK_DOMAIN}`)" + +volumes: + configtautulli: + driver: local-persist + driver_opts: + mountpoint: /data/config/tautulli \ No newline at end of file diff --git a/services/tdarr.yaml b/services/tdarr.yaml new file mode 100644 index 0000000..231f21a --- /dev/null +++ b/services/tdarr.yaml @@ -0,0 +1,28 @@ +services: + tdarr: + image: haveagitgat/tdarr:1.3003 + container_name: tdarr + restart: always + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + volumes: + - torrents:/home/Tdarr/Media + - configtdarr:/home/Tdarr/Documents/Tdarr + - tdarrdb:/var/lib/mongodb + labels: + - "traefik.enable=true" + - "traefik.http.services.tdarr-seedbox.loadbalancer.server.port=8265" + - "traefik.http.routers.tdarr.rule=Host(`tdarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.tdarr.middlewares=common-auth@file" + +volumes: + configtdarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/tdarr + tdarrdb: + driver: local-persist + driver_opts: + mountpoint: /data/config/tdarr-db \ No newline at end of file diff --git a/services/traefik.yaml b/services/traefik.yaml new file mode 100644 index 0000000..d216921 --- /dev/null +++ b/services/traefik.yaml @@ -0,0 +1,30 @@ +services: + traefik: + image: traefik + container_name: traefik + restart: always + command: + - --certificatesresolvers.le.acme.email=${ACME_MAIL} + - --pilot.token=${PILOT_TOKEN} + ports: + - "80:80" + - "443:443" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./traefik:/etc/traefik:ro + - configtraefik:/config + environment: + - TRAEFIK_DOMAIN=${TRAEFIK_DOMAIN} + - TZ=${TZ} + labels: + - "traefik.enable=true" + # Docker labels for enabling Traefik dashboard + - "traefik.http.routers.traefik.rule=Host(`traefik.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.traefik.service=api@internal" + - "traefik.http.routers.traefik.middlewares=common-auth@file" + +volumes: + configtraefik: + driver: local-persist + driver_opts: + mountpoint: /data/config/traefik \ No newline at end of file diff --git a/update-all.sh b/update-all.sh index 17d6098..b32a158 100755 --- a/update-all.sh +++ b/update-all.sh @@ -4,10 +4,14 @@ source .env echo "${HTTP_USER}:${HTTP_PASSWORD}" > traefik/http_auth +# Fetch all YAML files +SERVICES=$(find services2 -name "*.yaml" -mindepth 1 -maxdepth 1 | sed -e 's/^/-f /') +ALL_SERVICES="-f docker-compose.yaml $SERVICES" + echo "[$0] ***** Pulling all images... *****" -docker-compose pull +docker-compose ${ALL_SERVICES} pull echo "[$0] ***** Recreating containers if required... *****" -docker-compose up -d --remove-orphans +docker-compose ${ALL_SERVICES} up -d --remove-orphans echo "[$0] ***** Done updating containers *****" echo "[$0] ***** Clean unused images... *****" docker image prune -af From b550629665fd7fcd19a2235c7b89ec8405ffa6b8 Mon Sep 17 00:00:00 2001 From: Jean Froment Date: Sun, 31 Jan 2021 18:10:41 +0100 Subject: [PATCH 06/10] Somes fixes --- services.conf | 16 ++++++++++++++++ update-all.sh | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 services.conf diff --git a/services.conf b/services.conf new file mode 100644 index 0000000..e8a9775 --- /dev/null +++ b/services.conf @@ -0,0 +1,16 @@ +deluge:enable +plex:enable +flaresolverr:enable +jackett:enable +sonarr:enable +radarr:enable +bazarr:enable +lidarr:enable +tautulli:enable +jdownloader:enable +tdarr:enable +nextcloud-db:enable +nextcloud:enable +portainer:enable +netdata:enable +duplicati:enable diff --git a/update-all.sh b/update-all.sh index b32a158..cf0a316 100755 --- a/update-all.sh +++ b/update-all.sh @@ -5,7 +5,7 @@ source .env echo "${HTTP_USER}:${HTTP_PASSWORD}" > traefik/http_auth # Fetch all YAML files -SERVICES=$(find services2 -name "*.yaml" -mindepth 1 -maxdepth 1 | sed -e 's/^/-f /') +SERVICES=$(find services -mindepth 1 -maxdepth 1 -name "*.yaml" | sed -e 's/^/-f /') ALL_SERVICES="-f docker-compose.yaml $SERVICES" echo "[$0] ***** Pulling all images... *****" From d5020ebda6d97b7b6f9c1d06f9b7a52aa2520949 Mon Sep 17 00:00:00 2001 From: Jean Froment Date: Sun, 31 Jan 2021 18:21:25 +0100 Subject: [PATCH 07/10] Increase compose timeout --- update-all.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/update-all.sh b/update-all.sh index cf0a316..42fee5f 100755 --- a/update-all.sh +++ b/update-all.sh @@ -4,6 +4,9 @@ source .env echo "${HTTP_USER}:${HTTP_PASSWORD}" > traefik/http_auth +# Docker-compose settings +COMPOSE_HTTP_TIMEOUT=240 + # Fetch all YAML files SERVICES=$(find services -mindepth 1 -maxdepth 1 -name "*.yaml" | sed -e 's/^/-f /') ALL_SERVICES="-f docker-compose.yaml $SERVICES" From fab81f731db107f6eff7fac833eb8dae5e92ffff Mon Sep 17 00:00:00 2001 From: Jean Froment Date: Sun, 31 Jan 2021 18:36:35 +0100 Subject: [PATCH 08/10] Bump minimum versions in requirements --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 66fde8c..196e588 100644 --- a/README.md +++ b/README.md @@ -63,11 +63,9 @@ sudo rm -rf /opt/traefik /tmp/migration ## Dependencies -- [Docker](https://github.com/docker/docker) >= 1.13.0 - + Install guidelines for Ubuntu 16.04: https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04 -- [Docker Compose](https://github.com/docker/compose) >=v1.10.0 - + Install guidelines for Ubuntu 16.04: https://www.digitalocean.com/community/tutorials/how-to-install-docker-compose-on-ubuntu-16-04 -- [local-persist Docker plugin](https://github.com/CWSpear/local-persist): installed directly on host (not in container). This is a volume plugin that extends the default local driver’s functionality by allowing you specify a mountpoint anywhere on the host, which enables the files to always persist, even if the volume is removed via `docker volume rm`. Use *systemd* install for Ubuntu 16.04. +- [Docker](https://github.com/docker/docker) >= 20.10 +- [Docker Compose](https://github.com/docker/compose) >= 1.28.0 +- [local-persist Docker plugin](https://github.com/MatchbookLab/local-persist): installed directly on host (not in container). This is a volume plugin that extends the default local driver’s functionality by allowing you specify a mountpoint anywhere on the host, which enables the files to always persist, even if the volume is removed via `docker volume rm`. Use *systemd* install for Ubuntu 16.04. ## Configuration From 02e31585d9b3c6aa511b29c4eae21368026c71c6 Mon Sep 17 00:00:00 2001 From: Jean Froment Date: Sun, 31 Jan 2021 19:11:51 +0100 Subject: [PATCH 09/10] Feature: add the possibility to disable a service --- README.md | 5 +++++ services.conf | 31 +++++++++++++++---------------- update-all.sh | 10 ++++++++-- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 196e588..6c9039e 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,11 @@ sudo su -c "mkdir /data && mkdir /data/config && mkdir /data/torrents" Edit the `.env` file and change the variables as desired. The variables are all self-explanatory. +**NEW** +You can also disable a service if you do not need it by editing the ``services.conf`` file. +Simply change the "*enable*" key with the "*disable*" one for the service you want to disable. +If you remove a line in this file, it will be considered as "enabled" as all services are enabled by default. + ## Running & updating ```sh diff --git a/services.conf b/services.conf index e8a9775..6189d0e 100644 --- a/services.conf +++ b/services.conf @@ -1,16 +1,15 @@ -deluge:enable -plex:enable -flaresolverr:enable -jackett:enable -sonarr:enable -radarr:enable -bazarr:enable -lidarr:enable -tautulli:enable -jdownloader:enable -tdarr:enable -nextcloud-db:enable -nextcloud:enable -portainer:enable -netdata:enable -duplicati:enable +deluge: enable +plex: enable +flaresolverr: enable +jackett: enable +sonarr: enable +radarr: enable +bazarr: enable +lidarr: enable +tautulli: enable +jdownloader: enable +tdarr: enable +nextcloud: enable +portainer: enable +netdata: enable +duplicati: enable \ No newline at end of file diff --git a/update-all.sh b/update-all.sh index 42fee5f..8e4b476 100755 --- a/update-all.sh +++ b/update-all.sh @@ -8,7 +8,12 @@ echo "${HTTP_USER}:${HTTP_PASSWORD}" > traefik/http_auth COMPOSE_HTTP_TIMEOUT=240 # Fetch all YAML files -SERVICES=$(find services -mindepth 1 -maxdepth 1 -name "*.yaml" | sed -e 's/^/-f /') +disabled_pattern="" +while read -r line ; do + disabled_pattern="${disabled_pattern} ! -name $line.yaml" +done < <(grep "disable" services.conf | awk -F : '{print $1}' ) + +SERVICES=$(find services -mindepth 1 -maxdepth 1 -name "*.yaml" ${disabled_pattern} | sed -e 's/^/-f /') ALL_SERVICES="-f docker-compose.yaml $SERVICES" echo "[$0] ***** Pulling all images... *****" @@ -16,7 +21,8 @@ docker-compose ${ALL_SERVICES} pull echo "[$0] ***** Recreating containers if required... *****" docker-compose ${ALL_SERVICES} up -d --remove-orphans echo "[$0] ***** Done updating containers *****" -echo "[$0] ***** Clean unused images... *****" +echo "[$0] ***** Clean unused images and volumes... *****" docker image prune -af +docker volume prune -f echo "[$0] ***** Done! *****" exit 0 \ No newline at end of file From 6444ac72d46882656a31cbfd0effbf0c7c23b593 Mon Sep 17 00:00:00 2001 From: Jean Froment Date: Sun, 31 Jan 2021 19:26:04 +0100 Subject: [PATCH 10/10] Add back original docker-compose.yml (before merge) --- docker-compose.yml | 374 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 374 insertions(+) create mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..acdb952 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,374 @@ +version: "3.7" + +services: + traefik: + image: traefik + container_name: traefik + restart: always + command: + - --certificatesresolvers.le.acme.email=${ACME_MAIL} + - --pilot.token=${PILOT_TOKEN} + ports: + - "80:80" + - "443:443" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./traefik:/etc/traefik:ro + - configtraefik:/config + environment: + - TRAEFIK_DOMAIN=${TRAEFIK_DOMAIN} + - TZ=${TZ} + labels: + - "traefik.enable=true" + # Docker labels for enabling Traefik dashboard + - "traefik.http.routers.traefik.rule=Host(`traefik.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.traefik.service=api@internal" + - "traefik.http.routers.traefik.middlewares=common-auth@file" + + deluge: + image: linuxserver/deluge + container_name: deluge + restart: always + volumes: + - torrents:/torrents + - configdeluge:/config + - downloads:/downloads + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.deluge.rule=Host(`deluge.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.deluge.middlewares=common-auth@file" + + plex: + image: linuxserver/plex + container_name: plex + restart: always + ports: + - "32400:32400" + - "32400:32400/udp" + - "32469:32469" + - "32469:32469/udp" + - "5353:5353/udp" + - "1900:1900/udp" + volumes: + - configplex:/config + - torrents:/torrents + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + - VERSION=latest + labels: + - "traefik.enable=true" + - "traefik.http.services.plex-seedbox.loadbalancer.server.port=32400" + - "traefik.http.routers.plex.rule=Host(`plex.${TRAEFIK_DOMAIN}`)" + + jackett: + image: linuxserver/jackett + container_name: jackett + restart: always + volumes: + - config:/config + - torrents:/downloads + - /etc/localtime:/etc/localtime:ro + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.jackett.rule=Host(`jackett.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.jackett.middlewares=common-auth@file" + + sonarr: + image: linuxserver/sonarr:preview + container_name: sonarr + restart: always + volumes: + - configsonarr:/config + - torrents:/torrents + - /etc/localtime:/etc/localtime:ro + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.sonarr.rule=Host(`sonarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.sonarr.middlewares=common-auth@file" + + radarr: + image: linuxserver/radarr:develop + container_name: radarr + restart: always + volumes: + - configradarr:/config + - torrents:/torrents + - /etc/localtime:/etc/localtime:ro + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.radarr.rule=Host(`radarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.radarr.middlewares=common-auth@file" + + bazarr: + image: linuxserver/bazarr + container_name: bazarr + restart: always + volumes: + - torrents:/torrents + - configbazarr:/config + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.bazarr.rule=Host(`bazarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.bazarr.middlewares=common-auth@file" + + lidarr: + image: linuxserver/lidarr:preview + container_name: lidarr + restart: always + volumes: + - configlidarr:/config + - torrents:/torrents + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.lidarr.rule=Host(`lidarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.lidarr.middlewares=common-auth@file" + + tautulli: + image: linuxserver/tautulli + container_name: tautulli + restart: always + volumes: + - configtautulli:/config + - config:/logs:ro # Inside of tautulli, bind to logs via "/logs/Plex Media Server/Logs" + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.routers.tautulli.rule=Host(`tautulli.${TRAEFIK_DOMAIN}`)" + + jdownloader: + image: jlesage/jdownloader-2 + container_name: jdownloader + restart: unless-stopped + volumes: + - configjdownloader:/config + - downloads:/output + environment: + - USER_ID=${PUID} + - GROUP_ID=${PGID} + - TZ=${TZ} + labels: + - "traefik.enable=true" + - "traefik.http.services.jdownloader-seedbox.loadbalancer.server.port=5800" + - "traefik.http.routers.jdownloader.rule=Host(`jdownloader.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.jdownloader.middlewares=common-auth@file" + + tdarr: + image: haveagitgat/tdarr + container_name: tdarr + restart: always + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + volumes: + - torrents:/home/Tdarr/Media + - configtdarr:/home/Tdarr/Documents/Tdarr + - tdarrdb:/var/lib/mongodb + labels: + - "traefik.enable=true" + - "traefik.http.services.tdarr-seedbox.loadbalancer.server.port=8265" + - "traefik.http.routers.tdarr.rule=Host(`tdarr.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.tdarr.middlewares=common-auth@file" + + nextcloud-db: + image: mariadb:10 + container_name: nextcloud-db + command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW + restart: always + environment: + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} + - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_USER=${MYSQL_USER} + - MYSQL_PASSWORD=${MYSQL_PASSWORD} + - TZ=${TZ} + volumes: + - nextclouddb:/var/lib/mysql + labels: + - "traefik.enable=false" + + # See tools/init-setup-nextcloud.sh for first install + nextcloud: + depends_on: + - nextcloud-db + image: linuxserver/nextcloud + container_name: nextcloud + restart: always + environment: + - PGID=${PGID} + - PUID=${PUID} + - TZ=${TZ} + volumes: + - confignextcloud:/config + - nextclouddata:/data + - torrents:/torrents + - config:/seedbox-config + labels: + - "traefik.enable=true" + - "traefik.http.routers.nextcloud.rule=Host(`nextcloud.${TRAEFIK_DOMAIN}`)" + - "traefik.http.services.nextcloud-seedbox.loadbalancer.server.scheme=https" + - "traefik.http.services.nextcloud-seedbox.loadbalancer.server.port=443" + + portainer: + image: portainer/portainer-ce + container_name: portainer + restart: always + volumes: + - /var/run/docker.sock:/var/run/docker.sock + command: --admin-password ${PORTAINER_ADMIN_PASSWORD} --host=unix:///var/run/docker.sock + labels: + - "traefik.enable=true" + - "traefik.http.routers.portainer.rule=Host(`portainer.${TRAEFIK_DOMAIN}`)" + - "traefik.http.services.portainer-seedbox.loadbalancer.server.port=9000" + + netdata: + image: netdata/netdata + restart: always + container_name: netdata + hostname: netdata.${TRAEFIK_DOMAIN} + environment: + PGID: 999 + cap_add: + - SYS_PTRACE + security_opt: + - apparmor:unconfined + volumes: + - /proc:/host/proc:ro + - /sys:/host/sys:ro + - /var/run/docker.sock:/var/run/docker.sock:rw + labels: + - "traefik.enable=true" + - "traefik.http.routers.netdata.rule=Host(`netdata.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.netdata.middlewares=common-auth@file" + + duplicati: + image: linuxserver/duplicati + container_name: duplicati + restart: unless-stopped + environment: + - PUID=${PUID} + - PGID=${PGID} + - TZ=${TZ} + volumes: + - configduplicati:/config + - backups:/backups + - alldata:/source + labels: + - "traefik.enable=true" + - "traefik.http.routers.duplicati.rule=Host(`duplicati.${TRAEFIK_DOMAIN}`)" + - "traefik.http.routers.duplicati.middlewares=common-auth@file" + +networks: + default: + external: + name: "traefik-network" + +volumes: + alldata: + driver: local-persist + driver_opts: + mountpoint: /data + config: + driver: local-persist + driver_opts: + mountpoint: /data/config + configtraefik: + driver: local-persist + driver_opts: + mountpoint: /data/config/traefik + configplex: + driver: local-persist + driver_opts: + mountpoint: /data/config/Plex + configsonarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/sonarr + configradarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/radarr + configbazarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/bazarr + configlidarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/lidarr + configdeluge: + driver: local-persist + driver_opts: + mountpoint: /data/config/deluge + configtautulli: + driver: local-persist + driver_opts: + mountpoint: /data/config/tautulli + configjdownloader: + driver: local-persist + driver_opts: + mountpoint: /data/config/jdownloader + configtdarr: + driver: local-persist + driver_opts: + mountpoint: /data/config/tdarr + tdarrdb: + driver: local-persist + driver_opts: + mountpoint: /data/config/tdarr-db + nextclouddb: + driver: local-persist + driver_opts: + mountpoint: /data/nextcloud-db + confignextcloud: + driver: local-persist + driver_opts: + mountpoint: /data/config/nextcloud + nextclouddata: + driver: local-persist + driver_opts: + mountpoint: /data/config/nextcloud-data + torrents: + driver: local-persist + driver_opts: + mountpoint: /data/torrents + downloads: + driver: local-persist + driver_opts: + mountpoint: /data/torrents/deluge + configduplicati: + driver: local-persist + driver_opts: + mountpoint: /data/config/duplicati + backups: + driver: local-persist + driver_opts: + mountpoint: /data/backups