From ad48cb8bc15f77990e7c608d6fcc71f38a8ccf70 Mon Sep 17 00:00:00 2001 From: shaan Date: Wed, 8 Jul 2026 17:44:10 -0700 Subject: [PATCH] refactor: homepage, as well as additional services such as pihole, portainer, scrutiny, torrents-csv. caddy has been partially set up --- .gitignore | 5 + caddy/Caddyfile | 21 +++ compose.yml | 153 ++++++++++++-------- conf/Caddyfile | 1 - homepage/bookmarks.yaml | 83 ++++++----- homepage/custom.css | 4 - homepage/disabled-custom.css | 4 + homepage/services.yaml | 263 ++++++++++++++++++++--------------- homepage/settings.yaml | 33 ++--- startup.sh | 19 +-- 10 files changed, 350 insertions(+), 236 deletions(-) create mode 100644 caddy/Caddyfile delete mode 100644 conf/Caddyfile create mode 100644 homepage/disabled-custom.css diff --git a/.gitignore b/.gitignore index 893f93d..94be2d9 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,11 @@ sonarr/ tautulli/ tdarr/ gluetun-data/ +caddy/* +!Caddyfile +influxdb/ +config/ +conf/ etc* !odysseus/.* diff --git a/caddy/Caddyfile b/caddy/Caddyfile new file mode 100644 index 0000000..a3c0245 --- /dev/null +++ b/caddy/Caddyfile @@ -0,0 +1,21 @@ +# --- TAUTULLI --- +tautulli.shaan-server { + tls internal + reverse_proxy tautulli:8181 +} + +# --- HOMEPAGE --- +shaan-server { + tls internal + reverse_proxy homepage:3000 +} + +# --- PORTAINER --- +portainer.shaan-server { + tls internal + reverse_proxy https://portainer:9443 { + transport http { + tls_insecure_skip_verify + } + } +} diff --git a/compose.yml b/compose.yml index 7781d84..6a2cbeb 100644 --- a/compose.yml +++ b/compose.yml @@ -24,8 +24,6 @@ services: - 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 - - 6881:6881 # Default port for qbit - - 6881:6881/udp # Default port for qbit, if udp > tcp - ${QBITTORRENT_PORT}:${QBITTORRENT_PORT} # qBittorrent Web UI - ${PROWLARR_PORT}:${PROWLARR_PORT} # Prowlarr - ${SONARR_PORT}:${SONARR_PORT} # Sonarr @@ -243,6 +241,8 @@ services: - TZ=${TIMEZONE} ports: - ${TAUTULLI_PORT}:${TAUTULLI_PORT} + networks: + - caddy_net restart: always tdarr: @@ -250,6 +250,7 @@ services: image: haveagitgat/tdarr:latest networks: - tdarr-net + - caddy_net ports: - ${TDARR_PORT}:${TDARR_PORT} # WebUI - ${TDARR_NODE_PORT}:${TDARR_NODE_PORT} # local tdarr-node @@ -268,6 +269,13 @@ services: # dont put temp files onto a HARD DISK DRIVE! > - ${DISK1}/tdarr-temp:/temp devices: - /dev/dri:/dev/dri # Intel UHD Graphics 710 + labels: + caddy: tdarr.shaan-server.cc + caddy.reverse_proxy: "{{upstreams 3000}}" + caddy.reverse_proxy.transport: "http" + caddy.reverse_proxy.transport.tls: "" + caddy.reverse_proxy.transport.tls_insecure_skip_verify: "" + caddy.tls: internal restart: always tdarr-node: @@ -306,7 +314,8 @@ services: - /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}" # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts + #- "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}" @@ -336,6 +345,7 @@ services: - "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}" @@ -349,12 +359,12 @@ services: - "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: - # staticaddress: - # ipv4_address: 172.200.0.2 + networks: + - caddy_net restart: always glances: @@ -463,32 +473,37 @@ services: - 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" - # - "80:80/tcp" - # environment: - # TZ: "America/Los_Angeles" - # #WEBPASSWORD: "password123" - # 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 + 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 + labels: + caddy: pihole.shaan-server.cc + caddy.reverse_proxy: "192.168.50.2:6060" + caddy.tls: internal cloudflared: container_name: cloudflared-tunnel image: cloudflare/cloudflared:latest restart: always - command: tunnel --no-autoupdate run --token eyJhIjoiMjUyZjQ3MWZkMzE2ZTg5NjI2ZjEzYzI1YzYwMTJiYzciLCJ0IjoiNWFhMDJlNmEtNDE2Ni00YTJkLTk1YzktMGFmMGY3MjM3YjIzIiwicyI6Ik5tWmhOR1V6WVRZdE5HRXdOaTAwT1RjekxXSTFPV1V0T0RrMU1UWTRabVl4WkRZeCJ9 + command: tunnel --no-autoupdate run --token ${CLOUDFLARED_KEY} torrents-csv: image: dessalines/torrents-csv-server:latest @@ -505,7 +520,6 @@ services: db: image: pgautoupgrade/pgautoupgrade:17-alpine - restart: unless-stopped shm_size: 1gb volumes: - ./init-database.sh:/docker-entrypoint-initdb.d/init-database.sh @@ -519,48 +533,75 @@ services: POSTGRES_PASSWORD: password POSTGRES_USER: postgres TIMEZONE: ${TIMEZONE} + restart: unless-stopped -# caddy: -# build: -# context: . -# dockerfile_inline: | -# FROM caddy:2.11-builder AS builder -# RUN xcaddy build --with github.com/caddyserver/nginx-adapter --with github.com/caddy-dns/cloudflare -# FROM caddy:2.11-builder -# COPY --from=builder /usr/bin/caddy /usr/bin/caddy -# container_name: caddy -# restart: unless-stopped -# ports: -# - "80:80" -# - "443:443" -# - "443:443/udp" -# environment: -# - CLOUDFLARE_API_TOKEN=eyJhIjoiMjUyZjQ3MWZkMzE2ZTg5NjI2ZjEzYzI1YzYwMTJiYzciLCJ0IjoiNWFhMDJlNmEtNDE2Ni00YTJkLTk1YzktMGFmMGY3MjM3YjIzIiwicyI6Ik5tWmhOR1V6WVRZdE5HRXdOaTAwT1RjekxXSTFPV1V0T0RrMU1UWTRabVl4WkRZeCJ9 -# volumes: -# - ./conf:/etc/caddy -# - ./site:/srv -# - caddy_data:/data -# - caddy_config:/config -# networks: -# - server-mesh + portainer: + container_name: portainer + image: portainer/portainer-ce:lts + restart: always + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - portainer_data:/data + ports: + - 9443:9443 + networks: + - caddy_net + + 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 - server-mesh: - external: true staticaddress: ipam: config: - subnet: "172.200.0.0/16" + default: + name: portainer_network volumes: - # open-webui: - # caddy_data: - # caddy_config: + 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 diff --git a/conf/Caddyfile b/conf/Caddyfile deleted file mode 100644 index 7acd056..0000000 --- a/conf/Caddyfile +++ /dev/null @@ -1 +0,0 @@ -respond "Hello World" diff --git a/homepage/bookmarks.yaml b/homepage/bookmarks.yaml index fcf14b7..68e1646 100644 --- a/homepage/bookmarks.yaml +++ b/homepage/bookmarks.yaml @@ -2,53 +2,70 @@ # For configuration options and examples, please see: # https://gethomepage.dev/configs/bookmarks -- "Icons": +- "Apps": - "Plex": - icon: si-plex-#EBAF00 - href: {{HOMEPAGE_VAR_PLEX_HOST}} - - "LibreChat": - - icon: si-ollama-#FFFFFF - href: http://shaan-server:7001 + href: "{{HOMEPAGE_VAR_PLEX_HOST}}" + - "Odysseus": + - icon: http://shaan-server:7001/static/icons/icon-192.png + href: https://shaan-server.cc - "Sonarr": - - icon: si-sonarr-#2596BE - href: {{HOMEPAGE_VAR_SONARR_HOST}} + - icon: sh-sonarr + href: "{{HOMEPAGE_VAR_SONARR_HOST}}" - "Radarr": - - icon: si-radarr-#FFCB3D - href: {{HOMEPAGE_VAR_RADARR_HOST}} + - icon: sh-radarr + href: "{{HOMEPAGE_VAR_RADARR_HOST}}" - "Lidarr": - - icon: si-youtubemusic-#499848 - href: {{HOMEPAGE_VAR_LIDARR_HOST}} + - icon: sh-lidarr + href: "{{HOMEPAGE_VAR_LIDARR_HOST}}" - "Tautulli": - - icon: sh-tautulli-light - href: {{HOMEPAGE_VAR_TAUTULLI_HOST}} + - icon: sh-tautulli + href: "{{HOMEPAGE_VAR_TAUTULLI_HOST}}" - "Tdarr": - icon: sh-tdarr - href: {{HOMEPAGE_VAR_TDARR_HOST}} + href: "{{HOMEPAGE_VAR_TDARR_HOST}}" - "qBittorrent": - - icon: si-qbittorrent-#2F67BA + - icon: sh-qbittorrent href: http://shaan-server:2161 - "Seerr": - - icon: sh-seerr-light - href: {{HOMEPAGE_VAR_SEERR_HOST}} + - icon: sh-seerr + href: "{{HOMEPAGE_VAR_SEERR_HOST}}" - "Prowlarr": - - icon: sh-prowlarr-light - href: {{HOMEPAGE_VAR_PROWLARR_HOST}} - - "pihole": - - icon: si-pihole-#96060C - href: http://shaan-server/admin + - icon: sh-prowlarr + href: "{{HOMEPAGE_VAR_PROWLARR_HOST}}" + - "Portainer": + - icon: sh-portainer-light + href: https://shaan-server:9443 + - "Pi-Hole": + - icon: sh-pi-hole + href: http://shaan-server:6060/admin + - "Router Gateway": + - icon: "http://192.168.50.1/images/favicon.png" + href: http://192.168.50.1 + - "llama.cpp": + - icon: sh-llama-cpp + href: http://192.168.50.6:5078 + - "Tailscale": + - icon: sh-tailscale-light + href: https://login.tailscale.com + - "Speedtest": + - icon: sh-speedtest-light + href: "{{HOMEPAGE_VAR_MYSPEED_HOST}}" + - "Scrutiny": + - icon: sh-scrutiny-light + href: http://shaan-server:54321 - Bookmarks: - github/dhaan7/torrent-stack: - - icon: sh-github + - icon: sh-github-light href: https://github.com/dhaan7/torrent-stack description: link to this GitHub repository - - - Termix: - - icon: "{{HOMEPAGE_VAR_TERMIX_ADDRESS}}/favicon.ico" - href: "{{HOMEPAGE_VAR_TERMIX_HOST}}" - 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 +# - Termix: +# - icon: "{{HOMEPAGE_VAR_TERMIX_ADDRESS}}/favicon.ico" +# href: "{{HOMEPAGE_VAR_TERMIX_HOST}}" +# 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 diff --git a/homepage/custom.css b/homepage/custom.css index d6db2d8..e69de29 100644 --- a/homepage/custom.css +++ b/homepage/custom.css @@ -1,4 +0,0 @@ -img[src*="selfhs"] { - filter: invert(82%) sepia(23%) saturate(1098%) hue-rotate(193deg) - brightness(288%) contrast(88%) !important; -} diff --git a/homepage/disabled-custom.css b/homepage/disabled-custom.css new file mode 100644 index 0000000..d6db2d8 --- /dev/null +++ b/homepage/disabled-custom.css @@ -0,0 +1,4 @@ +img[src*="selfhs"] { + filter: invert(82%) sepia(23%) saturate(1098%) hue-rotate(193deg) + brightness(288%) contrast(88%) !important; +} diff --git a/homepage/services.yaml b/homepage/services.yaml index c19b494..bc7e3f5 100644 --- a/homepage/services.yaml +++ b/homepage/services.yaml @@ -4,8 +4,10 @@ - "Top": - "Cloudflared Tunnel": - icon: sh-cloudflare-light + icon: sh-cloudflare href: "https://dash.cloudflare.com/" + server: my-docker + container: cloudflared-tunnel description: widget: type: cloudflared @@ -15,6 +17,7 @@ - "External Address": icon: si-globus href: https://api.ipify.org + siteMonitor: https://api.ipify.org widget: type: customapi url: https://api.ipify.org?format=json @@ -25,6 +28,7 @@ - "Tailscale >": icon: sh-tailscale-light href: https://login.tailscale.com + siteMonitor: https://tailscale.com widget: type: tailscale deviceid: "{{HOMEPAGE_VAR_TAILSCALE_DEVICE_KEY}}" @@ -33,55 +37,73 @@ - "Speedtest Results >": icon: sh-speedtest-light href: "{{HOMEPAGE_VAR_MYSPEED_HOST}}" + server: my-docker + container: MySpeed widget: type: myspeed url: "{{HOMEPAGE_VAR_MYSPEED_ADDRESS}}" fields: [download, upload] -- "non-torrent-stack": - - "Odysseus": - icon: sh-ollama-light - href: "{{HOMEPAGE_VAR_WEB_PROTOCOL}}://{{HOMEPAGE_VAR_SERVER_NAME}}:7001" - siteMonitor: "{{HOMEPAGE_VAR_WEB_PROTOCOL}}://{{HOMEPAGE_VAR_SERVER_NAME}}:7001" - description: Local AI Models - - "llama.cpp (shaan-pc)": - icon: sh-llama-cpp-light - href: "http://192.168.50.6:5078/v1/health" - siteMonitor: http://192.168.50.6:5078 - description: 42GB VRAM + 32GB RAM - - "Pi-Hole Adblocker": - icon: sh-pi-hole-light - href: "http://192.168.50.2/admin" - description: Configure Device DNS to '192.168.50.2' - server: my-docker - container: pihole - # api token with `Account.Cloudflare Tunnel:Read` https://dash.cloudflare.com/profile/api-tokens - "Media": - - "Plex >": - icon: sh-plex-light - #icon: sh-plex-dark - href: "{{HOMEPAGE_VAR_PLEX_HOST}}" - description: Watch - siteMonitor: "{{HOMEPAGE_VAR_PLEX_ADDRESS}}" - widget: - type: plex - url: "{{HOMEPAGE_VAR_PLEX_ADDRESS}}" - key: "{{HOMEPAGE_VAR_PLEX_KEY}}" - fields: [albums, movies, tv] - - "Tautulli >": - icon: sh-tautulli-light - href: "{{HOMEPAGE_VAR_TAUTULLI_HOST}}" - description: Monitor - server: my-docker - container: tautulli - widget: - type: tautulli - url: "{{HOMEPAGE_VAR_TAUTULLI_ADDRESS}}" - key: "{{HOMEPAGE_VAR_TAUTULLI_KEY}}" - enableUser: false - expandOneStreamToTwoRows: false - - "Media_2x2": + - "Media_1": + - "llama.cpp (shaan-pc)": + icon: sh-llama-cpp + href: "http://192.168.50.6:5078" + siteMonitor: http://192.168.50.6:5078/v1/health + description: 42GB VRAM + 32GB RAM + - "Odysseus": + icon: sh-ollama + href: "{{HOMEPAGE_VAR_ODYSSEUS_HOST}}" + siteMonitor: "{{HOMEPAGE_VAR_ODYSSEUS_HOST}}" + description: Local AI Models + - "Gluetun": + icon: sh-gluetun + description: VPN + server: my-docker + container: gluetun + #widget: + # type: gluetun + # url: ${HOMEPAGE_VAR_WEB_PROTOCOL}://${HOMEPAGE_VAR_LOCAL_IPV4}:8000 + - "Port Updater": + icon: sh-docker + description: VPN + server: my-docker + container: port-updater + - "Termix": + icon: "{{HOMEPAGE_VAR_TERMIX_ADDRESS}}/favicon.ico" + href: "{{HOMEPAGE_VAR_TERMIX_HOST}}" + description: Web Terminal + server: my-docker + container: termix + - "Monitorix": + icon: "{{HOMEPAGE_VAR_WEB_PROTOCOL}}://{{HOMEPAGE_VAR_LOCAL_IPV4}}:4000/monitorix/monitorixico.png" + href: http://{{HOMEPAGE_VAR_SERVER_NAME}}:4000/monitorix + description: View System Reports + - "Media_2": + - "Plex >": + icon: sh-plex + #icon: sh-plex-dark + href: "{{HOMEPAGE_VAR_PLEX_HOST}}" + description: Watch + siteMonitor: "{{HOMEPAGE_VAR_PLEX_ADDRESS}}" + widget: + type: plex + url: "{{HOMEPAGE_VAR_PLEX_ADDRESS}}" + key: "{{HOMEPAGE_VAR_PLEX_KEY}}" + fields: [albums, movies, tv] + - "Tautulli >": + icon: sh-tautulli + href: "{{HOMEPAGE_VAR_TAUTULLI_HOST}}" + description: Monitor + server: my-docker + container: tautulli + widget: + type: tautulli + url: "{{HOMEPAGE_VAR_TAUTULLI_ADDRESS}}" + key: "{{HOMEPAGE_VAR_TAUTULLI_KEY}}" + enableUser: false + expandOneStreamToTwoRows: false - "Sonarr >": - icon: sh-sonarr-light + icon: sh-sonarr href: "{{HOMEPAGE_VAR_SONARR_HOST}}" description: TV Shows server: my-docker @@ -98,8 +120,22 @@ - level: warn when: gt value: 0 + - Upcoming TV Episodes: + icon: sh-sonarr + widget: + type: calendar + firstDayInWeek: sunday # optional - defaults to monday + view: agenda # optional - possible values monthly, agenda + maxEvents: 2 # optional - defaults to 10 + showTime: true # optional - show time for event happening today - defaults to false + timezone: America/Los_Angeles + integrations: # optional + - type: sonarr + service_name: "Sonarr >" + baseUrl: "{{HOMEPAGE_VAR_SONARR_HOST}}" + unmonitored: true - "Radarr >": - icon: sh-radarr-light + icon: sh-radarr href: "{{HOMEPAGE_VAR_RADARR_HOST}}" description: Movies server: my-docker @@ -115,22 +151,8 @@ - level: warn when: gt value: 0 - - Upcoming TV Episodes: - icon: sh-sonarr-light - widget: - type: calendar - firstDayInWeek: sunday # optional - defaults to monday - view: agenda # optional - possible values monthly, agenda - maxEvents: 2 # optional - defaults to 10 - showTime: true # optional - show time for event happening today - defaults to false - timezone: America/Los_Angeles - integrations: # optional - - type: sonarr - service_name: "Sonarr >" - baseUrl: "{{HOMEPAGE_VAR_SONARR_HOST}}" - unmonitored: true - Upcoming Movies: - icon: sh-radarr-light + icon: sh-radarr widget: type: calendar firstDayInWeek: sunday # optional - defaults to monday @@ -144,7 +166,7 @@ baseUrl: "{{HOMEPAGE_VAR_RADARR_HOST}}" unmonitored: true - "Lidarr >": - icon: sh-lidarr-light + icon: sh-lidarr href: "{{HOMEPAGE_VAR_LIDARR_HOST}}" description: Music server: my-docker @@ -161,7 +183,7 @@ when: gt value: 0 - "Seerr >": - icon: sh-overseerr-light + icon: sh-overseerr href: "{{HOMEPAGE_VAR_SEERR_HOST}}" description: Request server: my-docker @@ -177,8 +199,11 @@ - level: warn when: gt value: 0 - - "Media_Bottom": + - "Tdarr Node (Intel Graphics UHD 710)": + icon: sh-tdarr + server: my-docker + container: tdarr-node - "Tdarr >": icon: sh-tdarr href: "{{HOMEPAGE_VAR_TDARR_HOST}}" @@ -200,30 +225,38 @@ - level: danger when: gt value: 0 - - "Media_Tdarr_Nodes": - - "Intel UHD 710": - icon: sh-tdarr - server: my-docker - container: tdarr-node +# - "Media_Tdarr_Nodes": +# - "Intel UHD 710": +# icon: sh-tdarr +# server: my-docker +# container: tdarr-node - "Network": - - "Network_2x2": - - "Gluetun": - icon: sh-gluetun-light - description: VPN + - "Network_1": + - "Portainer": + icon: sh-portainer-light + href: https://shaan-server:9443 + description: Manage Docker Containers server: my-docker - container: gluetun - #widget: - # type: gluetun - # url: ${HOMEPAGE_VAR_WEB_PROTOCOL}://${HOMEPAGE_VAR_LOCAL_IPV4}:8000 - - - "Port Updater": - icon: sh-docker-light - description: VPN + container: portainer + widget: + type: portainer + url: https://shaan-server:9443 + env: 3 + key: ptr_dR3wQa568otBJzfZz5FET+IQKXee7K6O+VO301iY6x4= + - "Pi-Hole Adblocker": + icon: sh-pi-hole + href: "http://192.168.50.2/admin" + description: Configure Device DNS to '192.168.50.2' server: my-docker - container: port-updater - - "Network_list": + container: pihole + widget: + type: pihole + url: http://shaan-server:6060 + version: 6 # required if running v6 or higher, defaults to 5 + key: password # optional, in v6 can be your password or app password + - "Network_qbit": - "Prowlarr >": - icon: sh-prowlarr-light + icon: sh-prowlarr href: "{{HOMEPAGE_VAR_PROWLARR_HOST}}" description: Indexer Management server: my-docker @@ -256,7 +289,7 @@ value: 0 - "qBittorrent Active >": - icon: sh-qbittorrent-light + icon: sh-qbittorrent href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}" server: my-docker container: qbittorrent @@ -278,7 +311,7 @@ value: 20 - "qBittorrent Status >": - icon: sh-qbittorrent-light + icon: sh-qbittorrent href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}" server: my-docker container: qbittorrent @@ -314,7 +347,7 @@ value: 200 - "qBittorrent Stats >": - icon: sh-qbittorrent-light + icon: sh-qbittorrent href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}" server: my-docker container: qbittorrent @@ -346,7 +379,7 @@ value: 60 - "qBittorrent Session >": - icon: sh-qbittorrent-light + icon: sh-qbittorrent href: "{{HOMEPAGE_VAR_QBITTORRENT_HOST}}" server: my-docker container: qbittorrent @@ -392,28 +425,38 @@ - level: good when: gt value: 0 - - "Minecraft": - icon: sh-minecraft-creeper-light - description: Game Server Instance + # - "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:54321 #"{{HOMEPAGE_VAR_SCRUTINY_ADDRESS}}"" + description: Disk "S.M.A.R.T." Stats server: my-docker - container: mc - #siteMonitor: "udp://localhost:25575" + container: scrutiny 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 + type: scrutiny + url: http://192.168.50.2:54321 #"{{HOMEPAGE_VAR_SCRUTINY_ADDRESS}}" diff --git a/homepage/settings.yaml b/homepage/settings.yaml index a46cfd1..f279089 100644 --- a/homepage/settings.yaml +++ b/homepage/settings.yaml @@ -40,27 +40,27 @@ headerStyle: boxed #underlined useEqualHeights: true layout: - "Icons": - tab: Icons - iconsOnly: true - header: false + "Apps": + tab: Apps + iconsOnly: false + header: true iconStyle: gradient "Top": tab: All header: false style: row columns: 4 - "non-torrent-stack": - tab: All - header: false - style: row - columns: 4 "Media": tab: All header: false style: column columns: 1 - "Media_2x2": + "Media_1": + tab: All + header: false + style: row + columns: 3 + "Media_2": tab: All header: false style: row @@ -70,21 +70,22 @@ layout: header: false style: row columns: 1 - "Media_Tdarr_Nodes": - header: false - style: row - columns: 2 "Network": tab: All header: false style: column columns: 1 - "Network_list": + "Network_1": + tab: All + header: false + style: row + columns: 2 + "Network_qbit": tab: All header: false style: row columns: 1 - "Network_2x2": + "Network_2": tab: All header: false style: row diff --git a/startup.sh b/startup.sh index e7d8087..3ab4b21 100755 --- a/startup.sh +++ b/startup.sh @@ -1,26 +1,13 @@ #!/bin/bash - -# --- SYSTEM STARTUP LOGGING --- -echo "==========================================" >> /home/shaan/startup.log -echo "Starting local AI and Media stacks: $(date)" >> /home/shaan/startup.log -echo "==========================================" >> /home/shaan/startup.log - -# 1. Wait 15 seconds to ensure Docker daemon and network layers are completely awake sleep 15 -# 2. Launch your Primary Stack (Homarr, Radarr, Sonarr, qBit, Cloudflared) -echo "Spinning up Primary Media Stack..." >> /home/shaan/torrent-stack/startup.log cd /home/shaan/torrent-stack || exit -docker compose up -d gluetun & sleep 90 >> /home/shaan/torrent-stack/startup.log 2>&1 +docker compose up -d gluetun & sleep 90 docker compose up -d -# 3. Small buffer to allow the primary network to mesh sleep 5 -# 4. Launch Odysseus -echo "Spinning up Odysseus Stack..." >> /home/shaan/torrent-stack/startup.log cd /home/shaan/torrent-stack/odysseus || exit git pull . dev -docker compose up -d >> /home/shaan/torrent-stack/startup.log 2>&1 - -echo "All services initiated successfully at $(date)" >> /home/shaan/torrent-stack/startup.log +docker compose pull +docker compose up -d