refactor again

This commit is contained in:
2026-08-07 22:52:55 -07:00
parent 153ff43cf5
commit 3309f61d9c
14 changed files with 985 additions and 1380 deletions
+97
View File
@@ -0,0 +1,97 @@
# =============================================================================
# Torrent Stack - Environment Variables
# Copy this file to .env and fill in your values.
# NEVER commit .env to version control.
# =============================================================================
# ----- Time & Location -----
TIMEZONE=America/Los_Angeles
# ----- Host -----
LOCAL_IPV4=192.168.50.0 # of your device
EXTERNAL_IPV4=123.156.178.190
SERVER_NAME=your-server # most likely, set this to be the same as your local ipv4, unless you use tailscale or any sort of mDNS on your machine. homepage relies on this for hyperlinks, but not api calls.
WEB_NAME=your-server.com
TAILNET_NAME=tasty-food.ts.net
WEB_PROTOCOL=http
# ----- Storage -----
DISK1=/mnt/media
DISK2=/mnt/11tb_ext
DISK3=/mnt/shaimpy
# ----- Gluetun (VPN) -----
GLUETUN_KEY=YHotvxxNsRHa4YLu2j6ENL
VPN_PRIVATE_KEY="kGfvaULQs1KBWJ4KXD1LiX8sHNZ7hnCm/W45uBj4P1k="
# ----- Service Ports -----
PLEX_PORT=32400
PLEX_PFWD_PORT=32401 # PLEX PORT FORWARDED PORT. only if you manually specified
TAUTULLI_PORT=8181
HOMEPAGE_PORT=3000
GLANCES_PORT=61208 # this is hardcoded, please do not change
SEERR_PORT=5055
MYSPEED_PORT=5216
PROWLARR_PORT=9696
SONARR_PORT=8989
RADARR_PORT=7878
LIDARR_PORT=8686
QBITTORRENT_PORT=2161
TDARR_PORT=8265
TDARR_NODE_PORT=8266
ODYSSEUS_PORT=7001
PORTAINER_PORT=9443
SCRUTINY_PORT=4545
SCRUTINY_ADMIN_PORT=4646
PIHOLE_PORT=6060
KARAKEEP_PORT=4621
KARAKEEP_CHROME_PORT=9222
MEILI_PORT=7700
LLAMA_PORT=8079
TDARR_NODE_ID=ShaanNode
# ----- API Keys (for homepage widgets & service integrations) -----
PLEX_KEY=
PROWLARR_KEY=
RADARR_KEY=
SONARR_KEY=
LIDARR_KEY=
TAUTULLI_KEY=
SEERR_KEY=
QBITTORRENT_KEY=
TAILSCALE_KEY=
TAILSCALE_DEVICE_KEY=
CLOUDFLARED_KEY=
# ----- Cloudflare (for homepage widget) -----
CLOUDFLARED_ACCOUNT_ID=
CLOUDFLARED_TUNNEL_ID=
CLOUDFLARED_API_KEY=
# ----- Portainer (for homepage widget) -----
PORTAINER_API_KEY=
# ----- Pi-hole -----
PIHOLE_WEBPASSWORD=
# ----- Glances -----
GLANCES_USERNAME=
GLANCES_PASSWORD=
# ----- Karakeep -----
# KARAKEEP
DATA_DIR=/karakeep-data
MEILI_ADDR=http://127.0.0.1:${MEILI_PORT}
MEILI_MASTER_KEY=
NEXTAUTH_URL=http://localhost:3001
NEXTAUTH_SECRET=
OPENAI_API_KEY=ollama
OPENAI_BASE_URL=http://${LOCAL_IPV4}:${LLAMA_PORT}/v1
INFERENCE_TEXT_MODEL=Qwen3.6
INFERENCE_IMAGE_MODEL=Qwen3.6
EMBEDDING_TEXT_MODEL=Qwen3-Embedding
EMBEDDING_DIMENSIONS=2048
EMBEDDING_CONTEXT_LENGTH=4096
EMBEDDING_ENABLE_AUTO_INDEXING=true
+7
View File
@@ -1,5 +1,6 @@
# Ignore the environment file containing secrets # Ignore the environment file containing secrets
.env* .env*
!.env.example
*.bak *.bak
*.log *.log
@@ -20,6 +21,12 @@ config/
conf/ conf/
torrents.csv torrents.csv
torrents-csv-data/ torrents-csv-data/
env/*
meilisearch/
portainer-data/
scrutiny
karakeep-data
SECURITY.md
init-database.* init-database.*
etc* etc*
!odysseus/.* !odysseus/.*
+12 -1
View File
@@ -1,7 +1,18 @@
# Caddy reverse proxy for Seerr
# When Anubis is enabled (uncomment seerr-anubis in compose.yml),
# change the proxy target to http://seerr-anubis:55055
seerr.shaan-server, seerr.shaan-server.cc { seerr.shaan-server, seerr.shaan-server.cc {
tls internal tls internal
reverse_proxy http://anubis-seerr:55055 { reverse_proxy http://seerr:5055 {
header_up X-Real-Ip {remote_host} header_up X-Real-Ip {remote_host}
header_up X-Http-Version {http.request.proto} header_up X-Http-Version {http.request.proto}
} }
header {
# Security headers
X-Content-Type-Options nosniff
X-Frame-Options DENY
Referrer-Policy no-referrer
-Server
}
} }
+267 -111
View File
@@ -11,20 +11,20 @@ networks:
name: portainer_network name: portainer_network
volumes: volumes:
meilisearch: #caddy_config:
karakeep-data: #caddy_data:
caddy_config: # external: true
caddy_data:
external: true
myspeed: myspeed:
external: true external: true
portainer_data: portainer_data:
name: portainer_data
# ============================================================================= # =============================================================================
# Key ordering per service: # Key ordering per service:
# image → container_name → env_file → networks/network_mode → cap_add # image → container_name → env_file → networks/network_mode
# → ports → volumes → environment → labels → healthcheck # → depends_on → cap_add → ports → volumes → environment
# → extra_hosts → devices → pid → restart # → labels → healthcheck → security_opt → mem_limit → cpus
# → devices → restart
# ============================================================================= # =============================================================================
services: services:
@@ -35,6 +35,9 @@ services:
gluetun: gluetun:
image: qmcgaw/gluetun:latest image: qmcgaw/gluetun:latest
container_name: gluetun container_name: gluetun
env_file:
- .env
- ./env/.gluetun.env
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
ports: ports:
@@ -46,12 +49,12 @@ services:
- ${LIDARR_PORT}:${LIDARR_PORT} - ${LIDARR_PORT}:${LIDARR_PORT}
volumes: volumes:
- ./gluetun-data:/tmp/gluetun:rw - ./gluetun-data:/tmp/gluetun:rw
#- /etc/localtime:/etc/localtime:ro
#- /etc/timezone:/etc/timezone:ro
environment: environment:
- VPN_SERVICE_PROVIDER=protonvpn - VPN_SERVICE_PROVIDER=protonvpn
- VPN_TYPE=wireguard - VPN_TYPE=wireguard
- HTTP_CONTROL_SERVER=ON - HTTP_CONTROL_SERVER=ON
- HTTP_CONTROL_SERVER_AUTH_DEFAULT_ROLE='{"auth":"apikey","apikey":"${GLUETUN_KEY}"}'
- WIREGUARD_PRIVATE_KEY=${VPN_PRIVATE_KEY}
- WIREGUARD_MTU=1280 - WIREGUARD_MTU=1280
- VPN_PORT_FORWARDING=on - VPN_PORT_FORWARDING=on
- VPN_PORT_FORWARDING_PROVIDER=protonvpn - VPN_PORT_FORWARDING_PROVIDER=protonvpn
@@ -61,11 +64,15 @@ services:
- TZ=${TIMEZONE} - TZ=${TIMEZONE}
- DNS_UPSTREAM_RESOLVER_TYPE=doh - DNS_UPSTREAM_RESOLVER_TYPE=doh
healthcheck: healthcheck:
test: wget --spider -q http://1.1.1.1 || exit 1 test: ["CMD-SHELL", "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
security_opt:
- no-new-privileges:true
mem_limit: 256m
cpus: 1.0
extra_hosts: extra_hosts:
- "host.docker.internal:host-gateway" - "host.docker.internal:host-gateway"
devices: devices:
@@ -84,8 +91,8 @@ services:
- ${DISK1}:${DISK1} - ${DISK1}:${DISK1}
- ${DISK2}:${DISK2} - ${DISK2}:${DISK2}
- ./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
environment: environment:
- PUID=${HOST_PUID:-1000} - PUID=${HOST_PUID:-1000}
- PGID=${HOST_PGID:-1000} - PGID=${HOST_PGID:-1000}
@@ -94,11 +101,19 @@ services:
labels: labels:
- "autoheal=true" - "autoheal=true"
healthcheck: healthcheck:
test: ["CMD-SHELL", "wget --spider -q https://1.1.1.1 || exit 1"] test:
[
"CMD-SHELL",
"curl -sf http://localhost:${QBITTORRENT_PORT}/api/v2/app/version || exit 1",
]
interval: 1m interval: 1m
timeout: 10s timeout: 10s
retries: 3 retries: 3
start_period: 30s start_period: 30s
security_opt:
- no-new-privileges:true
mem_limit: 512m
cpus: 2.0
restart: unless-stopped restart: unless-stopped
port-updater: port-updater:
@@ -135,12 +150,19 @@ services:
labels: labels:
- "autoheal=true" - "autoheal=true"
healthcheck: healthcheck:
test: ["CMD-SHELL", "curl -f https://1.1.1.1 || exit 1"] test: ["CMD-SHELL", "curl -sf https://1.1.1.1 || exit 1"]
interval: 1m interval: 1m
timeout: 10s timeout: 10s
retries: 3 retries: 3
start_period: 30s start_period: 30s
restart: always security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp
mem_limit: 64m
cpus: 0.25
restart: unless-stopped
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# *arr Stack # *arr Stack
@@ -156,8 +178,8 @@ services:
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
environment: environment:
- PUID=${HOST_PUID:-1000} - PUID=${HOST_PUID:-1000}
- PGID=${HOST_PGID:-1000} - PGID=${HOST_PGID:-1000}
@@ -165,12 +187,20 @@ services:
labels: labels:
- "autoheal=true" - "autoheal=true"
healthcheck: healthcheck:
test: ["CMD-SHELL", "wget --spider -q https://google.com || exit 1"] test:
interval: 5m [
timeout: 60s "CMD-SHELL",
"curl -sf http://localhost:${PROWLARR_PORT}/ping || exit 1",
]
interval: 1m
timeout: 10s
retries: 3 retries: 3
start_period: 30s start_period: 30s
restart: always security_opt:
- no-new-privileges:true
mem_limit: 256m
cpus: 1.0
restart: unless-stopped
sonarr: sonarr:
image: lscr.io/linuxserver/sonarr:latest image: lscr.io/linuxserver/sonarr:latest
@@ -183,8 +213,8 @@ services:
- /var/lib/sonarr:/config - /var/lib/sonarr:/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
environment: environment:
- PUID=${HOST_PUID:-1000} - PUID=${HOST_PUID:-1000}
- PGID=${HOST_PGID:-1000} - PGID=${HOST_PGID:-1000}
@@ -192,12 +222,17 @@ services:
labels: labels:
- "autoheal=true" - "autoheal=true"
healthcheck: healthcheck:
test: ["CMD-SHELL", "curl -f http://1.1.1.1 || exit 1"] test:
interval: 5m ["CMD-SHELL", "curl -sf http://localhost:${SONARR_PORT}/ping || exit 1"]
timeout: 60s interval: 1m
timeout: 10s
retries: 3 retries: 3
start_period: 60s start_period: 60s
restart: always security_opt:
- no-new-privileges:true
mem_limit: 256m
cpus: 1.0
restart: unless-stopped
radarr: radarr:
image: lscr.io/linuxserver/radarr:latest image: lscr.io/linuxserver/radarr:latest
@@ -210,8 +245,8 @@ services:
- /var/lib/radarr:/config - /var/lib/radarr:/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
environment: environment:
- PUID=${HOST_PUID:-1000} - PUID=${HOST_PUID:-1000}
- PGID=${HOST_PGID:-1000} - PGID=${HOST_PGID:-1000}
@@ -219,12 +254,17 @@ services:
labels: labels:
- "autoheal=true" - "autoheal=true"
healthcheck: healthcheck:
test: ["CMD-SHELL", "curl -f http://1.1.1.1 || exit 1"] test:
["CMD-SHELL", "curl -sf http://localhost:${RADARR_PORT}/ping || exit 1"]
interval: 1m interval: 1m
timeout: 10s timeout: 10s
retries: 3 retries: 3
start_period: 30s start_period: 30s
restart: always security_opt:
- no-new-privileges:true
mem_limit: 256m
cpus: 1.0
restart: unless-stopped
lidarr: lidarr:
image: lscr.io/linuxserver/lidarr:latest image: lscr.io/linuxserver/lidarr:latest
@@ -238,8 +278,8 @@ services:
- /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
environment: environment:
- PUID=${HOST_PUID:-1000} - PUID=${HOST_PUID:-1000}
- PGID=${HOST_PGID:-1000} - PGID=${HOST_PGID:-1000}
@@ -247,11 +287,16 @@ services:
labels: labels:
- "autoheal=true" - "autoheal=true"
healthcheck: healthcheck:
test: ["CMD-SHELL", "curl -f http://1.1.1.1 || exit 1"] test:
["CMD-SHELL", "curl -sf http://localhost:${LIDARR_PORT}/ping || exit 1"]
interval: 1m interval: 1m
timeout: 10s timeout: 10s
retries: 3 retries: 3
start_period: 30s start_period: 30s
security_opt:
- no-new-privileges:true
mem_limit: 256m
cpus: 1.0
restart: unless-stopped restart: unless-stopped
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -267,10 +312,16 @@ services:
- ${TAUTULLI_PORT}:${TAUTULLI_PORT} - ${TAUTULLI_PORT}:${TAUTULLI_PORT}
volumes: volumes:
- ./tautulli:/config - ./tautulli:/config
#- /etc/localtime:/etc/localtime:ro
#- /etc/timezone:/etc/timezone:ro
environment: environment:
- PUID=${HOST_PUID:-1000} - PUID=${HOST_PUID:-1000}
- PGID=${HOST_PGID:-1000} - PGID=${HOST_PGID:-1000}
- TZ=${TIMEZONE} - TZ=${TIMEZONE}
security_opt:
- no-new-privileges:true
mem_limit: 256m
cpus: 1.0
restart: unless-stopped restart: unless-stopped
tdarr: tdarr:
@@ -287,12 +338,18 @@ services:
- ./tdarr/temp:/temp - ./tdarr/temp:/temp
- ${DISK1}:${DISK1} - ${DISK1}:${DISK1}
- ${DISK2}:${DISK2} - ${DISK2}:${DISK2}
#- /etc/localtime:/etc/localtime:ro
#- /etc/timezone:/etc/timezone:ro
environment: environment:
- TZ=${TIMEZONE} - TZ=${TIMEZONE}
- PUID=${HOST_PUID:-1000} - PUID=${HOST_PUID:-1000}
- PGID=${HOST_PGID:-100} - PGID=${HOST_PGID:-1000}
- UMASK_SET=002 - UMASK_SET=002
- serverIP=0.0.0.0 - serverIP=0.0.0.0
security_opt:
- no-new-privileges:true
mem_limit: 512m
cpus: 2.0
restart: unless-stopped restart: unless-stopped
tdarr-node: tdarr-node:
@@ -306,6 +363,8 @@ services:
- ./tdarr/temp:/temp - ./tdarr/temp:/temp
- ${DISK1}:${DISK1} - ${DISK1}:${DISK1}
- ${DISK2}:${DISK2} - ${DISK2}:${DISK2}
#- /etc/localtime:/etc/localtime:ro
#- /etc/timezone:/etc/timezone:ro
environment: environment:
- TZ=${TIMEZONE} - TZ=${TIMEZONE}
- PUID=${HOST_PUID:-1000} - PUID=${HOST_PUID:-1000}
@@ -314,8 +373,12 @@ services:
- nodeIP=0.0.0.0 - nodeIP=0.0.0.0
- serverIP=tdarr - serverIP=tdarr
- serverPort=${TDARR_NODE_PORT} - serverPort=${TDARR_NODE_PORT}
security_opt:
- no-new-privileges:true
mem_limit: 2g
cpus: 4.0
devices: devices:
- /dev/dri/:/dev/dri/ - /dev/dri:/dev/dri
restart: unless-stopped restart: unless-stopped
seerr: seerr:
@@ -327,11 +390,11 @@ services:
- ${SEERR_PORT}:${SEERR_PORT} - ${SEERR_PORT}:${SEERR_PORT}
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
environment: environment:
- LOG_LEVEL=debug - LOG_LEVEL=info
- TZ=America/Los_Angeles - TZ=${TIMEZONE}
- PUID=${HOST_PUID:-1000} - PUID=${HOST_PUID:-1000}
- PGID=${HOST_PGID:-1000} - PGID=${HOST_PGID:-1000}
labels: labels:
@@ -339,22 +402,35 @@ services:
init: true init: true
working_dir: "/app" working_dir: "/app"
healthcheck: healthcheck:
test: ["CMD-SHELL", "wget --spider -q http://1.1.1.1 || exit 1"] test:
[
"CMD-SHELL",
"wget -qO- http://127.0.0.1:${SEERR_PORT}/api/v1/status || exit 1",
]
interval: 1m interval: 1m
timeout: 10s timeout: 10s
retries: 3 retries: 3
start_period: 60s start_period: 60s
security_opt:
- no-new-privileges:true
mem_limit: 256m
cpus: 1.0
restart: unless-stopped restart: unless-stopped
seerr-anubis: # Anubis anti-bot proxy for Seerr (uncomment to enable):
image: ghcr.io/techarohq/anubis:latest #seerr-anubis:
container_name: seerr_anubis # image: ghcr.io/techarohq/anubis:latest
networks: # container_name: seerr-anubis
- caddy_net # networks:
environment: # - caddy_net
- BIND=:55055 # environment:
- TARGET=http://seerr:${SEERR_PORT} # - BIND=:55055
restart: unless-stopped # - TARGET=http://seerr:${SEERR_PORT}
# security_opt:
# - no-new-privileges:true
# mem_limit: 128m
# cpus: 0.5
# restart: unless-stopped
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Monitoring # Monitoring
@@ -363,6 +439,9 @@ services:
homepage: homepage:
image: ghcr.io/gethomepage/homepage:latest image: ghcr.io/gethomepage/homepage:latest
container_name: homepage container_name: homepage
env_file:
- .env
- ./env/.homepage.env
networks: networks:
- caddy_net - caddy_net
ports: ports:
@@ -372,8 +451,8 @@ services:
- ./homepage/images:/app/public/images - ./homepage/images:/app/public/images
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro
- ./gluetun-data:/tmp/gluetun:ro - ./gluetun-data:/tmp/gluetun:ro
- /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},${SERVER_NAME}.${TAILNET_NAME}:${HOMEPAGE_PORT}" - "HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev,${LOCAL_IPV4}:${HOMEPAGE_PORT},${SERVER_NAME}:${HOMEPAGE_PORT},${SERVER_NAME}.${TAILNET_NAME}:${HOMEPAGE_PORT}"
- "HOMEPAGE_VAR_DISK1=${DISK1}" - "HOMEPAGE_VAR_DISK1=${DISK1}"
@@ -382,16 +461,6 @@ services:
- "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}"
- "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_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}"
@@ -404,8 +473,11 @@ services:
- "HOMEPAGE_VAR_GLANCES_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${GLANCES_PORT}" - "HOMEPAGE_VAR_GLANCES_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${GLANCES_PORT}"
- "HOMEPAGE_VAR_SEERR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${SEERR_PORT}" - "HOMEPAGE_VAR_SEERR_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${SEERR_PORT}"
- "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_ODYSSEUS_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${ODYSSEUS_PORT}" - "HOMEPAGE_VAR_ODYSSEUS_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${ODYSSEUS_PORT}"
- "HOMEPAGE_VAR_PIHOLE_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${PIHOLE_PORT}"
- "HOMEPAGE_VAR_PORTAINER_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${PORTAINER_PORT}"
- "HOMEPAGE_VAR_SCRUTINY_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${SCRUTINY_PORT}"
- "HOMEPAGE_VAR_KARAKEEP_ADDRESS=${WEB_PROTOCOL}://${LOCAL_IPV4}:${KARAKEEP_PORT}"
- "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}"
@@ -418,45 +490,74 @@ services:
- "HOMEPAGE_VAR_GLANCES_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${GLANCES_PORT}" - "HOMEPAGE_VAR_GLANCES_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${GLANCES_PORT}"
- "HOMEPAGE_VAR_SEERR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${SEERR_PORT}" - "HOMEPAGE_VAR_SEERR_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${SEERR_PORT}"
- "HOMEPAGE_VAR_MYSPEED_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${MYSPEED_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}" - "HOMEPAGE_VAR_ODYSSEUS_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${ODYSSEUS_PORT}"
- "HOMEPAGE_VAR_PIHOLE_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${PIHOLE_PORT}"
- "HOMEPAGE_VAR_PORTAINER_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${PORTAINER_PORT}"
- "HOMEPAGE_VAR_SCRUTINY_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${SCRUTINY_PORT}"
- "HOMEPAGE_VAR_KARAKEEP_HOST=${WEB_PROTOCOL}://${SERVER_NAME}:${KARAKEEP_PORT}"
- TZ=${TIMEZONE} - TZ=${TIMEZONE}
security_opt:
- no-new-privileges:true
mem_limit: 256m
cpus: 1.0
extra_hosts: extra_hosts:
- "host.docker.internal:host-gateway" - "host.docker.internal:host-gateway"
restart: always
glances:
image: nicolargo/glances:latest-full
container_name: glances
network_mode: host
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=${HOST_PUID:-1000}
- PGID=${HOST_PGID:-1000}
- TZ=${TIMEZONE}
devices:
- /dev/dri:/dev/dri
pid: host
restart: unless-stopped restart: unless-stopped
# glances:
# image: nicolargo/glances:latest-full
# container_name: glances
# network_mode: host
# volumes:
# - /etc/os-release:/etc/os-release:ro
# - /:/host:ro
# #- /etc/localtime:/etc/localtime:ro
# #- /etc/timezone:/etc/timezone:ro
# environment:
# - "GLANCES_OPT=-w --password ${GLANCES_PASSWORD}"
# - PUID=${HOST_PUID:-1000}
# - PGID=${HOST_PGID:-1000}
# - TZ=${TIMEZONE}
# healthcheck:
# test:
# ["CMD", "curl", "-f", "http://localhost:${GLANCES_PORT}/api/4/status"]
# interval: 1m
# timeout: 10s
# retries: 3
# start_period: 60s
# security_opt:
# - no-new-privileges:true
# mem_limit: 256m
# cpus: 1.0
# devices:
# - /dev/dri:/dev/dri
# restart: unless-stopped
# # Uncomment to protect Glances WebUI by a login/password (add --password to GLANCES_OPT)
# secrets:
# - source: glances_password
# target: /root/.config/glances/<login>.pwd
# secrets:
# glances_password:
# file: ./secrets/glances_password
autoheal: autoheal:
image: willfarrell/autoheal:latest image: willfarrell/autoheal:latest
container_name: autoheal container_name: autoheal
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: environment:
- AUTOHEAL_CONTAINER_LABEL=all - AUTOHEAL_CONTAINER_LABEL=all
- AUTOHEAL_INTERVAL=30 - AUTOHEAL_INTERVAL=30
- AUTOHEAL_START_PERIOD=60 - AUTOHEAL_START_PERIOD=60
restart: always - TZ=${TIMEZONE}
security_opt:
- no-new-privileges:true
read_only: true
mem_limit: 64m
cpus: 0.25
restart: unless-stopped
myspeed: myspeed:
image: germannewsmaker/myspeed image: germannewsmaker/myspeed
@@ -465,10 +566,14 @@ services:
- ${MYSPEED_PORT}:${MYSPEED_PORT}/tcp - ${MYSPEED_PORT}:${MYSPEED_PORT}/tcp
volumes: volumes:
- 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: environment:
- TZ=${TIMEZONE} - TZ=${TIMEZONE}
security_opt:
- no-new-privileges:true
mem_limit: 256m
cpus: 1.0
restart: unless-stopped restart: unless-stopped
scrutiny: scrutiny:
@@ -477,12 +582,20 @@ services:
cap_add: cap_add:
- SYS_RAWIO - SYS_RAWIO
ports: ports:
- ${SCRUTINY_PORT:-54321}:8080 - ${SCRUTINY_PORT}:8080
- ${SCRUTINY_ADMIN_PORT:-12345}:8086 - ${SCRUTINY_ADMIN_PORT}:8086
volumes: volumes:
- /run/udev:/run/udev:ro - /run/udev:/run/udev:ro
- ./config:/opt/scrutiny/config - ./scrutiny/config:/opt/scrutiny/config
- ./influxdb:/opt/scrutiny/influxdb - ./scrutiny/influxdb:/opt/scrutiny/influxdb
#- /etc/localtime:/etc/localtime:ro
#- /etc/timezone:/etc/timezone:ro
environment:
- TZ=${TIMEZONE}
security_opt:
- no-new-privileges:true
mem_limit: 512m
cpus: 1.0
devices: devices:
- /dev/nvme0n1 - /dev/nvme0n1
- /dev/sda - /dev/sda
@@ -496,28 +609,40 @@ services:
image: pihole/pihole:latest image: pihole/pihole:latest
container_name: pihole container_name: pihole
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN # Allows managing network interfaces & sockets
- NET_BIND_SERVICE # Allows non-root users to bind to ports < 1024 (port 53 & 123)
- SYS_TIME # Resolves the NTP system time warning
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 - ${PIHOLE_PORT}:${PIHOLE_PORT}/tcp
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
environment: environment:
- TZ=America/Los_Angeles - TZ=${TIMEZONE}
- WEBPASSWORD=password123
- FTLCONF_misc_etc_dnsmasq_d=true - FTLCONF_misc_etc_dnsmasq_d=true
# security_opt:
# - no-new-privileges:true
mem_limit: 256m
cpus: 1.0
restart: unless-stopped restart: unless-stopped
cloudflared: cloudflared:
image: cloudflare/cloudflared:latest image: cloudflare/cloudflared:latest
container_name: cloudflared container_name: cloudflared
command: tunnel --no-autoupdate run --token ${CLOUDFLARED_KEY} env_file:
- ./env/.cloudflared.env
command: tunnel --no-autoupdate run # --token ${CLOUDFLARED_KEY}
security_opt:
- no-new-privileges:true
read_only: true
mem_limit: 128m
cpus: 0.5
restart: always restart: always
portainer: portainer:
@@ -528,7 +653,15 @@ services:
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock - /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data - portainer_data:/data
restart: always #- /etc/localtime:/etc/localtime:ro
#- /etc/timezone:/etc/timezone:ro
environment:
- TZ=${TIMEZONE}
security_opt:
- no-new-privileges:true
mem_limit: 256m
cpus: 1.0
restart: unless-stopped
caddy: caddy:
image: caddy:latest image: caddy:latest
@@ -539,11 +672,18 @@ services:
- 80:80 - 80:80
- 443:443 - 443:443
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./caddy/Caddyfile:/etc/caddy/Caddyfile - ./caddy/Caddyfile:/etc/caddy/Caddyfile
- ./caddy/site:/srv - ./caddy/site:/srv
- ./caddy/caddy_data:/data - ./caddy/caddy_data:/data
- ./caddy/caddy_config:/config - ./caddy/caddy_config:/config
#- /etc/localtime:/etc/localtime:ro
#- /etc/timezone:/etc/timezone:ro
environment:
- TZ=${TIMEZONE}
security_opt:
- no-new-privileges:true
mem_limit: 128m
cpus: 0.5
restart: unless-stopped restart: unless-stopped
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -554,15 +694,21 @@ services:
image: ghcr.io/karakeep-app/karakeep:${KARAKEEP_VERSION:-release} image: ghcr.io/karakeep-app/karakeep:${KARAKEEP_VERSION:-release}
container_name: karakeep container_name: karakeep
env_file: env_file:
- .env - ./env/.karakeep.env
ports: ports:
- 4621:3000 - ${KARAKEEP_PORT}:3000 # must be 3000 as per the dev
volumes: volumes:
- karakeep-data:/data - ./karakeep-data:/data
#- /etc/localtime:/etc/localtime:ro
#- /etc/timezone:/etc/timezone:ro
environment: environment:
- MEILI_ADDR=http://meilisearch:7700 - MEILI_ADDR=http://meilisearch:${MEILI_PORT}
- BROWSER_WEB_URL=http://chrome:9222 - BROWSER_WEB_URL=http://chrome:${KARAKEEP_CHROME_PORT}
- DATA_DIR=/data - DATA_DIR=/data
security_opt:
- no-new-privileges:true
mem_limit: 512m
cpus: 2.0
restart: unless-stopped restart: unless-stopped
chrome: chrome:
@@ -573,10 +719,14 @@ services:
- --disable-gpu - --disable-gpu
- --disable-dev-shm-usage - --disable-dev-shm-usage
- --remote-debugging-address=0.0.0.0 - --remote-debugging-address=0.0.0.0
- --remote-debugging-port=9222 - --remote-debugging-port=${KARAKEEP_CHROME_PORT}
- --hide-scrollbars - --hide-scrollbars
- --disable-blink-features=AutomationControlled - --disable-blink-features=AutomationControlled
- --window-size=1440,900 - --window-size=1440,900
security_opt:
- no-new-privileges:true
mem_limit: 512m
cpus: 1.0
restart: unless-stopped restart: unless-stopped
meilisearch: meilisearch:
@@ -585,7 +735,13 @@ services:
env_file: env_file:
- .env - .env
volumes: volumes:
- meilisearch:/meili_data - ./meilisearch:/meili_data
#- /etc/localtime:/etc/localtime:ro
#- /etc/timezone:/etc/timezone:ro
environment: environment:
- MEILI_NO_ANALYTICS="true" - MEILI_NO_ANALYTICS=true
security_opt:
- no-new-privileges:true
mem_limit: 512m
cpus: 1.0
restart: unless-stopped restart: unless-stopped
-604
View File
@@ -1,604 +0,0 @@
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
+67 -65
View File
@@ -2,69 +2,74 @@
# For configuration options and examples, please see: # For configuration options and examples, please see:
# https://gethomepage.dev/configs/bookmarks # https://gethomepage.dev/configs/bookmarks
- "Apps": - "User":
- "Plex": - "Plex":
- icon: si-plex-#EBAF00 - icon: si-plex-#EBAF00
href: "{{HOMEPAGE_VAR_PLEX_HOST}}" href: "{{HOMEPAGE_VAR_PLEX_HOST}}"
- "Odysseus": - "Seerr":
- icon: http://shaan-server:7001/static/icons/icon-192.png - icon: sh-seerr
href: https://shaan-server.cc href: "{{HOMEPAGE_VAR_SEERR_HOST}}"
- "Sonarr": - "Odysseus":
- icon: sh-sonarr - icon: http://shaan-server:7001/static/icons/icon-192.png
href: "{{HOMEPAGE_VAR_SONARR_HOST}}" href: https://shaan-server.cc
- "Radarr": - "Karakeep":
- icon: sh-radarr - icon: sh-karakeep-light
href: "{{HOMEPAGE_VAR_RADARR_HOST}}" href: "{{HOMEPAGE_VAR_KARAKEEP_HOST}}"
- "Lidarr":
- icon: sh-lidarr - "Admin":
href: "{{HOMEPAGE_VAR_LIDARR_HOST}}" - "Sonarr":
- "Tautulli": - icon: sh-sonarr
- icon: sh-tautulli href: "{{HOMEPAGE_VAR_SONARR_HOST}}"
href: "{{HOMEPAGE_VAR_TAUTULLI_HOST}}" - "Radarr":
- "Tdarr": - icon: sh-radarr
- icon: sh-tdarr href: "{{HOMEPAGE_VAR_RADARR_HOST}}"
href: "{{HOMEPAGE_VAR_TDARR_HOST}}" - "Lidarr":
- "qBittorrent": - icon: sh-lidarr
- icon: sh-qbittorrent href: "{{HOMEPAGE_VAR_LIDARR_HOST}}"
href: http://shaan-server:2161 - "Prowlarr":
- "Seerr": - icon: sh-prowlarr
- icon: sh-seerr href: "{{HOMEPAGE_VAR_PROWLARR_HOST}}"
href: "{{HOMEPAGE_VAR_SEERR_HOST}}" - "Tautulli":
- "Prowlarr": - icon: sh-tautulli
- icon: sh-prowlarr href: "{{HOMEPAGE_VAR_TAUTULLI_HOST}}"
href: "{{HOMEPAGE_VAR_PROWLARR_HOST}}" - "Tdarr":
- "Portainer": - icon: sh-tdarr
- icon: sh-portainer-light href: "{{HOMEPAGE_VAR_TDARR_HOST}}"
href: https://shaan-server:9443 - "qBittorrent":
- "Pi-Hole": - icon: sh-qbittorrent
- icon: sh-pi-hole href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}"
href: http://shaan-server:6060/admin - "Speedtest":
- "Router Gateway": - icon: sh-speedtest-light
- icon: "http://192.168.50.1/images/favicon.png" href: "{{HOMEPAGE_VAR_MYSPEED_HOST}}"
href: http://192.168.50.1 - "Scrutiny":
- "llama.cpp": - icon: sh-scrutiny-light
- icon: sh-llama-cpp href: "{{HOMEPAGE_VAR_SCRUTINY_HOST}}"
href: http://192.168.50.6:5078 - "Router Gateway":
- "Tailscale": - icon: "http://192.168.50.1/images/favicon.png"
- icon: sh-tailscale-light href: http://192.168.50.1
href: https://login.tailscale.com - "Tailscale":
- "Speedtest": - icon: sh-tailscale-light
- icon: sh-speedtest-light href: https://login.tailscale.com
href: "{{HOMEPAGE_VAR_MYSPEED_HOST}}" - "Portainer":
- "Scrutiny": - icon: sh-portainer-light
- icon: sh-scrutiny-light href: "{{HOMEPAGE_VAR_PORTAINER_HOST}}"
href: http://shaan-server:54321 - "Pi-Hole":
- "Cloudflare": - icon: sh-pi-hole
- icon: sh-cloudflare href: "{{HOMEPAGE_VAR_PIHOLE_HOST}}/admin"
href: https://dash.cloudflare.com - "Cloudflare":
- icon: sh-cloudflare
href: https://dash.cloudflare.com
- Monitorix:
- icon: "{{HOMEPAGE_VAR_WEB_PROTOCOL}}://{{HOMEPAGE_VAR_LOCAL_IPV4}}:4000/monitorix/monitorixico.png"
href: http://{{HOMEPAGE_VAR_SERVER_NAME}}:4000/monitorix
- Bookmarks: - Bookmarks:
- "Youtube": - "Youtube":
- icon: sh-youtube - icon: sh-youtube
href: https://www.youtube.com href: https://www.youtube.com
- "Gmail": - "Gmail":
- icon: sh-gmail - icon: sh-gmail
href: https://mail.google.com href: https://mail.google.com
# - github/dhaan7/torrent-stack: # - github/dhaan7/torrent-stack:
# - icon: sh-github-light # - icon: sh-github-light
# href: https://github.com/dhaan7/torrent-stack # href: https://github.com/dhaan7/torrent-stack
@@ -74,7 +79,4 @@
# href: "{{HOMEPAGE_VAR_TERMIX_HOST}}" # href: "{{HOMEPAGE_VAR_TERMIX_HOST}}"
# description: Terminal emulator in your web browser # description: Terminal emulator in your web browser
# #
# - Monitorix: #
# - icon: "{{HOMEPAGE_VAR_WEB_PROTOCOL}}://{{HOMEPAGE_VAR_LOCAL_IPV4}}:4000/monitorix/monitorixico.png"
# href: http://{{HOMEPAGE_VAR_SERVER_NAME}}:4000/monitorix
# description: Generate and review system reports
+412 -452
View File
@@ -3,461 +3,421 @@
# https://gethomepage.dev/configs/services/ # https://gethomepage.dev/configs/services/
- "Top": - "Top":
- "Cloudflared Tunnel": - "Cloudflared Tunnel":
icon: sh-cloudflare icon: sh-cloudflare
href: "https://dash.cloudflare.com/" href: "https://dash.cloudflare.com/"
server: my-docker server: my-docker
container: cloudflared-tunnel container: cloudflared
description: description:
widget: widget:
type: cloudflared type: cloudflared
accountid: 252f471fd316e89626f13c25c6012bc7 # from zero trust dashboard url e.g. https://one.dash.cloudflare.com/<accountid>/home/quick-start accountid: "{{HOMEPAGE_VAR_CLOUDFLARED_ACCOUNT_ID}}"
tunnelid: 5aa02e6a-4166-4a2d-95c9-0af0f7237b23 # found in tunnels dashboard under the tunnel name tunnelid: "{{HOMEPAGE_VAR_CLOUDFLARED_TUNNEL_ID}}"
key: cfut_2i9bGXfbFuu0XkDEcCClXvVu0x1wYuwn7sTztLLGd5469df7 key: "{{HOMEPAGE_VAR_CLOUDFLARED_API_KEY}}"
- "VPN Address >": - "VPN Address >":
icon: sh-gluetun icon: sh-gluetun
href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}" href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}"
server: my-docker server: my-docker
container: gluetun container: gluetun
widget: widget:
type: customapi type: customapi
url: "{{HOMEPAGE_VAR_QBITTORRENT_ADDRESS}}/api/v2/sync/maindata" url: "{{HOMEPAGE_VAR_QBITTORRENT_ADDRESS}}/api/v2/sync/maindata"
mappings: mappings:
- field: server_state.last_external_address_v4 - field: server_state.last_external_address_v4
label: "Address" label: "Address"
format: string format: string
- "Tailscale >": - "Tailscale >":
icon: sh-tailscale-light icon: sh-tailscale-light
href: https://login.tailscale.com href: https://login.tailscale.com
siteMonitor: https://tailscale.com siteMonitor: https://tailscale.com
widget: widget:
type: tailscale type: tailscale
deviceid: "{{HOMEPAGE_VAR_TAILSCALE_DEVICE_KEY}}" deviceid: "{{HOMEPAGE_VAR_TAILSCALE_DEVICE_KEY}}"
key: "{{HOMEPAGE_VAR_TAILSCALE_KEY}}" key: "{{HOMEPAGE_VAR_TAILSCALE_KEY}}"
fields: [address] fields: [address]
- "Speedtest Results >": - "Speedtest Results >":
icon: sh-speedtest-light icon: sh-speedtest-light
href: "{{HOMEPAGE_VAR_MYSPEED_HOST}}" href: "{{HOMEPAGE_VAR_MYSPEED_HOST}}"
server: my-docker server: my-docker
container: MySpeed container: myspeed
widget: widget:
type: myspeed type: myspeed
url: "{{HOMEPAGE_VAR_MYSPEED_ADDRESS}}" url: "{{HOMEPAGE_VAR_MYSPEED_ADDRESS}}"
fields: [download, upload] fields: [download, upload]
- "Media": - "Media":
- "Media_1": - "Media_1":
- "llama.cpp (shaan-pc)": - "Odysseus":
icon: sh-llama-cpp icon: "{{HOMEPAGE_VAR_ODYSSEUS_HOST}}/static/icons/icon-192.png"
href: "http://192.168.50.6:5078" href: "{{HOMEPAGE_VAR_ODYSSEUS_HOST}}"
#siteMonitor: http://192.168.50.6:5078/v1/health siteMonitor: "{{HOMEPAGE_VAR_ODYSSEUS_HOST}}"
description: 32GB VRAM + 64GB RAM description: Local AI Models
- "Odysseus": - "Port Updater":
icon: sh-ollama icon: sh-docker
href: "{{HOMEPAGE_VAR_ODYSSEUS_HOST}}" description: Shell
siteMonitor: "{{HOMEPAGE_VAR_ODYSSEUS_HOST}}" server: my-docker
description: Local AI Models container: port-updater
- "Github": - "Monitorix":
icon: sh-github-light icon: "{{HOMEPAGE_VAR_WEB_PROTOCOL}}://{{HOMEPAGE_VAR_LOCAL_IPV4}}:4000/monitorix/monitorixico.png"
href: https://github.com/dhaan7/torrent-stack href: http://{{HOMEPAGE_VAR_SERVER_NAME}}:4000/monitorix
description: Repository description: System
- "Port Updater": - "Media_2":
icon: sh-docker - "Plex >":
description: Shell icon: sh-plex
server: my-docker #icon: sh-plex-dark
container: port-updater href: "{{HOMEPAGE_VAR_PLEX_HOST}}"
- "Termix": description: Watch
icon: "{{HOMEPAGE_VAR_TERMIX_ADDRESS}}/favicon.ico" siteMonitor: "{{HOMEPAGE_VAR_PLEX_ADDRESS}}"
href: "{{HOMEPAGE_VAR_TERMIX_HOST}}" widget:
description: Terminal type: plex
server: my-docker url: "{{HOMEPAGE_VAR_PLEX_ADDRESS}}"
container: termix key: "{{HOMEPAGE_VAR_PLEX_KEY}}"
- "Monitorix": fields: [albums, movies, tv]
icon: "{{HOMEPAGE_VAR_WEB_PROTOCOL}}://{{HOMEPAGE_VAR_LOCAL_IPV4}}:4000/monitorix/monitorixico.png" - "Tautulli >":
href: http://{{HOMEPAGE_VAR_SERVER_NAME}}:4000/monitorix icon: sh-tautulli
description: System href: "{{HOMEPAGE_VAR_TAUTULLI_HOST}}"
- "Media_2": description: Monitor
- "Plex >": server: my-docker
icon: sh-plex container: tautulli
#icon: sh-plex-dark widget:
href: "{{HOMEPAGE_VAR_PLEX_HOST}}" type: tautulli
description: Watch url: "{{HOMEPAGE_VAR_TAUTULLI_ADDRESS}}"
siteMonitor: "{{HOMEPAGE_VAR_PLEX_ADDRESS}}" key: "{{HOMEPAGE_VAR_TAUTULLI_KEY}}"
widget: enableUser: false
type: plex expandOneStreamToTwoRows: false
url: "{{HOMEPAGE_VAR_PLEX_ADDRESS}}" - "Sonarr >":
key: "{{HOMEPAGE_VAR_PLEX_KEY}}" icon: sh-sonarr
fields: [albums, movies, tv] href: "{{HOMEPAGE_VAR_SONARR_HOST}}"
- "Tautulli >": description: Shows
icon: sh-tautulli server: my-docker
href: "{{HOMEPAGE_VAR_TAUTULLI_HOST}}" container: sonarr
description: Monitor widget:
server: my-docker type: sonarr
container: tautulli url: "{{HOMEPAGE_VAR_SONARR_ADDRESS}}"
widget: key: "{{HOMEPAGE_VAR_SONARR_KEY}}"
type: tautulli enableQueue: false # shows a long list of queued items. looks ugly unless you reorder the page yourself
url: "{{HOMEPAGE_VAR_TAUTULLI_ADDRESS}}" fields: [wanted, queued]
key: "{{HOMEPAGE_VAR_TAUTULLI_KEY}}" highlight:
enableUser: false queued:
expandOneStreamToTwoRows: false numeric:
- "Sonarr >": - level: warn
icon: sh-sonarr when: gt
href: "{{HOMEPAGE_VAR_SONARR_HOST}}" value: 0
description: Shows - Upcoming TV Episodes:
server: my-docker icon: sh-sonarr
container: sonarr server: my-docker
widget: container: sonarr
type: sonarr widget:
url: "{{HOMEPAGE_VAR_SONARR_ADDRESS}}" type: calendar
key: "{{HOMEPAGE_VAR_SONARR_KEY}}" firstDayInWeek: sunday # optional - defaults to monday
enableQueue: false # shows a long list of queued items. looks ugly unless you reorder the page yourself view: agenda # optional - possible values monthly, agenda
fields: [wanted, queued] maxEvents: 2 # optional - defaults to 10
highlight: showTime: true # optional - show time for event happening today - defaults to false
queued: timezone: America/Los_Angeles
numeric: integrations: # optional
- level: warn - type: sonarr
when: gt service_name: "Sonarr >"
value: 0 baseUrl: "{{HOMEPAGE_VAR_SONARR_HOST}}"
- Upcoming TV Episodes: unmonitored: true
icon: sh-sonarr - "Radarr >":
server: my-docker icon: sh-radarr
container: sonarr href: "{{HOMEPAGE_VAR_RADARR_HOST}}"
widget: description: Movies
type: calendar server: my-docker
firstDayInWeek: sunday # optional - defaults to monday container: radarr
view: agenda # optional - possible values monthly, agenda widget:
maxEvents: 2 # optional - defaults to 10 type: radarr
showTime: true # optional - show time for event happening today - defaults to false url: "{{HOMEPAGE_VAR_RADARR_ADDRESS}}"
timezone: America/Los_Angeles key: "{{HOMEPAGE_VAR_RADARR_KEY}}"
integrations: # optional fields: [wanted, queued]
- type: sonarr highlight:
service_name: "Sonarr >" queued:
baseUrl: "{{HOMEPAGE_VAR_SONARR_HOST}}" numeric:
unmonitored: true - level: warn
- "Radarr >": when: gt
icon: sh-radarr value: 0
href: "{{HOMEPAGE_VAR_RADARR_HOST}}" - Upcoming Movies:
description: Movies icon: sh-radarr
server: my-docker server: my-docker
container: radarr container: radarr
widget: widget:
type: radarr type: calendar
url: "{{HOMEPAGE_VAR_RADARR_ADDRESS}}" firstDayInWeek: sunday # optional - defaults to monday
key: "{{HOMEPAGE_VAR_RADARR_KEY}}" view: agenda # optional - possible values monthly, agenda
fields: [wanted, queued] maxEvents: 2 # optional - defaults to 10
highlight: showTime: true # optional - show time for event happening today - defaults to false
queued: timezone: America/Los_Angeles
numeric: integrations: # optional
- level: warn - type: radarr
when: gt service_name: "Radarr >"
value: 0 baseUrl: "{{HOMEPAGE_VAR_RADARR_HOST}}"
- Upcoming Movies: unmonitored: true
icon: sh-radarr - "Lidarr >":
server: my-docker icon: sh-lidarr
container: radarr href: "{{HOMEPAGE_VAR_LIDARR_HOST}}"
widget: description: Music
type: calendar server: my-docker
firstDayInWeek: sunday # optional - defaults to monday container: lidarr
view: agenda # optional - possible values monthly, agenda widget:
maxEvents: 2 # optional - defaults to 10 type: lidarr
showTime: true # optional - show time for event happening today - defaults to false url: "{{HOMEPAGE_VAR_LIDARR_ADDRESS}}"
timezone: America/Los_Angeles key: "{{HOMEPAGE_VAR_LIDARR_KEY}}"
integrations: # optional fields: [wanted, queued]
- type: radarr highlight:
service_name: "Radarr >" queued:
baseUrl: "{{HOMEPAGE_VAR_RADARR_HOST}}" numeric:
unmonitored: true - level: warn
- "Lidarr >": when: gt
icon: sh-lidarr value: 0
href: "{{HOMEPAGE_VAR_LIDARR_HOST}}" - "Seerr >":
description: Music icon: sh-overseerr
server: my-docker href: "{{HOMEPAGE_VAR_SEERR_HOST}}"
container: lidarr description: Request
widget: server: my-docker
type: lidarr container: seerr
url: "{{HOMEPAGE_VAR_LIDARR_ADDRESS}}" widget:
key: "{{HOMEPAGE_VAR_LIDARR_KEY}}" type: seerr
fields: [wanted, queued] url: "{{HOMEPAGE_VAR_SEERR_ADDRESS}}"
highlight: key: "{{HOMEPAGE_VAR_SEERR_KEY}}"
queued: fields: [completed, pending]
numeric: highlight:
- level: warn pending:
when: gt numeric:
value: 0 - level: warn
- "Seerr >": when: gt
icon: sh-overseerr value: 0
href: "{{HOMEPAGE_VAR_SEERR_HOST}}" - "Tdarr Node (Intel Arc Pro B70)":
description: Request icon: sh-tdarr
server: my-docker server: my-docker
container: seerr container: tdarr-node
widget: - "Tdarr Node (Intel Graphics UHD 710)":
type: seerr icon: sh-tdarr
url: "{{HOMEPAGE_VAR_SEERR_ADDRESS}}" server: my-docker
key: "{{HOMEPAGE_VAR_SEERR_KEY}}" container: tdarr-node
fields: [completed, pending] - "Media_Bottom":
highlight: - "Tdarr >":
pending: icon: sh-tdarr
numeric: href: "{{HOMEPAGE_VAR_TDARR_HOST}}"
- level: warn description: Transcode
when: gt server: my-docker
value: 0 container: tdarr
- "Media_Bottom": widget:
- "Tdarr Node (Intel Graphics UHD 710)": type: tdarr
icon: sh-tdarr url: "{{HOMEPAGE_VAR_TDARR_ADDRESS}}"
server: my-docker key: "{{HOMEPAGE_VAR_TDARR_KEY}}"
container: tdarr-node highlight:
- "Tdarr >": queue:
icon: sh-tdarr numeric:
href: "{{HOMEPAGE_VAR_TDARR_HOST}}" - level: warn
description: Transcode when: gt
server: my-docker value: 0
container: tdarr errored:
widget: numeric:
type: tdarr - level: danger
url: "{{HOMEPAGE_VAR_TDARR_ADDRESS}}" when: gt
key: "{{HOMEPAGE_VAR_TDARR_KEY}}" value: 0
highlight:
queue:
numeric:
- level: warn
when: gt
value: 0
errored:
numeric:
- level: danger
when: gt
value: 0
# - "Media_Tdarr_Nodes":
# - "Intel UHD 710":
# icon: sh-tdarr
# server: my-docker
# container: tdarr-node
- "Network": - "Network":
- "Network_1": - "Network_1":
- "Portainer": - "Portainer":
icon: sh-portainer-light icon: sh-portainer-light
href: https://shaan-server:9443 href: https://shaan-server:9443
description: Containers description: Containers
server: my-docker server: my-docker
container: portainer container: portainer
widget: widget:
type: portainer type: portainer
url: https://shaan-server:9443 url: https://shaan-server:9443
env: 3 env: 3
key: ptr_dR3wQa568otBJzfZz5FET+IQKXee7K6O+VO301iY6x4= key: "{{HOMEPAGE_VAR_PORTAINER_KEY}}"
- "Pi-Hole Adblocker": - "Pi-Hole Adblocker":
icon: sh-pi-hole icon: sh-pi-hole
href: "http://192.168.50.2:6060/admin/login" href: "http://192.168.50.2:6060/admin/login"
description: DNS description: DNS
server: my-docker server: my-docker
container: pihole container: pihole
widget: widget:
type: pihole type: pihole
url: http://shaan-server:6060 url: http://shaan-server:6060
version: 6 # required if running v6 or higher, defaults to 5 version: 6 # required if running v6 or higher, defaults to 5
key: password # optional, in v6 can be your password or app password key: "{{HOMEPAGE_VAR_PIHOLE_PASSWORD}}"
- "Network_qbit": - "Network_2":
- "Prowlarr >": - "Scrutiny":
icon: sh-prowlarr icon: sh-scrutiny
href: "{{HOMEPAGE_VAR_PROWLARR_HOST}}" href: http://192.168.50.2:4545 #"{{HOMEPAGE_VAR_SCRUTINY_ADDRESS}}""
description: Indexers description: S.M.A.R.T.
server: my-docker server: my-docker
container: prowlarr container: scrutiny
widget: widget:
type: prowlarr type: scrutiny
url: "{{HOMEPAGE_VAR_PROWLARR_ADDRESS}}" url: http://192.168.50.2:4545 #"{{HOMEPAGE_VAR_SCRUTINY_ADDRESS}}"
key: "{{HOMEPAGE_VAR_PROWLARR_KEY}}" - "Karakeep":
#fields: ["numberOfGrabs"] icon: sh-karakeep-light
highlight: href: http://192.168.50.2:4545 #"{{HOMEPAGE_VAR_SCRUTINY_ADDRESS}}""
"numberOfGrabs": description: Bookmarks
numeric: server: my-docker
- level: warn container: karakeep
when: lte widget:
value: 0 type: karakeep
"numberOfQueries": url: http://shaan-server:4621
numeric: key: ak2_bfee1806ec533a9557bd_940feeb8fbe798d465ab6f90a3562c43
- level: warn - "Network_qbit":
when: lte - "Prowlarr >":
value: 0 icon: sh-prowlarr
"numberOfFailGrabs": href: "{{HOMEPAGE_VAR_PROWLARR_HOST}}"
numeric: description: Indexers
- level: warn server: my-docker
when: gt container: prowlarr
value: 0 widget:
"numberOfFailQueries": type: prowlarr
numeric: url: "{{HOMEPAGE_VAR_PROWLARR_ADDRESS}}"
- level: warn key: "{{HOMEPAGE_VAR_PROWLARR_KEY}}"
when: gt #fields: ["numberOfGrabs"]
value: 0 highlight:
"numberOfGrabs":
numeric:
- level: warn
when: lte
value: 0
"numberOfQueries":
numeric:
- level: warn
when: lte
value: 0
"numberOfFailGrabs":
numeric:
- level: warn
when: gt
value: 0
"numberOfFailQueries":
numeric:
- level: warn
when: gt
value: 0
- "qBittorrent Active >": - "qBittorrent Active >":
icon: sh-qbittorrent icon: sh-qbittorrent
href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}" href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}"
server: my-docker server: my-docker
container: qbittorrent container: qbittorrent
#description: #description:
widget: widget:
type: customapi type: customapi
url: "{{HOMEPAGE_VAR_QBITTORRENT_ADDRESS}}/api/v2/torrents/info?filter=seeding" url: "{{HOMEPAGE_VAR_QBITTORRENT_ADDRESS}}/api/v2/torrents/info?filter=seeding"
mappings: mappings:
#- field: #- field:
- field: _count - field: _count
label: "Active" label: "Active"
format: integer format: integer
scale: 1 scale: 1
highlight: highlight:
"Active": "Active":
numeric: numeric:
- level: danger - level: danger
when: lte when: lte
value: 20 value: 20
- "qBittorrent Status >": - "qBittorrent Status >":
icon: sh-qbittorrent icon: sh-qbittorrent
href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}" href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}"
server: my-docker server: my-docker
container: qbittorrent container: qbittorrent
widget: widget:
type: customapi type: customapi
url: "{{HOMEPAGE_VAR_QBITTORRENT_ADDRESS}}/api/v2/sync/maindata" url: "{{HOMEPAGE_VAR_QBITTORRENT_ADDRESS}}/api/v2/sync/maindata"
mappings: mappings:
- field: server_state.connection_status - field: server_state.connection_status
label: "status" label: "status"
format: string format: string
- field: server_state.dht_nodes - field: server_state.dht_nodes
label: "DHT" label: "DHT"
format: integer format: integer
scale: 1 scale: 1
- field: server_state.last_external_address_v4 - field: server_state.last_external_address_v4
label: "Address" label: "Address"
format: string format: string
highlight: highlight:
"status": "status":
string: string:
- level: danger - level: danger
when: equals when: equals
value: connected value: connected
negate: true negate: true
"DHT": "DHT":
#valueOnly: true #valueOnly: true
numeric: numeric:
- level: danger - level: danger
when: lte when: lte
value: 0 value: 0
- level: warn - level: warn
when: lte when: lte
value: 200 value: 200
- "qBittorrent Stats >": - "qBittorrent Stats >":
icon: sh-qbittorrent icon: sh-qbittorrent
href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}" href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}"
server: my-docker server: my-docker
container: qbittorrent container: qbittorrent
widget: widget:
type: customapi type: customapi
url: "{{HOMEPAGE_VAR_QBITTORRENT_ADDRESS}}/api/v2/sync/maindata" url: "{{HOMEPAGE_VAR_QBITTORRENT_ADDRESS}}/api/v2/sync/maindata"
mappings: mappings:
- field: server_state.alltime_dl - field: server_state.alltime_dl
label: "T. Down" label: "T. Down"
format: bytes format: bytes
scale: 0.862 scale: 0.862
- field: server_state.alltime_ul - field: server_state.alltime_ul
label: "T. Up" label: "T. Up"
format: bytes format: bytes
scale: 0.862 scale: 0.862
- field: server_state.global_ratio - field: server_state.global_ratio
label: "Ratio" label: "Ratio"
format: percent format: percent
scale: 100 scale: 100
#suffix: "%" #suffix: "%"
highlight: highlight:
"Ratio": "Ratio":
numeric: numeric:
- level: warn - level: warn
when: lt when: lt
value: 100 value: 100
- level: danger - level: danger
when: lte when: lte
value: 60 value: 60
- "qBittorrent Session >": - "qBittorrent Session >":
icon: sh-qbittorrent icon: sh-qbittorrent
href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}" href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}"
server: my-docker server: my-docker
container: qbittorrent container: qbittorrent
widget: widget:
type: customapi type: customapi
url: "{{HOMEPAGE_VAR_QBITTORRENT_ADDRESS}}/api/v2/sync/maindata" url: "{{HOMEPAGE_VAR_QBITTORRENT_ADDRESS}}/api/v2/sync/maindata"
key: "{{HOMEPAGE_VAR_QBITTORRENT_KEY}}" key: "{{HOMEPAGE_VAR_QBITTORRENT_KEY}}"
mappings: mappings:
- field: server_state.dl_info_speed - field: server_state.dl_info_speed
label: Down label: Down
format: bitrate format: bitrate
scale: 0.862 scale: 0.862
- field: server_state.dl_info_data - field: server_state.dl_info_data
label: T. Down label: T. Down
format: bytes format: bytes
scale: 0.862 scale: 0.862
- field: server_state.up_info_speed - field: server_state.up_info_speed
label: Up label: Up
format: bitrate format: bitrate
scale: 0.862 scale: 0.862
- field: server_state.up_info_data - field: server_state.up_info_data
label: T. Up label: T. Up
format: bytes format: bytes
scale: 0.862 scale: 0.862
highlight: highlight:
#"T. Down": "Down":
# numeric: numeric:
# - level: good - level: good
# when: gt when: gt
# value: 0 value: 0
"Down": "Up":
numeric: numeric:
- level: good - level: good
when: gt when: gt
value: 0 value: 0
#"T. Up":
# numeric:
# - level: good
# when: gt
# value: 0
"Up":
numeric:
- level: good
when: gt
value: 0
# - "Minecraft":
# icon: sh-minecraft-creeper
# description: Game Server Instance
# server: my-docker
# container: mc
# #siteMonitor: "udp://localhost:25575"
# widget:
# type: minecraft
# url: http://localhost:25565
# highlight:
# status:
# valueOnly: true
# string:
# - level: good
# when: equals
# value: "connected"
# - level: warn
# when: equals
# value: "connected"
# negate: true
# players:
# numeric:
# - level: warn
# when: lte
# value: 0
- "Network_2":
- "Scrutiny":
icon: sh-scrutiny
href: http://192.168.50.2:4545 #"{{HOMEPAGE_VAR_SCRUTINY_ADDRESS}}""
description: S.M.A.R.T.
server: my-docker
container: scrutiny
widget:
type: scrutiny
url: http://192.168.50.2:4545 #"{{HOMEPAGE_VAR_SCRUTINY_ADDRESS}}"
+76 -69
View File
@@ -6,11 +6,11 @@ instanceName: torrent-stack
# Aesthetics # Aesthetics
background: background:
image: /images/wallhaven-pk997m.jpg image: /images/wallhaven-pk997m.jpg
#blur: sm # Options: sm, md, lg, xl #blur: sm # Options: sm, md, lg, xl
#saturate: 10 #saturate: 10
#brightness: 10 #brightness: 10
opacity: 30 opacity: 30
cardBlur: md cardBlur: md
theme: dark theme: dark
@@ -27,12 +27,12 @@ showActivity: false
#bookmarksStyle: icons #bookmarksStyle: icons
quicklaunch: quicklaunch:
searchDescriptions: true searchDescriptions: true
hideInternetSearch: false hideInternetSearch: false
showSearchSuggestions: true showSearchSuggestions: true
hideVisitURL: true hideVisitURL: true
provider: google # google, duckduckgo, bing, baidu, brave or custom provider: google # google, duckduckgo, bing, baidu, brave or custom
mobileButtonPosition: bottom-right mobileButtonPosition: bottom-right
# Organization # Organization
groupsInitiDetailedyCollapsed: false groupsInitiDetailedyCollapsed: false
@@ -40,61 +40,68 @@ headerStyle: boxed #underlined
useEqualHeights: true useEqualHeights: true
layout: layout:
"Apps": "User":
tab: Apps tab: Apps
iconsOnly: false iconsOnly: false
header: true header: true
disableCollapse: true disableCollapse: true
style: row style: row
columns: 3 columns: 3
"Top": "Admin":
tab: Detailed tab: Apps
header: false iconsOnly: false
style: row header: true
columns: 4 disableCollapse: true
"Media": style: row
tab: Detailed columns: 3
header: false "Bookmarks":
style: column tab: Apps
columns: 1 header: true
"Media_1": initiallyCollapsed: true
tab: Detailed style: row
header: false columns: 3
style: row "Top":
columns: 3 tab: Detailed
"Media_2": header: false
tab: Detailed style: row
header: false columns: 4
style: row "Media":
columns: 2 tab: Detailed
"Media_Bottom": header: false
tab: Detailed style: column
header: false columns: 1
style: row "Media_1":
columns: 1 tab: Detailed
"Network": header: false
tab: Detailed style: row
header: false columns: 3
style: column "Media_2":
columns: 1 tab: Detailed
"Network_1": header: false
tab: Detailed style: row
header: false columns: 2
style: row "Media_Bottom":
columns: 2 tab: Detailed
"Network_qbit": header: false
tab: Detailed style: row
header: false columns: 1
style: row "Network":
columns: 1 tab: Detailed
"Network_2": header: false
tab: Detailed style: column
header: false columns: 1
style: row "Network_1":
columns: 2 tab: Detailed
"Bookmarks": header: false
tab: Apps style: row
header: true columns: 2
initiallyCollapsed: true "Network_qbit":
style: row tab: Detailed
columns: 3 header: false
style: row
columns: 1
"Network_2":
tab: Detailed
header: false
style: row
columns: 2
+47 -34
View File
@@ -3,44 +3,57 @@
# https://gethomepage.dev/configs/info-widgets/ # https://gethomepage.dev/configs/info-widgets/
- greeting: - greeting:
text_size: 3xl text_size: 3xl
text: shaan-server text: shaan-server
- datetime: - datetime:
text_size: xl text_size: xl
locale: en locale: en
format: format:
timeStyle: medium timeStyle: medium
dateStyle: medium dateStyle: medium
hour12: true hour12: true
- openmeteo: - openmeteo:
#label: Sacramento, CA #label: Sacramento, CA
latitude: 38.58 latitude: 38.58
longitude: -121.49 longitude: -121.49
units: imperial # Uses Fahrenheit and mph for Roseville units: imperial # Uses Fahrenheit and mph for Roseville
- glances: - resources:
url: http://host.docker.internal:61208 cpu: true
href: "{{HOMEPAGE_VAR_GLANCES_HOST}}" memory: true
username: user # optional if auth enabled in Glances #disk: {{HOMEPAGE_VAR_DISK1}}
password: pass # optional if auth enabled in Glances cputemp: true
version: 4 # required only if running glances v4 or higher, defaults to 3 tempmin: 0 # optional, minimum cpu temp
cpu: true # optional, enabled by default, disable by setting to false tempmax: 100 # optional, maximum cpu temp
cputemp: false # disabled by default uptime: true
mem: true # optional, enabled by default, disable by setting to false units: metric # only used by cpu temp, options: 'imperial' or 'metric'
cpuSensorLabel: Package id # optional additional cputemp sensor label prefix refresh: 2000 # optional, in ms
unit: imperial # optional for temp, default is metric diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk
uptime: true # disabled by default network: false # optional, uses 'default' if true or specify a network interface name
disk: # disabled by default, use mount point of disk(s) in glances. Can also be a list (see below)
- / # - glances:
- "/host{{HOMEPAGE_VAR_DISK1}}" # url: http://host.docker.internal:61208
- "/host{{HOMEPAGE_VAR_DISK2}}" # href: "{{HOMEPAGE_VAR_GLANCES_HOST}}"
- "/host{{HOMEPAGE_VAR_DISK3}}" # username: "{{HOMEPAGE_VAR_GLANCES_USERNAME}}"
diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk # password: "{{HOMEPAGE_VAR_GLANCES_PASSWORD}}"
expanded: true # show the expanded view # version: 4 # required only if running glances v4 or higher, defaults to 3
#label: MyMachine # optional # cpu: true # optional, enabled by default, disable by setting to false
# cputemp: false # disabled by default
# mem: true # optional, enabled by default, disable by setting to false
# cpuSensorLabel: Package id # optional additional cputemp sensor label prefix
# unit: imperial # optional for temp, default is metric
# uptime: true # disabled by default
# disk: # disabled by default, use mount point of disk(s) in glances. Can also be a list (see below)
# - /
# - "/host{{HOMEPAGE_VAR_DISK1}}"
# - "/host{{HOMEPAGE_VAR_DISK2}}"
# - "/host{{HOMEPAGE_VAR_DISK3}}"
# diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk
# expanded: true # show the expanded view
# #label: MyMachine # optional
- search: - search:
provider: google provider: google
target: _blank target: _blank
-4
View File
@@ -1,4 +0,0 @@
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 -U postgres -f init-database.sql
-38
View File
@@ -1,38 +0,0 @@
-- Create a temp table
CREATE TABLE torrent_tmp (
infohash text NOT NULL,
name text NOT NULL,
size_bytes bigint NOT NULL,
created_unix bigint NOT NULL,
seeders integer NOT NULL,
leechers integer NOT NULL,
completed integer NOT NULL,
scraped_date bigint NOT NULL,
published bigint NOT NULL
);
-- Copy from csv
COPY torrent_tmp
FROM
'../torrents.csv' WITH (
FORMAT csv,
HEADER);
-- default sort by seeders
CREATE TABLE torrent AS
SELECT
*
FROM
torrent_tmp
ORDER BY
seeders DESC;
-- Add the identity column
ALTER TABLE torrent
ADD COLUMN id int GENERATED ALWAYS AS IDENTITY,
ADD COLUMN name_search tsvector GENERATED ALWAYS AS (to_tsvector('english', name)) STORED;
CREATE INDEX idx_name ON torrent USING gin (name_search);
DROP TABLE torrent_tmp;
View File
Submodule torrents-csv-data deleted from a48af42e1f
-1
View File
@@ -1 +0,0 @@
torrents-csv-data/torrents.csv
1 torrents-csv-data/torrents.csv