refactor
This commit is contained in:
+289
-225
@@ -1,11 +1,55 @@
|
|||||||
|
networks:
|
||||||
|
caddy_net:
|
||||||
|
external: true
|
||||||
|
tdarr-net:
|
||||||
|
driver: bridge
|
||||||
|
default:
|
||||||
|
name: portainer_network
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
meilisearch:
|
||||||
|
karakeep-data:
|
||||||
|
caddy_config:
|
||||||
|
caddy_data:
|
||||||
|
external: true
|
||||||
|
myspeed:
|
||||||
|
external: true # docker compose will fail creating myspeed if the volume hasn't been manually created, which we have done. unless you deleted it...
|
||||||
|
portainer_data:
|
||||||
|
name: portainer_data
|
||||||
|
|
||||||
|
##### ORGANIZATION FOR EVERY CONTAINER
|
||||||
|
# services:
|
||||||
|
# container:
|
||||||
|
# image: <...>
|
||||||
|
# container_name: <...>
|
||||||
|
# env_file: <...>
|
||||||
|
# networks: <...>
|
||||||
|
# cap_add: <...>
|
||||||
|
# ports: <...>
|
||||||
|
# volumes: <...>
|
||||||
|
# environment: <...>
|
||||||
|
# labels: <...>
|
||||||
|
# healthcheck: <...>
|
||||||
|
# extra_hosts: <...>
|
||||||
|
# restart: <...>
|
||||||
|
#
|
||||||
|
|
||||||
services:
|
services:
|
||||||
gluetun:
|
gluetun:
|
||||||
image: qmcgaw/gluetun:latest
|
image: qmcgaw/gluetun:latest
|
||||||
container_name: gluetun
|
container_name: gluetun
|
||||||
cap_add:
|
cap_add:
|
||||||
- NET_ADMIN
|
- NET_ADMIN
|
||||||
devices:
|
ports: # YOU MUST SPECIFY A PORT PER SERVICE ROUTED THROUGH GLUETUN!
|
||||||
- /dev/net/tun:/dev/net/tun
|
- 8888:8000/tcp # gluetun control server, i dont think you should change this
|
||||||
|
- ${QBITTORRENT_PORT}:${QBITTORRENT_PORT} # qBittorrent Web UI
|
||||||
|
- ${PROWLARR_PORT}:${PROWLARR_PORT} # Prowlarr
|
||||||
|
- ${SONARR_PORT}:${SONARR_PORT} # Sonarr
|
||||||
|
- ${RADARR_PORT}:${RADARR_PORT} # Radarr
|
||||||
|
- ${LIDARR_PORT}:${LIDARR_PORT} # Lidarr
|
||||||
|
#- ${SEERR_PORT}:${SEERR_PORT}/tcp # Seerr # took this out of gluetun, as it could cause issues with starting the container, and it was unecessary
|
||||||
|
volumes:
|
||||||
|
- ./gluetun-data:/tmp/gluetun:rw
|
||||||
environment:
|
environment:
|
||||||
- VPN_SERVICE_PROVIDER=protonvpn # Or mullvad, protonvpn, surfshark, etc.
|
- VPN_SERVICE_PROVIDER=protonvpn # Or mullvad, protonvpn, surfshark, etc.
|
||||||
- VPN_TYPE=wireguard # WireGuard, openvpn
|
- VPN_TYPE=wireguard # WireGuard, openvpn
|
||||||
@@ -22,35 +66,27 @@ services:
|
|||||||
- FIREWALL_OUTBOUND_SUBNETS=192.168.50.0/24
|
- FIREWALL_OUTBOUND_SUBNETS=192.168.50.0/24
|
||||||
- TZ=${TIMEZONE}
|
- TZ=${TIMEZONE}
|
||||||
- DNS_UPSTREAM_RESOLVER_TYPE=doh # DNS over TLS is an extra layer of security so your isp can not look at what you're doing through your DNS requests, even if your using a vpn (very vague, I don't know how this syustem works with a vpn).
|
- DNS_UPSTREAM_RESOLVER_TYPE=doh # DNS over TLS is an extra layer of security so your isp can not look at what you're doing through your DNS requests, even if your using a vpn (very vague, I don't know how this syustem works with a vpn).
|
||||||
ports: # YOU MUST SPECIFY A PORT PER SERVICE ROUTED THROUGH GLUETUN!
|
|
||||||
- 8888:8000/tcp # gluetun control server, i dont think you should change this
|
|
||||||
- ${QBITTORRENT_PORT}:${QBITTORRENT_PORT} # qBittorrent Web UI
|
|
||||||
- ${PROWLARR_PORT}:${PROWLARR_PORT} # Prowlarr
|
|
||||||
- ${SONARR_PORT}:${SONARR_PORT} # Sonarr
|
|
||||||
- ${RADARR_PORT}:${RADARR_PORT} # Radarr
|
|
||||||
- ${LIDARR_PORT}:${LIDARR_PORT} # Lidarr
|
|
||||||
#- ${SEERR_PORT}:${SEERR_PORT}/tcp # Seerr # took this out of gluetun, as it could cause issues with starting the container, and it was unecessary
|
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: wget --spider -q http://1.1.1.1 || exit 1
|
test: wget --spider -q http://1.1.1.1 || exit 1
|
||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 15s
|
timeout: 15s
|
||||||
retries: 3
|
retries: 3
|
||||||
start_period: 1m
|
start_period: 1m
|
||||||
volumes:
|
|
||||||
- ./gluetun-data:/tmp/gluetun:rw
|
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "host.docker.internal:host-gateway" # host-gateway is a docker variable that automatically grabs the 172.XX.0.1 address, this is to be used by prowlarr to communicate with sonarr and radarr.
|
- "host.docker.internal:host-gateway" # host-gateway is a docker variable that automatically grabs the 172.XX.0.1 address, this is to be used by prowlarr to communicate with sonarr and radarr.
|
||||||
|
devices:
|
||||||
|
- /dev/net/tun:/dev/net/tun
|
||||||
restart: always
|
restart: always
|
||||||
|
|
||||||
qbittorrent:
|
qbittorrent:
|
||||||
image: lscr.io/linuxserver/qbittorrent:latest
|
image: lscr.io/linuxserver/qbittorrent:latest
|
||||||
container_name: qbittorrent
|
container_name: qbittorrent
|
||||||
network_mode: "container:gluetun" # vpn bunker
|
network_mode: "container:gluetun" # vpn bunker
|
||||||
environment:
|
depends_on:
|
||||||
- PUID=1000
|
gluetun:
|
||||||
- PGID=1000
|
condition: service_healthy
|
||||||
- TZ=${TIMEZONE}
|
labels:
|
||||||
- WEBUI_PORT=${QBITTORRENT_PORT}
|
- "autoheal=true"
|
||||||
volumes:
|
volumes:
|
||||||
- ./qbittorrent:/config
|
- ./qbittorrent:/config
|
||||||
- ${DISK1}:${DISK1}
|
- ${DISK1}:${DISK1}
|
||||||
@@ -58,11 +94,11 @@ services:
|
|||||||
- ./gluetun-data:/tmp/gluetun
|
- ./gluetun-data:/tmp/gluetun
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
labels:
|
environment:
|
||||||
- "autoheal=true"
|
- PUID=${HOST_PUID:-1000}
|
||||||
depends_on:
|
- PGID=${HOST_PGID:-1000}
|
||||||
gluetun:
|
- TZ=${TIMEZONE}
|
||||||
condition: service_healthy
|
- WEBUI_PORT=${QBITTORRENT_PORT}
|
||||||
healthcheck: # if gluetun is slow to start, it's over
|
healthcheck: # if gluetun is slow to start, it's over
|
||||||
test: ["CMD-SHELL", wget --spider -q https://1.1.1.1 || exit 1] # use 1.1.1.1, we don't need dns around here
|
test: ["CMD-SHELL", wget --spider -q https://1.1.1.1 || exit 1] # use 1.1.1.1, we don't need dns around here
|
||||||
interval: 1m
|
interval: 1m
|
||||||
@@ -124,21 +160,21 @@ services:
|
|||||||
prowlarr:
|
prowlarr:
|
||||||
image: lscr.io/linuxserver/prowlarr:latest
|
image: lscr.io/linuxserver/prowlarr:latest
|
||||||
container_name: prowlarr
|
container_name: prowlarr
|
||||||
environment:
|
network_mode: "container:gluetun"
|
||||||
- PUID=1000
|
depends_on:
|
||||||
- PGID=1000
|
gluetun:
|
||||||
- TZ=${TIMEZONE}
|
condition: service_healthy
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
volumes:
|
volumes:
|
||||||
- ./prowlarr:/config
|
- ./prowlarr:/config
|
||||||
- ./notify.sh:/notify.sh:ro
|
- ./notify.sh:/notify.sh:ro
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
labels:
|
environment:
|
||||||
- "autoheal=true"
|
- PUID=${HOST_PUID:-1000}
|
||||||
network_mode: "container:gluetun"
|
- PGID=${HOST_PGID:-1000}
|
||||||
depends_on:
|
- TZ=${TIMEZONE}
|
||||||
gluetun:
|
|
||||||
condition: service_healthy
|
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", wget --spider -q https://google.com || exit 1] # needs DNS
|
test: ["CMD-SHELL", wget --spider -q https://google.com || exit 1] # needs DNS
|
||||||
interval: 5m
|
interval: 5m
|
||||||
@@ -150,22 +186,22 @@ services:
|
|||||||
sonarr:
|
sonarr:
|
||||||
image: lscr.io/linuxserver/sonarr:latest
|
image: lscr.io/linuxserver/sonarr:latest
|
||||||
container_name: sonarr
|
container_name: sonarr
|
||||||
environment:
|
network_mode: "container:gluetun"
|
||||||
- PUID=1000
|
depends_on:
|
||||||
- PGID=1000
|
gluetun:
|
||||||
- TZ=${TIMEZONE}
|
condition: service_healthy
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
volumes:
|
volumes:
|
||||||
- /var/lib/sonarr:/config # had migrated into docker compose
|
- /var/lib/sonarr:/config # had migrated into docker compose
|
||||||
- ${DISK1}:${DISK1}
|
- ${DISK1}:${DISK1}
|
||||||
- ${DISK2}:${DISK2}
|
- ${DISK2}:${DISK2}
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
labels:
|
environment:
|
||||||
- "autoheal=true"
|
- PUID=${HOST_PUID:-1000}
|
||||||
network_mode: "container:gluetun"
|
- PGID=${HOST_PGID:-1000}
|
||||||
depends_on:
|
- TZ=${TIMEZONE}
|
||||||
gluetun:
|
|
||||||
condition: service_healthy
|
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "curl -f http://1.1.1.1 || exit 1"]
|
test: ["CMD-SHELL", "curl -f http://1.1.1.1 || exit 1"]
|
||||||
interval: 5m
|
interval: 5m
|
||||||
@@ -177,22 +213,22 @@ services:
|
|||||||
radarr:
|
radarr:
|
||||||
image: lscr.io/linuxserver/radarr:latest
|
image: lscr.io/linuxserver/radarr:latest
|
||||||
container_name: radarr
|
container_name: radarr
|
||||||
environment:
|
network_mode: "container:gluetun"
|
||||||
- PUID=1000
|
labels:
|
||||||
- PGID=1000
|
- "autoheal=true"
|
||||||
- TZ=${TIMEZONE}
|
depends_on:
|
||||||
|
gluetun:
|
||||||
|
condition: service_healthy
|
||||||
volumes:
|
volumes:
|
||||||
- /var/lib/radarr:/config # had migrated into docker compose
|
- /var/lib/radarr:/config # had migrated into docker compose
|
||||||
- ${DISK1}:${DISK1}
|
- ${DISK1}:${DISK1}
|
||||||
- ${DISK2}:${DISK2}
|
- ${DISK2}:${DISK2}
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
labels:
|
environment:
|
||||||
- "autoheal=true"
|
- PUID=${HOST_PUID:-1000}
|
||||||
network_mode: "container:gluetun"
|
- PGID=${HOST_PGID:-1000}
|
||||||
depends_on:
|
- TZ=${TIMEZONE}
|
||||||
gluetun:
|
|
||||||
condition: service_healthy
|
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "curl -f http://1.1.1.1 || exit 1"]
|
test: ["CMD-SHELL", "curl -f http://1.1.1.1 || exit 1"]
|
||||||
interval: 1m
|
interval: 1m
|
||||||
@@ -204,23 +240,23 @@ services:
|
|||||||
lidarr:
|
lidarr:
|
||||||
image: lscr.io/linuxserver/lidarr:latest
|
image: lscr.io/linuxserver/lidarr:latest
|
||||||
container_name: lidarr
|
container_name: lidarr
|
||||||
environment:
|
network_mode: "container:gluetun"
|
||||||
- PUID=1000
|
depends_on:
|
||||||
- PGID=1000
|
gluetun:
|
||||||
- TZ=${TIMEZONE}
|
condition: service_healthy
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
volumes:
|
volumes:
|
||||||
- /home/shaan/torrent-stack/lidarr:/music
|
- ./lidarr:/music
|
||||||
- /var/lib/lidarr:/config
|
- /var/lib/lidarr:/config
|
||||||
- ${DISK1}:${DISK1}
|
- ${DISK1}:${DISK1}
|
||||||
- ${DISK2}:${DISK2}
|
- ${DISK2}:${DISK2}
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
labels:
|
environment:
|
||||||
- "autoheal=true"
|
- PUID=${HOST_PUID:-1000}
|
||||||
network_mode: "container:gluetun"
|
- PGID=${HOST_PGID:-1000}
|
||||||
depends_on:
|
- TZ=${TIMEZONE}
|
||||||
gluetun:
|
|
||||||
condition: service_healthy
|
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "curl -f http://1.1.1.1 || exit 1"]
|
test: ["CMD-SHELL", "curl -f http://1.1.1.1 || exit 1"]
|
||||||
interval: 1m
|
interval: 1m
|
||||||
@@ -232,70 +268,72 @@ services:
|
|||||||
tautulli: # has no network bridge between containers. this is fine, as it only needs to get from plex, which is outside this container
|
tautulli: # has no network bridge between containers. this is fine, as it only needs to get from plex, which is outside this container
|
||||||
image: ghcr.io/tautulli/tautulli
|
image: ghcr.io/tautulli/tautulli
|
||||||
container_name: tautulli
|
container_name: tautulli
|
||||||
|
networks:
|
||||||
|
- caddy_net
|
||||||
|
ports:
|
||||||
|
- ${TAUTULLI_PORT}:${TAUTULLI_PORT}
|
||||||
volumes:
|
volumes:
|
||||||
#- /mnt/media/media:/config
|
#- /mnt/media/media:/config
|
||||||
- ./tautulli:/config
|
- ./tautulli:/config
|
||||||
environment:
|
environment:
|
||||||
- PUID=1000
|
- PUID=${HOST_PUID:-1000}
|
||||||
- PGID=1000
|
- PGID=${HOST_PGID:-1000}
|
||||||
- TZ=${TIMEZONE}
|
- TZ=${TIMEZONE}
|
||||||
ports:
|
restart: unless-stopped
|
||||||
- ${TAUTULLI_PORT}:${TAUTULLI_PORT}
|
|
||||||
networks:
|
|
||||||
- caddy_net
|
|
||||||
restart: always
|
|
||||||
|
|
||||||
tdarr:
|
tdarr:
|
||||||
container_name: tdarr
|
|
||||||
image: haveagitgat/tdarr:latest
|
image: haveagitgat/tdarr:latest
|
||||||
|
container_name: tdarr
|
||||||
networks:
|
networks:
|
||||||
- tdarr-net
|
- tdarr-net
|
||||||
ports:
|
ports:
|
||||||
- ${TDARR_PORT}:${TDARR_PORT} # WebUI
|
- ${TDARR_PORT}:${TDARR_PORT} # WebUI
|
||||||
- ${TDARR_NODE_PORT}:${TDARR_NODE_PORT} # local tdarr-node
|
- ${TDARR_NODE_PORT}:${TDARR_NODE_PORT} # local tdarr-node
|
||||||
environment:
|
|
||||||
- TZ=${TIMEZONE}
|
|
||||||
- PUID=1000
|
|
||||||
- PGID=1000
|
|
||||||
- UMASK_SET=002
|
|
||||||
- serverIP=0.0.0.0
|
|
||||||
volumes:
|
volumes:
|
||||||
- ./tdarr/server:/app/server
|
- ./tdarr/server:/app/server
|
||||||
- ./tdarr/configs:/app/configs
|
- ./tdarr/configs:/app/configs
|
||||||
- ./tdarr/temp:/temp
|
- ./tdarr/temp:/temp
|
||||||
- ${DISK1}:${DISK1}
|
- ${DISK1}:${DISK1}
|
||||||
- ${DISK2}:${DISK2}
|
- ${DISK2}:${DISK2}
|
||||||
# dont put temp files onto a HARD DISK DRIVE! > - ${DISK1}/tdarr-temp:/temp
|
|
||||||
devices:
|
|
||||||
- /dev/dri:/dev/dri # Intel UHD Graphics 710
|
|
||||||
restart: always
|
|
||||||
|
|
||||||
tdarr-node:
|
|
||||||
container_name: tdarr-node
|
|
||||||
image: haveagitgat/tdarr_node:latest
|
|
||||||
networks:
|
|
||||||
- tdarr-net
|
|
||||||
environment:
|
environment:
|
||||||
- TZ=${TIMEZONE}
|
- TZ=${TIMEZONE}
|
||||||
- PUID=1000
|
- PUID=${HOST_PUID:-1000}
|
||||||
- PGID=1000
|
- PGID=${HOST_PGID:-100}
|
||||||
- nodeID=${TDARR_NODE_ID}
|
- UMASK_SET=002
|
||||||
- nodeIP=0.0.0.0
|
- serverIP=0.0.0.0
|
||||||
- serverIP=tdarr # Points to the server container
|
# dont put temp files onto a HARD DISK DRIVE! > - ${DISK1}/tdarr-temp:/temp
|
||||||
- serverPort=${TDARR_NODE_PORT}
|
#devices: #? I don't think this is needed
|
||||||
|
# - /dev/dri:/dev/dri # Intel UHD Graphics 710
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
tdarr-node:
|
||||||
|
image: haveagitgat/tdarr_node:latest
|
||||||
|
container_name: tdarr-node
|
||||||
|
networks:
|
||||||
|
- tdarr-net
|
||||||
volumes:
|
volumes:
|
||||||
- ./tdarr/configs:/app/configs
|
- ./tdarr/configs:/app/configs
|
||||||
- ./tdarr/logs:/app/logs
|
- ./tdarr/logs:/app/logs
|
||||||
- /home/shaan/torrent-stack/tdarr/temp:/temp
|
- /home/shaan/torrent-stack/tdarr/temp:/temp
|
||||||
- ${DISK1}:${DISK1}
|
- ${DISK1}:${DISK1}
|
||||||
- ${DISK2}:${DISK2}
|
- ${DISK2}:${DISK2}
|
||||||
|
environment:
|
||||||
|
- TZ=${TIMEZONE}
|
||||||
|
- PUID=${HOST_PUID:-1000}
|
||||||
|
- PGID=${HOST_PGID:-1000}
|
||||||
|
- nodeID=${TDARR_NODE_ID}
|
||||||
|
- nodeIP=0.0.0.0
|
||||||
|
- serverIP=tdarr # Points to the server container
|
||||||
|
- serverPort=${TDARR_NODE_PORT}
|
||||||
devices:
|
devices:
|
||||||
- /dev/dri:/dev/dri # only works if user 'shaan' is a part of the 'video' or 'render' group.
|
- /dev/dri/:/dev/dri/ # only works if user 'shaan' is a part of the 'video' or 'render' group.
|
||||||
restart: always
|
restart: unless-stopped
|
||||||
|
|
||||||
homepage:
|
homepage:
|
||||||
image: ghcr.io/gethomepage/homepage:latest
|
image: ghcr.io/gethomepage/homepage:latest
|
||||||
container_name: homepage
|
container_name: homepage
|
||||||
|
networks:
|
||||||
|
- caddy_net
|
||||||
ports:
|
ports:
|
||||||
- ${HOMEPAGE_PORT}:${HOMEPAGE_PORT}
|
- ${HOMEPAGE_PORT}:${HOMEPAGE_PORT}
|
||||||
volumes:
|
volumes:
|
||||||
@@ -306,14 +344,16 @@ services:
|
|||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
environment:
|
environment:
|
||||||
#- "HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev,${LOCAL_IPV4}:${HOMEPAGE_PORT},${SERVER_NAME}:${HOMEPAGE_PORT},100.76.249.110:${HOMEPAGE_PORT},${SERVER_NAME}.tail:${HOMEPAGE_PORT},${EXTERNAL_IPV4}:${HOMEPAGE_PORT},${WEB_NAME}:${HOMEPAGE_PORT},${WEB_NAME},172.17.0.1:${HOMEPAGE_PORT},${SERVER_NAME}:80,${SERVER_NAME}:443,shaan-server:443" # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
|
# INIT
|
||||||
- "HOMEPAGE_ALLOWED_HOSTS=*"
|
- "HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev,${LOCAL_IPV4}:${HOMEPAGE_PORT},${SERVER_NAME}:${HOMEPAGE_PORT},${SERVER_NAME}.${TAILNET_NAME}:${HOMEPAGE_PORT}" # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
|
||||||
|
#\- "HOMEPAGE_ALLOWED_HOSTS=*"
|
||||||
- "HOMEPAGE_VAR_DISK1=${DISK1}"
|
- "HOMEPAGE_VAR_DISK1=${DISK1}"
|
||||||
- "HOMEPAGE_VAR_DISK2=${DISK2}"
|
- "HOMEPAGE_VAR_DISK2=${DISK2}"
|
||||||
- "HOMEPAGE_VAR_DISK3=${DISK3}"
|
- "HOMEPAGE_VAR_DISK3=${DISK3}"
|
||||||
- "HOMEPAGE_VAR_WEB_PROTOCOL=${WEB_PROTOCOL}"
|
- "HOMEPAGE_VAR_WEB_PROTOCOL=${WEB_PROTOCOL}"
|
||||||
- "HOMEPAGE_VAR_LOCAL_IPV4=${LOCAL_IPV4}"
|
- "HOMEPAGE_VAR_LOCAL_IPV4=${LOCAL_IPV4}"
|
||||||
- "HOMEPAGE_VAR_SERVER_NAME=${SERVER_NAME}"
|
- "HOMEPAGE_VAR_SERVER_NAME=${SERVER_NAME}"
|
||||||
|
# KEYS
|
||||||
- "HOMEPAGE_VAR_PLEX_KEY=${PLEX_KEY}"
|
- "HOMEPAGE_VAR_PLEX_KEY=${PLEX_KEY}"
|
||||||
- "HOMEPAGE_VAR_PROWLARR_KEY=${PROWLARR_KEY}"
|
- "HOMEPAGE_VAR_PROWLARR_KEY=${PROWLARR_KEY}"
|
||||||
- "HOMEPAGE_VAR_RADARR_KEY=${RADARR_KEY}"
|
- "HOMEPAGE_VAR_RADARR_KEY=${RADARR_KEY}"
|
||||||
@@ -324,6 +364,7 @@ services:
|
|||||||
- "HOMEPAGE_VAR_QBITTORRENT_KEY=${QBITTORRENT_KEY}"
|
- "HOMEPAGE_VAR_QBITTORRENT_KEY=${QBITTORRENT_KEY}"
|
||||||
- "HOMEPAGE_VAR_TAILSCALE_KEY=${TAILSCALE_KEY}"
|
- "HOMEPAGE_VAR_TAILSCALE_KEY=${TAILSCALE_KEY}"
|
||||||
- "HOMEPAGE_VAR_TAILSCALE_DEVICE_KEY=${TAILSCALE_DEVICE_KEY}"
|
- "HOMEPAGE_VAR_TAILSCALE_DEVICE_KEY=${TAILSCALE_DEVICE_KEY}"
|
||||||
|
# WEB ADDRESSES
|
||||||
- "HOMEPAGE_VAR_PLEX_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${PLEX_PORT}"
|
- "HOMEPAGE_VAR_PLEX_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${PLEX_PORT}"
|
||||||
- "HOMEPAGE_VAR_QBITTORRENT_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${QBITTORRENT_PORT}"
|
- "HOMEPAGE_VAR_QBITTORRENT_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${QBITTORRENT_PORT}"
|
||||||
- "HOMEPAGE_VAR_PROWLARR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${PROWLARR_PORT}"
|
- "HOMEPAGE_VAR_PROWLARR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${PROWLARR_PORT}"
|
||||||
@@ -338,6 +379,7 @@ services:
|
|||||||
- "HOMEPAGE_VAR_MYSPEED_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${MYSPEED_PORT}"
|
- "HOMEPAGE_VAR_MYSPEED_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${MYSPEED_PORT}"
|
||||||
- "HOMEPAGE_VAR_TERMIX_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${TERMIX_PORT}"
|
- "HOMEPAGE_VAR_TERMIX_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${TERMIX_PORT}"
|
||||||
- "HOMEPAGE_VAR_ODYSSEUS_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${ODYSSEUS_PORT}"
|
- "HOMEPAGE_VAR_ODYSSEUS_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${ODYSSEUS_PORT}"
|
||||||
|
# WEB NAMES
|
||||||
- "HOMEPAGE_VAR_PLEX_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${PLEX_PORT}"
|
- "HOMEPAGE_VAR_PLEX_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${PLEX_PORT}"
|
||||||
- "HOMEPAGE_VAR_QBITTORRENT_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${QBITTORRENT_PORT}"
|
- "HOMEPAGE_VAR_QBITTORRENT_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${QBITTORRENT_PORT}"
|
||||||
- "HOMEPAGE_VAR_PROWLARR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${PROWLARR_PORT}"
|
- "HOMEPAGE_VAR_PROWLARR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${PROWLARR_PORT}"
|
||||||
@@ -355,8 +397,6 @@ services:
|
|||||||
- TZ=${TIMEZONE}
|
- TZ=${TIMEZONE}
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "host.docker.internal:host-gateway"
|
- "host.docker.internal:host-gateway"
|
||||||
networks:
|
|
||||||
- caddy_net
|
|
||||||
restart: always
|
restart: always
|
||||||
|
|
||||||
glances:
|
glances:
|
||||||
@@ -364,8 +404,6 @@ services:
|
|||||||
container_name: glances
|
container_name: glances
|
||||||
pid: host
|
pid: host
|
||||||
network_mode: host
|
network_mode: host
|
||||||
devices:
|
|
||||||
- /dev/dri:/dev/dri
|
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
- /etc/os-release:/etc/os-release:ro
|
- /etc/os-release:/etc/os-release:ro
|
||||||
@@ -374,44 +412,46 @@ services:
|
|||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
environment:
|
environment:
|
||||||
- GLANCES_OPT=-w
|
- GLANCES_OPT=-w
|
||||||
- PUID=1000
|
- PUID=${HOST_PUID:-1000}
|
||||||
- PGID=1000
|
- PGID=${HOST_PGID:-1000}
|
||||||
- TZ=${TIMEZONE}
|
- TZ=${TIMEZONE}
|
||||||
|
devices:
|
||||||
|
- /dev/dri:/dev/dri
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
autoheal:
|
autoheal:
|
||||||
image: willfarrell/autoheal:latest
|
image: willfarrell/autoheal:latest
|
||||||
container_name: autoheal
|
container_name: autoheal
|
||||||
environment:
|
|
||||||
- AUTOHEAL_CONTAINER_LABEL=all
|
|
||||||
- AUTOHEAL_INTERVAL=30
|
|
||||||
- AUTOHEAL_START_PERIOD=60
|
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
environment:
|
||||||
|
- AUTOHEAL_CONTAINER_LABEL=all
|
||||||
|
- AUTOHEAL_INTERVAL=30
|
||||||
|
- AUTOHEAL_START_PERIOD=60
|
||||||
restart: always
|
restart: always
|
||||||
|
|
||||||
seerr:
|
seerr:
|
||||||
image: ghcr.io/seerr-team/seerr:latest
|
image: ghcr.io/seerr-team/seerr:latest
|
||||||
init: true
|
|
||||||
container_name: seerr
|
container_name: seerr
|
||||||
|
working_dir: "/app" # something idk
|
||||||
|
init: true
|
||||||
|
networks:
|
||||||
|
- caddy_net
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
ports:
|
ports:
|
||||||
- ${SEERR_PORT}:${SEERR_PORT}
|
- ${SEERR_PORT}:${SEERR_PORT}
|
||||||
environment:
|
|
||||||
- LOG_LEVEL=debug
|
|
||||||
- TZ=America/Los_Angeles
|
|
||||||
- PUID=1000
|
|
||||||
- PGID=1000
|
|
||||||
volumes:
|
volumes:
|
||||||
- "./seerr:/app/config"
|
- "./seerr:/app/config"
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
working_dir: "/app"
|
environment:
|
||||||
labels:
|
- LOG_LEVEL=debug
|
||||||
- "autoheal=true"
|
- TZ=America/Los_Angeles
|
||||||
networks:
|
- PUID=${HOST_PUID:-1000}
|
||||||
- caddy_net
|
- PGID=${HOST_PGID:-1000}
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "wget --spider -q http://1.1.1.1 || exit 1"]
|
test: ["CMD-SHELL", "wget --spider -q http://1.1.1.1 || exit 1"]
|
||||||
interval: 1m
|
interval: 1m
|
||||||
@@ -420,35 +460,19 @@ services:
|
|||||||
start_period: 60s
|
start_period: 60s
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
anubis-seerr:
|
seerr-anubis:
|
||||||
image: ghcr.io/techarohq/anubis:latest
|
image: ghcr.io/techarohq/anubis:latest
|
||||||
|
container_name: seerr_anubis
|
||||||
|
networks:
|
||||||
|
- caddy_net
|
||||||
environment:
|
environment:
|
||||||
BIND: ":55055"
|
BIND: ":55055"
|
||||||
TARGET: http://seerr:${SEERR_PORT}
|
TARGET: http://seerr:${SEERR_PORT}
|
||||||
networks:
|
|
||||||
- caddy_net
|
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
MySpeed:
|
MySpeed:
|
||||||
command:
|
|
||||||
- "node"
|
|
||||||
- "server"
|
|
||||||
container_name: "MySpeed"
|
|
||||||
entrypoint:
|
|
||||||
- "docker-entrypoint.sh"
|
|
||||||
environment:
|
|
||||||
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
|
||||||
- "NODE_VERSION=18.20.3"
|
|
||||||
- "YARN_VERSION=1.22.19"
|
|
||||||
- "NODE_ENV=production"
|
|
||||||
- TZ=${TIMEZONE}
|
|
||||||
hostname: "4b5e3178fcc4"
|
|
||||||
image: "germannewsmaker/myspeed"
|
image: "germannewsmaker/myspeed"
|
||||||
ipc: "private"
|
container_name: "MySpeed"
|
||||||
logging:
|
|
||||||
driver: "json-file"
|
|
||||||
options: {}
|
|
||||||
mac_address: "02:42:ac:11:00:03"
|
|
||||||
network_mode: "bridge"
|
network_mode: "bridge"
|
||||||
ports:
|
ports:
|
||||||
- "${MYSPEED_PORT}:${MYSPEED_PORT}/tcp"
|
- "${MYSPEED_PORT}:${MYSPEED_PORT}/tcp"
|
||||||
@@ -456,98 +480,118 @@ services:
|
|||||||
- "myspeed:/myspeed/data"
|
- "myspeed:/myspeed/data"
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
environment:
|
||||||
|
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
- "NODE_VERSION=18.20.3"
|
||||||
|
- "YARN_VERSION=1.22.19"
|
||||||
|
- "NODE_ENV=production"
|
||||||
|
- TZ=${TIMEZONE}
|
||||||
|
hostname: "4b5e3178fcc4"
|
||||||
|
ipc: "private"
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
mac_address: "02:42:ac:11:00:03"
|
||||||
working_dir: "/myspeed"
|
working_dir: "/myspeed"
|
||||||
|
entrypoint:
|
||||||
|
- "docker-entrypoint.sh"
|
||||||
|
command:
|
||||||
|
- "node"
|
||||||
|
- "server"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
termix:
|
# termix:
|
||||||
image: ghcr.io/lukegus/termix:latest
|
# image: ghcr.io/lukegus/termix:latest
|
||||||
container_name: termix
|
# container_name: termix
|
||||||
cap_add:
|
# cap_add:
|
||||||
- NET_ADMIN
|
# - NET_ADMIN
|
||||||
- SYS_ADMIN
|
# - SYS_ADMIN
|
||||||
ports:
|
# networks:
|
||||||
- "${TERMIX_PORT}:${TERMIX_PORT}"
|
# - termix-net
|
||||||
volumes:
|
# ports:
|
||||||
- termix-data:/app/data
|
# - "${TERMIX_PORT}:${TERMIX_PORT}"
|
||||||
environment:
|
# volumes:
|
||||||
- "PORT: ${TERMIX_PORT}"
|
# - termix-data:/app/data
|
||||||
- "TZ: {TIMEZONE}"
|
# environment:
|
||||||
networks:
|
# - "PORT: ${TERMIX_PORT}"
|
||||||
- termix-net
|
# - "TZ: {TIMEZONE}"
|
||||||
restart: unless-stopped
|
# restart: unless-stopped
|
||||||
|
|
||||||
pihole:
|
pihole:
|
||||||
container_name: pihole
|
|
||||||
image: pihole/pihole:latest
|
image: pihole/pihole:latest
|
||||||
|
container_name: pihole
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
network_mode: "host"
|
network_mode: "host"
|
||||||
ports:
|
ports:
|
||||||
- "53:53/tcp"
|
- "53:53/tcp"
|
||||||
- "53:53/udp"
|
- "53:53/udp"
|
||||||
- "67:67/udp"
|
- "67:67/udp"
|
||||||
- "6060:6060/tcp"
|
- "6060:6060/tcp" # original port '80' changed to '6060' within in the webui, be careful changing this
|
||||||
environment:
|
|
||||||
TZ: "America/Los_Angeles"
|
|
||||||
WEBPASSWORD: "password123"
|
|
||||||
FTLCONF_misc_etc_dnsmasq_d: "true"
|
|
||||||
volumes:
|
volumes:
|
||||||
- "./etc-pihole:/etc/pihole"
|
- "./etc-pihole:/etc/pihole"
|
||||||
- "./etc-dnsmasq.d:/etc/dnsmasq.d"
|
- "./etc-dnsmasq.d:/etc/dnsmasq.d"
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
cap_add:
|
environment:
|
||||||
- NET_ADMIN
|
TZ: "America/Los_Angeles"
|
||||||
|
WEBPASSWORD: "password123"
|
||||||
|
FTLCONF_misc_etc_dnsmasq_d: "true"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
cloudflared:
|
cloudflared:
|
||||||
container_name: cloudflared-tunnel
|
|
||||||
image: cloudflare/cloudflared:latest
|
image: cloudflare/cloudflared:latest
|
||||||
restart: always
|
container_name: cloudflared
|
||||||
command: tunnel --no-autoupdate run --token ${CLOUDFLARED_KEY}
|
command: tunnel --no-autoupdate run --token ${CLOUDFLARED_KEY}
|
||||||
|
restart: always
|
||||||
|
|
||||||
torrents-csv:
|
# torrents-csv:
|
||||||
image: dessalines/torrents-csv-server:latest
|
# image: dessalines/torrents-csv-server:latest
|
||||||
restart: unless-stopped
|
# container_name: torrents-csv
|
||||||
ports:
|
# depends_on:
|
||||||
- "8902:8902"
|
# - db # search at 'http://shaan-server:8902/service/search?q={SEARCH_TERM'
|
||||||
environment:
|
# ports:
|
||||||
TORRENTS_CSV_DB_HOST: "postgres://postgres:password@db"
|
# - "8902:8902"
|
||||||
TORRENTS_CSV_FRONT_END_DIR: /app/dist
|
# environment:
|
||||||
RUST_LOG: DEBUG
|
# TORRENTS_CSV_DB_HOST: "postgres://postgres:password@db"
|
||||||
TIMEZONE: ${TIMEZONE}
|
# TORRENTS_CSV_FRONT_END_DIR: /app/dist
|
||||||
depends_on:
|
# RUST_LOG: DEBUG
|
||||||
- db # search at 'http://shaan-server:8902/service/search?q={SEARCH_TERM'
|
# TIMEZONE: ${TIMEZONE}
|
||||||
|
# restart: unless-stopped
|
||||||
|
|
||||||
db:
|
# db:
|
||||||
image: pgautoupgrade/pgautoupgrade:17-alpine
|
# image: pgautoupgrade/pgautoupgrade:17-alpine
|
||||||
shm_size: 1gb
|
# container_name: torrents-csv-db
|
||||||
volumes:
|
# shm_size: 4gb
|
||||||
- ./init-database.sh:/docker-entrypoint-initdb.d/init-database.sh
|
# ports:
|
||||||
- ./init-database.sql:/var/lib/postgresql/init-database.sql
|
# - "127.0.0.1:5433:5432"
|
||||||
- ./torrents.csv:/var/lib/postgresql/torrents.csv
|
# volumes:
|
||||||
- /etc/localtime:/etc/localtime:ro
|
# - ./init-database.sh:/docker-entrypoint-initdb.d/init-database.sh
|
||||||
- /etc/timezone:/etc/timezone:ro
|
# - ./init-database.sql:/var/lib/postgresql/init-database.sql
|
||||||
ports:
|
# - ./torrents.csv:/var/lib/postgresql/torrents.csv
|
||||||
- "127.0.0.1:5433:5432"
|
# - /etc/localtime:/etc/localtime:ro
|
||||||
environment:
|
# - /etc/timezone:/etc/timezone:ro
|
||||||
POSTGRES_PASSWORD: password
|
# environment:
|
||||||
POSTGRES_USER: postgres
|
# POSTGRES_PASSWORD: password
|
||||||
TIMEZONE: ${TIMEZONE}
|
# POSTGRES_USER: postgres
|
||||||
restart: unless-stopped
|
# TIMEZONE: ${TIMEZONE}
|
||||||
|
# restart: unless-stopped
|
||||||
|
|
||||||
portainer:
|
portainer:
|
||||||
container_name: portainer
|
|
||||||
image: portainer/portainer-ce:lts
|
image: portainer/portainer-ce:lts
|
||||||
|
container_name: portainer
|
||||||
restart: always
|
restart: always
|
||||||
|
ports:
|
||||||
|
- ${PORTAINER_PORT}:${PORTAINER_PORT}
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
- portainer_data:/data
|
- portainer_data:/data
|
||||||
ports:
|
|
||||||
- ${PORTAINER_PORT}:${PORTAINER_PORT}
|
|
||||||
|
|
||||||
caddy:
|
caddy:
|
||||||
image: caddy:latest
|
image: caddy:latest
|
||||||
restart: unless-stopped
|
|
||||||
container_name: caddy
|
container_name: caddy
|
||||||
|
networks:
|
||||||
|
- caddy_net
|
||||||
ports:
|
ports:
|
||||||
- 80:80
|
- 80:80
|
||||||
- 443:443
|
- 443:443
|
||||||
@@ -557,13 +601,11 @@ services:
|
|||||||
- /home/shaan/torrent-stack/caddy/site:/srv
|
- /home/shaan/torrent-stack/caddy/site:/srv
|
||||||
- /home/shaan/torrent-stack/caddy/caddy_data:/data
|
- /home/shaan/torrent-stack/caddy/caddy_data:/data
|
||||||
- /home/shaan/torrent-stack/caddy/caddy_config:/config
|
- /home/shaan/torrent-stack/caddy/caddy_config:/config
|
||||||
networks:
|
restart: unless-stopped
|
||||||
- caddy_net
|
|
||||||
|
|
||||||
scrutiny:
|
scrutiny:
|
||||||
restart: unless-stopped
|
|
||||||
container_name: scrutiny
|
|
||||||
image: ghcr.io/analogj/scrutiny:nightly-omnibus
|
image: ghcr.io/analogj/scrutiny:nightly-omnibus
|
||||||
|
container_name: scrutiny
|
||||||
cap_add:
|
cap_add:
|
||||||
- SYS_RAWIO
|
- SYS_RAWIO
|
||||||
ports:
|
ports:
|
||||||
@@ -576,29 +618,51 @@ services:
|
|||||||
devices:
|
devices:
|
||||||
- "/dev/nvme0n1"
|
- "/dev/nvme0n1"
|
||||||
- "/dev/sda"
|
- "/dev/sda"
|
||||||
- "/dev/sdb"
|
#- "/dev/sdb"
|
||||||
|
restart: unless-stopped
|
||||||
networks:
|
|
||||||
caddy_net:
|
|
||||||
external: true
|
|
||||||
tdarr-net:
|
|
||||||
driver: bridge
|
|
||||||
termix-net:
|
|
||||||
driver: bridge
|
|
||||||
staticaddress:
|
|
||||||
ipam:
|
|
||||||
config:
|
|
||||||
- subnet: "172.200.0.0/16"
|
|
||||||
default:
|
|
||||||
name: portainer_network
|
|
||||||
|
|
||||||
|
karakeep:
|
||||||
|
image: ghcr.io/karakeep-app/karakeep:${KARAKEEP_VERSION:-release}
|
||||||
|
container_name: karakeep
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
ports:
|
||||||
|
- 4621:3000
|
||||||
volumes:
|
volumes:
|
||||||
caddy_data:
|
# By default, the data is stored in a docker volume called "data".
|
||||||
external: true
|
# If you want to mount a custom directory, change the volume mapping to:
|
||||||
caddy_config:
|
# - /path/to/your/directory:/data
|
||||||
myspeed:
|
- karakeep-data:/data
|
||||||
external: true # docker compose will fail creating myspeed if the volume hasn't been manually created, which we have done. unless you deleted it...
|
environment:
|
||||||
termix-data:
|
MEILI_ADDR: http://meilisearch:7700
|
||||||
driver: local
|
BROWSER_WEB_URL: http://chrome:9222
|
||||||
portainer_data:
|
# OPENAI_API_KEY: ...
|
||||||
name: portainer_data
|
# You almost never want to change the value of the DATA_DIR variable.
|
||||||
|
# If you want to mount a custom directory, change the volume mapping above instead.
|
||||||
|
DATA_DIR: /data # DON'T CHANGE THIS
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
chrome:
|
||||||
|
image: gcr.io/zenika-hub/alpine-chrome:124
|
||||||
|
container_name: karakeep-chromebrowser
|
||||||
|
command:
|
||||||
|
- --no-sandbox
|
||||||
|
- --disable-gpu
|
||||||
|
- --disable-dev-shm-usage
|
||||||
|
- --remote-debugging-address=0.0.0.0
|
||||||
|
- --remote-debugging-port=9222
|
||||||
|
- --hide-scrollbars
|
||||||
|
- --disable-blink-features=AutomationControlled
|
||||||
|
- --window-size=1440,900
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
meilisearch: # karakeep vector coord. support for karakeep. allows semantic search
|
||||||
|
image: getmeili/meilisearch:v1.41.0
|
||||||
|
container_name: karakeep-meilisearch
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
volumes:
|
||||||
|
- meilisearch:/meili_data
|
||||||
|
environment:
|
||||||
|
MEILI_NO_ANALYTICS: "true"
|
||||||
|
restart: unless-stopped
|
||||||
|
|||||||
@@ -0,0 +1,604 @@
|
|||||||
|
services:
|
||||||
|
gluetun:
|
||||||
|
image: qmcgaw/gluetun:latest
|
||||||
|
container_name: gluetun
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
devices:
|
||||||
|
- /dev/net/tun:/dev/net/tun
|
||||||
|
environment:
|
||||||
|
- VPN_SERVICE_PROVIDER=protonvpn # Or mullvad, protonvpn, surfshark, etc.
|
||||||
|
- VPN_TYPE=wireguard # WireGuard, openvpn
|
||||||
|
- HTTP_CONTROL_SERVER=ON
|
||||||
|
- HTTP_CONTROL_SERVER_AUTH_DEFAULT_ROLE='{"auth":"apikey","apikey":"${GLUETUN_KEY}"}' # generate by running `docker run --rm qmcgaw/gluetun genkey`, then adding this to your `.env` file
|
||||||
|
- WIREGUARD_PRIVATE_KEY=${VPN_PRIVATE_KEY}
|
||||||
|
- WIREGUARD_MTU=1280
|
||||||
|
- VPN_PORT_FORWARDING=on
|
||||||
|
- VPN_PORT_FORWARDING_PROVIDER=protonvpn
|
||||||
|
#- OPENVPN_USER=user
|
||||||
|
#- OPENVPN_PASSWORD=password
|
||||||
|
- SERVER_COUNTRIES=Netherlands # choose fast P2P friendly countries
|
||||||
|
- NETWORK_LOCAL_ADDRESSES=192.168.50.0/24,172.16.0.0/12
|
||||||
|
- FIREWALL_OUTBOUND_SUBNETS=192.168.50.0/24
|
||||||
|
- TZ=${TIMEZONE}
|
||||||
|
- DNS_UPSTREAM_RESOLVER_TYPE=doh # DNS over TLS is an extra layer of security so your isp can not look at what you're doing through your DNS requests, even if your using a vpn (very vague, I don't know how this syustem works with a vpn).
|
||||||
|
ports: # YOU MUST SPECIFY A PORT PER SERVICE ROUTED THROUGH GLUETUN!
|
||||||
|
- 8888:8000/tcp # gluetun control server, i dont think you should change this
|
||||||
|
- ${QBITTORRENT_PORT}:${QBITTORRENT_PORT} # qBittorrent Web UI
|
||||||
|
- ${PROWLARR_PORT}:${PROWLARR_PORT} # Prowlarr
|
||||||
|
- ${SONARR_PORT}:${SONARR_PORT} # Sonarr
|
||||||
|
- ${RADARR_PORT}:${RADARR_PORT} # Radarr
|
||||||
|
- ${LIDARR_PORT}:${LIDARR_PORT} # Lidarr
|
||||||
|
#- ${SEERR_PORT}:${SEERR_PORT}/tcp # Seerr # took this out of gluetun, as it could cause issues with starting the container, and it was unecessary
|
||||||
|
healthcheck:
|
||||||
|
test: wget --spider -q http://1.1.1.1 || exit 1
|
||||||
|
interval: 30s
|
||||||
|
timeout: 15s
|
||||||
|
retries: 3
|
||||||
|
start_period: 1m
|
||||||
|
volumes:
|
||||||
|
- ./gluetun-data:/tmp/gluetun:rw
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway" # host-gateway is a docker variable that automatically grabs the 172.XX.0.1 address, this is to be used by prowlarr to communicate with sonarr and radarr.
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
qbittorrent:
|
||||||
|
image: lscr.io/linuxserver/qbittorrent:latest
|
||||||
|
container_name: qbittorrent
|
||||||
|
network_mode: "container:gluetun" # vpn bunker
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=${TIMEZONE}
|
||||||
|
- WEBUI_PORT=${QBITTORRENT_PORT}
|
||||||
|
volumes:
|
||||||
|
- ./qbittorrent:/config
|
||||||
|
- ${DISK1}:${DISK1}
|
||||||
|
- ${DISK2}:${DISK2}
|
||||||
|
- ./gluetun-data:/tmp/gluetun
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
|
depends_on:
|
||||||
|
gluetun:
|
||||||
|
condition: service_healthy
|
||||||
|
healthcheck: # if gluetun is slow to start, it's over
|
||||||
|
test: ["CMD-SHELL", wget --spider -q https://1.1.1.1 || exit 1] # use 1.1.1.1, we don't need dns around here
|
||||||
|
interval: 1m
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 30s
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
port-updater:
|
||||||
|
# use an image that already has curl/wget to skip the 'apk add' step
|
||||||
|
image: curlimages/curl:latest
|
||||||
|
container_name: port-updater
|
||||||
|
volumes:
|
||||||
|
- ./gluetun-data:/tmp/gluetun:ro
|
||||||
|
# using 'exec' format and 'trap' allows the container to stop instantly
|
||||||
|
entrypoint: ["/bin/sh", "-c"]
|
||||||
|
command: # loololloloolol gemini did this for me
|
||||||
|
- |
|
||||||
|
trap 'exit 0' SIGTERM;
|
||||||
|
while true; do
|
||||||
|
# 1. Wait for Gluetun to actually create the file with a number
|
||||||
|
while [ ! -s /tmp/gluetun/forwarded_port ]; do
|
||||||
|
echo "Waiting for Gluetun to provide a port..."
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
|
||||||
|
# 2. Read and clean the port
|
||||||
|
read -r PORT_VAL < /tmp/gluetun/forwarded_port;
|
||||||
|
CLEAN_PORT=$$(echo "$$PORT_VAL" | tr -d '\r\n ');
|
||||||
|
|
||||||
|
# 3. Only update if the port isn't empty
|
||||||
|
if [ -n "$$CLEAN_PORT" ]; then
|
||||||
|
echo "Updating qBit to port: $$CLEAN_PORT";
|
||||||
|
sleep 10;
|
||||||
|
echo "Updated to $$CLEAN_PORT"
|
||||||
|
curl -s -X POST -d "json={\"listen_port\":$$CLEAN_PORT}" http://localhost:${QBITTORRENT_PORT}/api/v2/app/setPreferences;
|
||||||
|
|
||||||
|
# 4. Success! Now sleep for a long time (e.g., 1 hour)
|
||||||
|
sleep 3600 & wait $$!;
|
||||||
|
else
|
||||||
|
# If for some reason it's still blank, retry quickly
|
||||||
|
sleep 10
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
|
network_mode: "container:gluetun"
|
||||||
|
depends_on:
|
||||||
|
gluetun:
|
||||||
|
condition: service_healthy
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "curl -f https://1.1.1.1 || exit 1"]
|
||||||
|
interval: 1m
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 30s
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
prowlarr:
|
||||||
|
image: lscr.io/linuxserver/prowlarr:latest
|
||||||
|
container_name: prowlarr
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=${TIMEZONE}
|
||||||
|
volumes:
|
||||||
|
- ./prowlarr:/config
|
||||||
|
- ./notify.sh:/notify.sh:ro
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
|
network_mode: "container:gluetun"
|
||||||
|
depends_on:
|
||||||
|
gluetun:
|
||||||
|
condition: service_healthy
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", wget --spider -q https://google.com || exit 1] # needs DNS
|
||||||
|
interval: 5m
|
||||||
|
timeout: 60s
|
||||||
|
retries: 3
|
||||||
|
start_period: 30s
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
sonarr:
|
||||||
|
image: lscr.io/linuxserver/sonarr:latest
|
||||||
|
container_name: sonarr
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=${TIMEZONE}
|
||||||
|
volumes:
|
||||||
|
- /var/lib/sonarr:/config # had migrated into docker compose
|
||||||
|
- ${DISK1}:${DISK1}
|
||||||
|
- ${DISK2}:${DISK2}
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
|
network_mode: "container:gluetun"
|
||||||
|
depends_on:
|
||||||
|
gluetun:
|
||||||
|
condition: service_healthy
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "curl -f http://1.1.1.1 || exit 1"]
|
||||||
|
interval: 5m
|
||||||
|
timeout: 60s
|
||||||
|
retries: 3
|
||||||
|
start_period: 60s
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
radarr:
|
||||||
|
image: lscr.io/linuxserver/radarr:latest
|
||||||
|
container_name: radarr
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=${TIMEZONE}
|
||||||
|
volumes:
|
||||||
|
- /var/lib/radarr:/config # had migrated into docker compose
|
||||||
|
- ${DISK1}:${DISK1}
|
||||||
|
- ${DISK2}:${DISK2}
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
|
network_mode: "container:gluetun"
|
||||||
|
depends_on:
|
||||||
|
gluetun:
|
||||||
|
condition: service_healthy
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "curl -f http://1.1.1.1 || exit 1"]
|
||||||
|
interval: 1m
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 30s
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
lidarr:
|
||||||
|
image: lscr.io/linuxserver/lidarr:latest
|
||||||
|
container_name: lidarr
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=${TIMEZONE}
|
||||||
|
volumes:
|
||||||
|
- /home/shaan/torrent-stack/lidarr:/music
|
||||||
|
- /var/lib/lidarr:/config
|
||||||
|
- ${DISK1}:${DISK1}
|
||||||
|
- ${DISK2}:${DISK2}
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
|
network_mode: "container:gluetun"
|
||||||
|
depends_on:
|
||||||
|
gluetun:
|
||||||
|
condition: service_healthy
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "curl -f http://1.1.1.1 || exit 1"]
|
||||||
|
interval: 1m
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 30s
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
tautulli: # has no network bridge between containers. this is fine, as it only needs to get from plex, which is outside this container
|
||||||
|
image: ghcr.io/tautulli/tautulli
|
||||||
|
container_name: tautulli
|
||||||
|
volumes:
|
||||||
|
#- /mnt/media/media:/config
|
||||||
|
- ./tautulli:/config
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=${TIMEZONE}
|
||||||
|
ports:
|
||||||
|
- ${TAUTULLI_PORT}:${TAUTULLI_PORT}
|
||||||
|
networks:
|
||||||
|
- caddy_net
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
tdarr:
|
||||||
|
container_name: tdarr
|
||||||
|
image: haveagitgat/tdarr:latest
|
||||||
|
networks:
|
||||||
|
- tdarr-net
|
||||||
|
ports:
|
||||||
|
- ${TDARR_PORT}:${TDARR_PORT} # WebUI
|
||||||
|
- ${TDARR_NODE_PORT}:${TDARR_NODE_PORT} # local tdarr-node
|
||||||
|
environment:
|
||||||
|
- TZ=${TIMEZONE}
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- UMASK_SET=002
|
||||||
|
- serverIP=0.0.0.0
|
||||||
|
volumes:
|
||||||
|
- ./tdarr/server:/app/server
|
||||||
|
- ./tdarr/configs:/app/configs
|
||||||
|
- ./tdarr/temp:/temp
|
||||||
|
- ${DISK1}:${DISK1}
|
||||||
|
- ${DISK2}:${DISK2}
|
||||||
|
# dont put temp files onto a HARD DISK DRIVE! > - ${DISK1}/tdarr-temp:/temp
|
||||||
|
devices:
|
||||||
|
- /dev/dri:/dev/dri # Intel UHD Graphics 710
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
tdarr-node:
|
||||||
|
container_name: tdarr-node
|
||||||
|
image: haveagitgat/tdarr_node:latest
|
||||||
|
networks:
|
||||||
|
- tdarr-net
|
||||||
|
environment:
|
||||||
|
- TZ=${TIMEZONE}
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- nodeID=${TDARR_NODE_ID}
|
||||||
|
- nodeIP=0.0.0.0
|
||||||
|
- serverIP=tdarr # Points to the server container
|
||||||
|
- serverPort=${TDARR_NODE_PORT}
|
||||||
|
volumes:
|
||||||
|
- ./tdarr/configs:/app/configs
|
||||||
|
- ./tdarr/logs:/app/logs
|
||||||
|
- /home/shaan/torrent-stack/tdarr/temp:/temp
|
||||||
|
- ${DISK1}:${DISK1}
|
||||||
|
- ${DISK2}:${DISK2}
|
||||||
|
devices:
|
||||||
|
- /dev/dri:/dev/dri # only works if user 'shaan' is a part of the 'video' or 'render' group.
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
homepage:
|
||||||
|
image: ghcr.io/gethomepage/homepage:latest
|
||||||
|
container_name: homepage
|
||||||
|
ports:
|
||||||
|
- ${HOMEPAGE_PORT}:${HOMEPAGE_PORT}
|
||||||
|
volumes:
|
||||||
|
- ./homepage:/app/config
|
||||||
|
- ./homepage/images:/app/public/images
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro # (optional) For docker integrations
|
||||||
|
- ./gluetun-data:/tmp/gluetun:ro # get the port from port-updater
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
environment:
|
||||||
|
#- "HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev,${LOCAL_IPV4}:${HOMEPAGE_PORT},${SERVER_NAME}:${HOMEPAGE_PORT},100.76.249.110:${HOMEPAGE_PORT},${SERVER_NAME}.tail:${HOMEPAGE_PORT},${EXTERNAL_IPV4}:${HOMEPAGE_PORT},${WEB_NAME}:${HOMEPAGE_PORT},${WEB_NAME},172.17.0.1:${HOMEPAGE_PORT},${SERVER_NAME}:80,${SERVER_NAME}:443,shaan-server:443" # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
|
||||||
|
- "HOMEPAGE_ALLOWED_HOSTS=*"
|
||||||
|
- "HOMEPAGE_VAR_DISK1=${DISK1}"
|
||||||
|
- "HOMEPAGE_VAR_DISK2=${DISK2}"
|
||||||
|
- "HOMEPAGE_VAR_DISK3=${DISK3}"
|
||||||
|
- "HOMEPAGE_VAR_WEB_PROTOCOL=${WEB_PROTOCOL}"
|
||||||
|
- "HOMEPAGE_VAR_LOCAL_IPV4=${LOCAL_IPV4}"
|
||||||
|
- "HOMEPAGE_VAR_SERVER_NAME=${SERVER_NAME}"
|
||||||
|
- "HOMEPAGE_VAR_PLEX_KEY=${PLEX_KEY}"
|
||||||
|
- "HOMEPAGE_VAR_PROWLARR_KEY=${PROWLARR_KEY}"
|
||||||
|
- "HOMEPAGE_VAR_RADARR_KEY=${RADARR_KEY}"
|
||||||
|
- "HOMEPAGE_VAR_SONARR_KEY=${SONARR_KEY}"
|
||||||
|
- "HOMEPAGE_VAR_LIDARR_KEY=${LIDARR_KEY}"
|
||||||
|
- "HOMEPAGE_VAR_TAUTULLI_KEY=${TAUTULLI_KEY}"
|
||||||
|
- "HOMEPAGE_VAR_SEERR_KEY=${SEERR_KEY}"
|
||||||
|
- "HOMEPAGE_VAR_QBITTORRENT_KEY=${QBITTORRENT_KEY}"
|
||||||
|
- "HOMEPAGE_VAR_TAILSCALE_KEY=${TAILSCALE_KEY}"
|
||||||
|
- "HOMEPAGE_VAR_TAILSCALE_DEVICE_KEY=${TAILSCALE_DEVICE_KEY}"
|
||||||
|
- "HOMEPAGE_VAR_PLEX_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${PLEX_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_QBITTORRENT_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${QBITTORRENT_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_PROWLARR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${PROWLARR_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_SONARR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${SONARR_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_RADARR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${RADARR_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_LIDARR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${LIDARR_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_TAUTULLI_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${TAUTULLI_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_TDARR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${TDARR_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_HOMEPAGE_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${HOMEPAGE_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_GLANCES_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${GLANCES_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_SEERR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${SEERR_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_MYSPEED_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${MYSPEED_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_TERMIX_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${TERMIX_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_ODYSSEUS_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${ODYSSEUS_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_PLEX_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${PLEX_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_QBITTORRENT_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${QBITTORRENT_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_PROWLARR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${PROWLARR_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_SONARR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${SONARR_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_RADARR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${RADARR_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_LIDARR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${LIDARR_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_TAUTULLI_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${TAUTULLI_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_TDARR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${TDARR_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_HOMEPAGE_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${HOMEPAGE_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_GLANCES_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${GLANCES_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_SEERR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${SEERR_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_MYSPEED_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${MYSPEED_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_TERMIX_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${TERMIX_PORT}"
|
||||||
|
- "HOMEPAGE_VAR_ODYSSEUS_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${ODYSSEUS_PORT}"
|
||||||
|
- TZ=${TIMEZONE}
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
networks:
|
||||||
|
- caddy_net
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
glances:
|
||||||
|
image: nicolargo/glances:latest-full
|
||||||
|
container_name: glances
|
||||||
|
pid: host
|
||||||
|
network_mode: host
|
||||||
|
devices:
|
||||||
|
- /dev/dri:/dev/dri
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
- /etc/os-release:/etc/os-release:ro
|
||||||
|
- /:/host:ro
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
environment:
|
||||||
|
- GLANCES_OPT=-w
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=${TIMEZONE}
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
autoheal:
|
||||||
|
image: willfarrell/autoheal:latest
|
||||||
|
container_name: autoheal
|
||||||
|
environment:
|
||||||
|
- AUTOHEAL_CONTAINER_LABEL=all
|
||||||
|
- AUTOHEAL_INTERVAL=30
|
||||||
|
- AUTOHEAL_START_PERIOD=60
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
seerr:
|
||||||
|
image: ghcr.io/seerr-team/seerr:latest
|
||||||
|
init: true
|
||||||
|
container_name: seerr
|
||||||
|
ports:
|
||||||
|
- ${SEERR_PORT}:${SEERR_PORT}
|
||||||
|
environment:
|
||||||
|
- LOG_LEVEL=debug
|
||||||
|
- TZ=America/Los_Angeles
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
volumes:
|
||||||
|
- "./seerr:/app/config"
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
working_dir: "/app"
|
||||||
|
labels:
|
||||||
|
- "autoheal=true"
|
||||||
|
networks:
|
||||||
|
- caddy_net
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "wget --spider -q http://1.1.1.1 || exit 1"]
|
||||||
|
interval: 1m
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 60s
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
anubis-seerr:
|
||||||
|
image: ghcr.io/techarohq/anubis:latest
|
||||||
|
environment:
|
||||||
|
BIND: ":55055"
|
||||||
|
TARGET: http://seerr:${SEERR_PORT}
|
||||||
|
networks:
|
||||||
|
- caddy_net
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
MySpeed:
|
||||||
|
command:
|
||||||
|
- "node"
|
||||||
|
- "server"
|
||||||
|
container_name: "MySpeed"
|
||||||
|
entrypoint:
|
||||||
|
- "docker-entrypoint.sh"
|
||||||
|
environment:
|
||||||
|
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
- "NODE_VERSION=18.20.3"
|
||||||
|
- "YARN_VERSION=1.22.19"
|
||||||
|
- "NODE_ENV=production"
|
||||||
|
- TZ=${TIMEZONE}
|
||||||
|
hostname: "4b5e3178fcc4"
|
||||||
|
image: "germannewsmaker/myspeed"
|
||||||
|
ipc: "private"
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
mac_address: "02:42:ac:11:00:03"
|
||||||
|
network_mode: "bridge"
|
||||||
|
ports:
|
||||||
|
- "${MYSPEED_PORT}:${MYSPEED_PORT}/tcp"
|
||||||
|
volumes:
|
||||||
|
- "myspeed:/myspeed/data"
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
working_dir: "/myspeed"
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
termix:
|
||||||
|
image: ghcr.io/lukegus/termix:latest
|
||||||
|
container_name: termix
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
- SYS_ADMIN
|
||||||
|
ports:
|
||||||
|
- "${TERMIX_PORT}:${TERMIX_PORT}"
|
||||||
|
volumes:
|
||||||
|
- termix-data:/app/data
|
||||||
|
environment:
|
||||||
|
- "PORT: ${TERMIX_PORT}"
|
||||||
|
- "TZ: {TIMEZONE}"
|
||||||
|
networks:
|
||||||
|
- termix-net
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
pihole:
|
||||||
|
container_name: pihole
|
||||||
|
image: pihole/pihole:latest
|
||||||
|
network_mode: "host"
|
||||||
|
ports:
|
||||||
|
- "53:53/tcp"
|
||||||
|
- "53:53/udp"
|
||||||
|
- "67:67/udp"
|
||||||
|
- "6060:6060/tcp"
|
||||||
|
environment:
|
||||||
|
TZ: "America/Los_Angeles"
|
||||||
|
WEBPASSWORD: "password123"
|
||||||
|
FTLCONF_misc_etc_dnsmasq_d: "true"
|
||||||
|
volumes:
|
||||||
|
- "./etc-pihole:/etc/pihole"
|
||||||
|
- "./etc-dnsmasq.d:/etc/dnsmasq.d"
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
cloudflared:
|
||||||
|
container_name: cloudflared-tunnel
|
||||||
|
image: cloudflare/cloudflared:latest
|
||||||
|
restart: always
|
||||||
|
command: tunnel --no-autoupdate run --token ${CLOUDFLARED_KEY}
|
||||||
|
|
||||||
|
torrents-csv:
|
||||||
|
image: dessalines/torrents-csv-server:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8902:8902"
|
||||||
|
environment:
|
||||||
|
TORRENTS_CSV_DB_HOST: "postgres://postgres:password@db"
|
||||||
|
TORRENTS_CSV_FRONT_END_DIR: /app/dist
|
||||||
|
RUST_LOG: DEBUG
|
||||||
|
TIMEZONE: ${TIMEZONE}
|
||||||
|
depends_on:
|
||||||
|
- db # search at 'http://shaan-server:8902/service/search?q={SEARCH_TERM'
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: pgautoupgrade/pgautoupgrade:17-alpine
|
||||||
|
shm_size: 1gb
|
||||||
|
volumes:
|
||||||
|
- ./init-database.sh:/docker-entrypoint-initdb.d/init-database.sh
|
||||||
|
- ./init-database.sql:/var/lib/postgresql/init-database.sql
|
||||||
|
- ./torrents.csv:/var/lib/postgresql/torrents.csv
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:5433:5432"
|
||||||
|
environment:
|
||||||
|
POSTGRES_PASSWORD: password
|
||||||
|
POSTGRES_USER: postgres
|
||||||
|
TIMEZONE: ${TIMEZONE}
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
portainer:
|
||||||
|
container_name: portainer
|
||||||
|
image: portainer/portainer-ce:lts
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
- portainer_data:/data
|
||||||
|
ports:
|
||||||
|
- ${PORTAINER_PORT}:${PORTAINER_PORT}
|
||||||
|
|
||||||
|
caddy:
|
||||||
|
image: caddy:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
container_name: caddy
|
||||||
|
ports:
|
||||||
|
- 80:80
|
||||||
|
- 443:443
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
- /home/shaan/torrent-stack/caddy/Caddyfile:/etc/caddy/Caddyfile
|
||||||
|
- /home/shaan/torrent-stack/caddy/site:/srv
|
||||||
|
- /home/shaan/torrent-stack/caddy/caddy_data:/data
|
||||||
|
- /home/shaan/torrent-stack/caddy/caddy_config:/config
|
||||||
|
networks:
|
||||||
|
- caddy_net
|
||||||
|
|
||||||
|
scrutiny:
|
||||||
|
restart: unless-stopped
|
||||||
|
container_name: scrutiny
|
||||||
|
image: ghcr.io/analogj/scrutiny:nightly-omnibus
|
||||||
|
cap_add:
|
||||||
|
- SYS_RAWIO
|
||||||
|
ports:
|
||||||
|
- "${SCRUTINY_PORT:-54321}:8080" # webapp
|
||||||
|
- "${SCRUTINY_ADMIN_PORT:-12345}:8086" # influxDB admin
|
||||||
|
volumes:
|
||||||
|
- /run/udev:/run/udev:ro
|
||||||
|
- ./config:/opt/scrutiny/config
|
||||||
|
- ./influxdb:/opt/scrutiny/influxdb
|
||||||
|
devices:
|
||||||
|
- "/dev/nvme0n1"
|
||||||
|
- "/dev/sda"
|
||||||
|
- "/dev/sdb"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
caddy_net:
|
||||||
|
external: true
|
||||||
|
tdarr-net:
|
||||||
|
driver: bridge
|
||||||
|
termix-net:
|
||||||
|
driver: bridge
|
||||||
|
staticaddress:
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: "172.200.0.0/16"
|
||||||
|
default:
|
||||||
|
name: portainer_network
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
caddy_data:
|
||||||
|
external: true
|
||||||
|
caddy_config:
|
||||||
|
myspeed:
|
||||||
|
external: true # docker compose will fail creating myspeed if the volume hasn't been manually created, which we have done. unless you deleted it...
|
||||||
|
termix-data:
|
||||||
|
driver: local
|
||||||
|
portainer_data:
|
||||||
|
name: portainer_data
|
||||||
@@ -246,7 +246,7 @@
|
|||||||
key: ptr_dR3wQa568otBJzfZz5FET+IQKXee7K6O+VO301iY6x4=
|
key: ptr_dR3wQa568otBJzfZz5FET+IQKXee7K6O+VO301iY6x4=
|
||||||
- "Pi-Hole Adblocker":
|
- "Pi-Hole Adblocker":
|
||||||
icon: sh-pi-hole
|
icon: sh-pi-hole
|
||||||
href: "http://192.168.50.2/admin"
|
href: "http://192.168.50.2:6060/admin/login"
|
||||||
description: DNS
|
description: DNS
|
||||||
server: my-docker
|
server: my-docker
|
||||||
container: pihole
|
container: pihole
|
||||||
@@ -454,10 +454,10 @@
|
|||||||
- "Network_2":
|
- "Network_2":
|
||||||
- "Scrutiny":
|
- "Scrutiny":
|
||||||
icon: sh-scrutiny
|
icon: sh-scrutiny
|
||||||
href: http://192.168.50.2:54321 #"{{HOMEPAGE_VAR_SCRUTINY_ADDRESS}}""
|
href: http://192.168.50.2:4545 #"{{HOMEPAGE_VAR_SCRUTINY_ADDRESS}}""
|
||||||
description: S.M.A.R.T.
|
description: S.M.A.R.T.
|
||||||
server: my-docker
|
server: my-docker
|
||||||
container: scrutiny
|
container: scrutiny
|
||||||
widget:
|
widget:
|
||||||
type: scrutiny
|
type: scrutiny
|
||||||
url: http://192.168.50.2:54321 #"{{HOMEPAGE_VAR_SCRUTINY_ADDRESS}}"
|
url: http://192.168.50.2:4545 #"{{HOMEPAGE_VAR_SCRUTINY_ADDRESS}}"
|
||||||
|
|||||||
Reference in New Issue
Block a user