diff --git a/CLAUDE.md b/CLAUDE.md index dbf883e..edbe848 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -69,7 +69,7 @@ The docker role is now organized into logical service groups under `roles/docker - **communication/**: Social media - GoToSocial (Fediverse) - **monitoring/**: System monitoring and alerts - - Changedetection, Glance dashboard, AppriseAPI, Gotify, Cronmaster + - Changedetection, AppriseAPI, Gotify, Cronmaster ### Variable Management **Critical**: This infrastructure uses a centralized variable hierarchy in `group_vars/all/`: @@ -138,7 +138,6 @@ Common domains requiring hairpinning fixes: - karakeep (formerly called hoarder) is deployed with both 'hoarder' and 'karakeep' tags for backward compatibility - whenever i ask you what containers need updates, run dockcheck and return a list of containers needing updates - when i ask for the status container updates i want you to run dockcheck on the docker host https://github.com/mag37/dockcheck?ref=selfh.st -- this is your reference for glance configuration https://github.com/glanceapp/glance/blob/main/docs/configuration.md#configuring-glance ## Variable Management Implementation Notes **Major Infrastructure Update**: Variable management system was implemented to replace all hardcoded values with centralized variables. @@ -157,7 +156,6 @@ Common domains requiring hairpinning fixes: All templates now follow this pattern: ```yaml # Use variables, not hardcoded values -glance.url: "https://{{ subdomains.service }}/" networks: default: external: true diff --git a/README.md b/README.md index 1ed8b94..db6234c 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,6 @@ The Docker role deploys and manages 21 self-hosted services organized into logic ### Monitoring - **Changedetection** (Website change monitoring) -- **Glance** (Dashboard) - **AppriseAPI** (Notification service) - **Gotify** (Push notifications) - **Cronmaster** (Scheduled container tasks) @@ -90,7 +89,7 @@ The most comprehensive role, deploying 21 containerized services organized into - **Media**: Audiobookshelf, Calibre, Karakeep, Manyfold - **Productivity**: Paperless-NGX, Baikal, Syncthing, HeyForm, Dawarich, Obsidian LiveSync - **Communication**: GoToSocial -- **Monitoring**: Glance dashboard, Changedetection, AppriseAPI, Gotify, Cronmaster +- **Monitoring**: Changedetection, AppriseAPI, Gotify, Cronmaster - **Template-Driven**: All services use Jinja2 templates for consistent configuration - **Category-Based Deployment**: Deploy services by category using Ansible tags diff --git a/dns.yml b/dns.yml index f0772ee..66b9067 100644 --- a/dns.yml +++ b/dns.yml @@ -15,8 +15,6 @@ domains: - name: thesatelliteoflove.com dns_records: - - name: "home" - ip: "{{ network.netcup_ip }}" - name: "git" ip: "{{ network.netcup_ip }}" - name: "social" @@ -72,6 +70,8 @@ removed_records: - name: thesatelliteoflove.com dns_records: + - name: "home" + ip: "{{ network.netcup_ip }}" - name: "pin" ip: "{{ network.netcup_ip }}" - name: "code" diff --git a/group_vars/all/domains.yml b/group_vars/all/domains.yml index 8b9eafc..f84db14 100644 --- a/group_vars/all/domains.yml +++ b/group_vars/all/domains.yml @@ -19,7 +19,6 @@ subdomains: syncthing: "syncthing.{{ primary_domain }}" loclog: "loclog.{{ primary_domain }}" # Dawarich social: "social.{{ primary_domain }}" # GoToSocial - home: "home.{{ primary_domain }}" # Glance watcher: "watcher.{{ primary_domain }}" # Changedetection appriseapi: "appriseapi.{{ primary_domain }}" dockge: "dockge.{{ primary_domain }}" diff --git a/group_vars/docker/services.yml b/group_vars/docker/services.yml index 09f36f7..ca56111 100644 --- a/group_vars/docker/services.yml +++ b/group_vars/docker/services.yml @@ -7,7 +7,7 @@ service_categories: media: ["audiobookshelf", "calibre", "kavita", "dir2opds", "hoarder", "kosync", "manyfold"] productivity: ["paperlessngx", "baikal", "syncthing", "heyform", "dawarich", "obsidian-livesync", "gokapi"] communication: ["gotosocial", "listmonk"] - monitoring: ["glance", "changedetection", "appriseapi", "gotify", "cronmaster"] + monitoring: ["changedetection", "appriseapi", "gotify", "cronmaster"] # Common service configuration services: diff --git a/roles/cron/README.md b/roles/cron/README.md index 898970a..1241030 100644 --- a/roles/cron/README.md +++ b/roles/cron/README.md @@ -12,7 +12,6 @@ Manages scheduled tasks and automated maintenance jobs for the infrastructure. 1. Creates a temporary directory `/tmp/warhammer_feed` 2. Runs a custom Docker container (`git.thesatelliteoflove.com/phil/rss-warhammer`) to generate RSS feed 3. Copies the generated `warhammer_rss_feed.xml` to `/opt/stacks/caddy/site/tsol/feeds/` - 4. Restarts the Glance dashboard stack to reflect the updated feed ## Files Managed - `/usr/local/bin/update_warhammer_feed.sh` - RSS feed update script @@ -23,7 +22,6 @@ Manages scheduled tasks and automated maintenance jobs for the infrastructure. - Depends on the following Docker stacks being deployed: - Custom RSS generator container at `git.thesatelliteoflove.com/phil/rss-warhammer` - Caddy web server stack at `/opt/stacks/caddy/` - - Glance dashboard stack at `/opt/stacks/glance/` ## Usage This role is automatically applied as part of the main site.yml playbook with the `cron` tag. diff --git a/roles/cron/files/update_warhammer_feed.sh b/roles/cron/files/update_warhammer_feed.sh index c0e93ca..592aaf8 100644 --- a/roles/cron/files/update_warhammer_feed.sh +++ b/roles/cron/files/update_warhammer_feed.sh @@ -10,6 +10,3 @@ docker run --rm -v "$TMP_DIR":/app/output git.thesatelliteoflove.com/phil/rss-wa # Copy the generated file to the desired location cp "$TMP_DIR/warhammer_rss_feed.xml" /opt/stacks/caddy/site/tsol/feeds - -# Restart the Docker stack -docker compose -f /opt/stacks/glance/compose.yml restart diff --git a/roles/docker/README.md b/roles/docker/README.md index 9969b42..01eff6f 100644 --- a/roles/docker/README.md +++ b/roles/docker/README.md @@ -54,7 +54,6 @@ Deploys and manages a comprehensive self-hosted infrastructure with 24 container - **Postiz** - Social media management ### Monitoring (`monitoring/`) -- **Glance** - Customizable dashboard with monitoring - **Change Detection** - Website monitoring - **Apprise API** - Unified notifications - **Gotify** - Self-hosted push notification service @@ -190,12 +189,6 @@ Services expect to be accessible via subdomains of configured domains: ## Monitoring & Management -### Glance Dashboard Integration -All services include Glance labels for dashboard monitoring: -- Service health status -- Container resource usage -- Parent-child relationships for multi-container services - ### Operational Features - Automatic container restart policies - Health checks for database services diff --git a/roles/docker/handlers/main.yml b/roles/docker/handlers/main.yml index f0ebdd0..2e1360e 100644 --- a/roles/docker/handlers/main.yml +++ b/roles/docker/handlers/main.yml @@ -1,11 +1,4 @@ # roles/docker/handlers/main.yml -- name: restart glance - community.docker.docker_compose_v2: - project_src: /opt/stacks/glance - files: - - compose.yml - state: restarted - - name: restart caddy community.docker.docker_compose_v2: project_src: /opt/stacks/caddy diff --git a/roles/docker/tasks/monitoring/glance.yml b/roles/docker/tasks/monitoring/glance.yml deleted file mode 100644 index 89d1539..0000000 --- a/roles/docker/tasks/monitoring/glance.yml +++ /dev/null @@ -1,29 +0,0 @@ -- name: make glance directories - ansible.builtin.file: - path: "{{ item }}" - state: directory - loop: - - /opt/stacks/glance - - /opt/stacks/glance/config - -- name: Template out the compose file - ansible.builtin.template: - src: glance-compose.yml.j2 - dest: /opt/stacks/glance/compose.yml - owner: root - mode: '0644' - -- name: Template out the config file - ansible.builtin.template: - src: glance.yml.j2 - dest: /opt/stacks/glance/config/glance.yml - owner: root - mode: '0640' - group: docker - notify: restart glance - -- name: deploy glances stack - community.docker.docker_compose_v2: - project_src: /opt/stacks/glance - files: - - compose.yml \ No newline at end of file diff --git a/roles/docker/tasks/monitoring/main.yml b/roles/docker/tasks/monitoring/main.yml index 63a794a..2d68011 100644 --- a/roles/docker/tasks/monitoring/main.yml +++ b/roles/docker/tasks/monitoring/main.yml @@ -1,10 +1,6 @@ --- # Monitoring services - System monitoring, alerts, and dashboards -- name: Install glance - import_tasks: glance.yml - tags: glance - - name: Install changedetection import_tasks: changedetection.yml tags: changedetection diff --git a/roles/docker/templates/Caddyfile.j2 b/roles/docker/templates/Caddyfile.j2 index 9af1c27..8a2d220 100644 --- a/roles/docker/templates/Caddyfile.j2 +++ b/roles/docker/templates/Caddyfile.j2 @@ -62,10 +62,6 @@ models.thesatelliteoflove.com { } -home.thesatelliteoflove.com { - reverse_proxy authentik-server-1:9000 -} - gotify.thesatelliteoflove.com { reverse_proxy gotify:80 } diff --git a/roles/docker/templates/appriseapi-compose.yml.j2 b/roles/docker/templates/appriseapi-compose.yml.j2 index ffee161..111b48a 100644 --- a/roles/docker/templates/appriseapi-compose.yml.j2 +++ b/roles/docker/templates/appriseapi-compose.yml.j2 @@ -15,11 +15,6 @@ services: extra_hosts: - "{{ subdomains.gotify }}:{{ docker.hairpin_ip }}" labels: - glance.name: Apprise - glance.icon: si:imessage - glance.url: https://{{ subdomains.appriseapi }}/ - glance.description: Apprise api server - glance.id: apprise mag37.dockcheck.update: true volumes: config: diff --git a/roles/docker/templates/audiobookshelf-compose.yml.j2 b/roles/docker/templates/audiobookshelf-compose.yml.j2 index ce1f5f0..b8ab6b7 100644 --- a/roles/docker/templates/audiobookshelf-compose.yml.j2 +++ b/roles/docker/templates/audiobookshelf-compose.yml.j2 @@ -13,10 +13,6 @@ services: extra_hosts: - '{{ subdomains.auth }}:{{ docker.hairpin_ip }}' labels: - glance.name: Audiobookshelf - glance.icon: si:audiobookshelf - glance.url: https://{{ subdomains.audio }}/ - glance.description: Audio book server mag37.dockcheck.update: true volumes: audiobooks: diff --git a/roles/docker/templates/authentik-compose.yml.j2 b/roles/docker/templates/authentik-compose.yml.j2 index 5cfb621..c4abb85 100644 --- a/roles/docker/templates/authentik-compose.yml.j2 +++ b/roles/docker/templates/authentik-compose.yml.j2 @@ -18,9 +18,6 @@ services: POSTGRES_DB: ${PG_DB:-authentik} env_file: - .env - labels: - glance.parent: authentik - glance.name: DB trout: image: docker.io/library/redis:alpine command: --save 60 1 --loglevel warning @@ -33,9 +30,6 @@ services: timeout: 3s volumes: - trout:/data - labels: - glance.parent: authentik - glance.name: Redis server: image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2.2} restart: unless-stopped @@ -54,12 +48,6 @@ services: depends_on: - postgresql - trout - labels: - glance.name: Authentik - glance.icon: si:authentik - glance.url: https://{{ subdomains.auth }}/ - glance.description: Authentication server - glance.id: authentik worker: image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2.2} restart: unless-stopped @@ -87,9 +75,6 @@ services: depends_on: - postgresql - trout - labels: - glance.parent: authentik - glance.name: Worker volumes: database: diff --git a/roles/docker/templates/baikal-compose.yml.j2 b/roles/docker/templates/baikal-compose.yml.j2 index f40961c..16517a3 100644 --- a/roles/docker/templates/baikal-compose.yml.j2 +++ b/roles/docker/templates/baikal-compose.yml.j2 @@ -6,10 +6,6 @@ services: - config:/var/www/baikal/config - data:/var/www/baikal/Specific labels: - glance.name: Baikal - glance.icon: si:protoncalendar - glance.url: https://{{ subdomains.cal }}/ - glance.description: CalDav server mag37.dockcheck.update: true volumes: config: diff --git a/roles/docker/templates/bytestash-compose.yml.j2 b/roles/docker/templates/bytestash-compose.yml.j2 index 100df54..fca9d06 100644 --- a/roles/docker/templates/bytestash-compose.yml.j2 +++ b/roles/docker/templates/bytestash-compose.yml.j2 @@ -21,11 +21,6 @@ services: extra_hosts: - "{{ subdomains.pocketid }}:{{ docker.hairpin_ip }}" labels: - glance.name: ByteStash - glance.icon: si:code - glance.url: https://{{ subdomains.bytestash }}/ - glance.description: Code snippet manager - glance.id: bytestash mag37.dockcheck.update: true volumes: bytestash_data: diff --git a/roles/docker/templates/caddy-compose.yml.j2 b/roles/docker/templates/caddy-compose.yml.j2 index 036c946..f9a7673 100644 --- a/roles/docker/templates/caddy-compose.yml.j2 +++ b/roles/docker/templates/caddy-compose.yml.j2 @@ -12,10 +12,6 @@ services: - caddy_data:/data - caddy_config:/config labels: - glance.name: Caddy - glance.icon: si:caddy - glance.url: https://{{ primary_domain }}/ - glance.description: Reverse proxy mag37.dockcheck.update: true networks: default: diff --git a/roles/docker/templates/calibre-compose.yml.j2 b/roles/docker/templates/calibre-compose.yml.j2 index 72c6052..f972aa7 100644 --- a/roles/docker/templates/calibre-compose.yml.j2 +++ b/roles/docker/templates/calibre-compose.yml.j2 @@ -14,10 +14,6 @@ services: - books:/books restart: unless-stopped labels: - glance.name: Calibre - glance.icon: si:calibreweb - glance.url: https://{{ subdomains.books }}/ - glance.description: Book server mag37.dockcheck.update: true volumes: config: diff --git a/roles/docker/templates/changedetection-compose.yml.j2 b/roles/docker/templates/changedetection-compose.yml.j2 index bc6d6c2..7ec4308 100644 --- a/roles/docker/templates/changedetection-compose.yml.j2 +++ b/roles/docker/templates/changedetection-compose.yml.j2 @@ -5,11 +5,6 @@ services: container_name: changedetection hostname: changedetection labels: - glance.name: Changedetection - glance.icon: si:watchtower - glance.url: https://{{ subdomains.watcher }}/ - glance.description: Changedetection - glance.id: changedetection mag37.dockcheck.update: true volumes: - changedetection-data:/datastore @@ -95,8 +90,6 @@ services: sockpuppetbrowser: hostname: sockpuppetbrowser labels: - glance.parent: changedetection - glance.name: Browser mag37.dockcheck.update: true image: dgtlmoon/sockpuppetbrowser:latest cap_add: diff --git a/roles/docker/templates/cronmaster-compose.yml.j2 b/roles/docker/templates/cronmaster-compose.yml.j2 index 25e4ebc..6644a9e 100644 --- a/roles/docker/templates/cronmaster-compose.yml.j2 +++ b/roles/docker/templates/cronmaster-compose.yml.j2 @@ -19,12 +19,6 @@ services: - /opt/stacks/cronmaster/data:/app/data - /opt/stacks/cronmaster/snippets:/app/snippets labels: - glance.url: "http://{{ network.docker_host_ip }}:40123/" - glance.title: CronMaster - glance.description: Cron job management interface - glance.group: Infrastructure - glance.parent: infrastructure - glance.name: CronMaster mag37.dockcheck.update: true networks: default: diff --git a/roles/docker/templates/dawarich-compose.yml.j2 b/roles/docker/templates/dawarich-compose.yml.j2 index d380ffe..f2463a0 100644 --- a/roles/docker/templates/dawarich-compose.yml.j2 +++ b/roles/docker/templates/dawarich-compose.yml.j2 @@ -2,9 +2,6 @@ services: dawarich_redis: image: redis:7.4-alpine container_name: dawarich_redis - labels: - glance.parent: dawarich - glance.name: Redis volumes: - dawarich_redis_data:/data restart: always @@ -17,9 +14,6 @@ services: dawarich_db: image: postgis/postgis:17-3.5-alpine shm_size: 1G - labels: - glance.parent: dawarich - glance.name: DB container_name: dawarich_db volumes: - dawarich_db_data:/var/lib/postgresql/data @@ -38,12 +32,6 @@ services: dawarich_app: image: freikin/dawarich:latest container_name: dawarich_app - labels: - glance.name: Dawarich - glance.icon: si:openstreetmap - glance.url: https://{{ subdomains.loclog }}/ - glance.description: Dawarich - glance.id: dawarich volumes: - dawarich_public:/var/app/public - dawarich_watched:/var/app/tmp/imports/watched @@ -100,9 +88,6 @@ services: dawarich_sidekiq: image: freikin/dawarich:latest container_name: dawarich_sidekiq - labels: - glance.parent: dawarich - glance.name: Sidekiq volumes: - dawarich_public:/var/app/public - dawarich_watched:/var/app/tmp/imports/watched diff --git a/roles/docker/templates/dir2opds-compose.yml.j2 b/roles/docker/templates/dir2opds-compose.yml.j2 index 6a71cf1..dd9e4eb 100644 --- a/roles/docker/templates/dir2opds-compose.yml.j2 +++ b/roles/docker/templates/dir2opds-compose.yml.j2 @@ -16,10 +16,6 @@ services: - -url=https://{{ subdomains.dir2opds }} restart: unless-stopped labels: - glance.name: dir2opds - glance.icon: si:book - glance.url: https://{{ subdomains.dir2opds }}/ - glance.description: OPDS book catalog mag37.dockcheck.update: true networks: default: diff --git a/roles/docker/templates/dockge-compose.yml.j2 b/roles/docker/templates/dockge-compose.yml.j2 index 8c2a079..97a428d 100644 --- a/roles/docker/templates/dockge-compose.yml.j2 +++ b/roles/docker/templates/dockge-compose.yml.j2 @@ -2,11 +2,6 @@ services: dockge: image: louislam/dockge:1 restart: unless-stopped - labels: - glance.name: Dockge - glance.icon: si:docker - glance.url: http://{{ network.tailscale_hostname }}:5001 - glance.description: Docker management ports: # Host Port : Container Port - 5001:5001 diff --git a/roles/docker/templates/gitea-compose.yml.j2 b/roles/docker/templates/gitea-compose.yml.j2 index 9e90f72..56e9e9e 100644 --- a/roles/docker/templates/gitea-compose.yml.j2 +++ b/roles/docker/templates/gitea-compose.yml.j2 @@ -15,11 +15,6 @@ services: - GITEA__mailer__PASSWD={{ vault_smtp.password }} restart: unless-stopped labels: - glance.name: Gitea - glance.icon: si:gitea - glance.url: https://{{ subdomains.git }}/ - glance.description: Code repo - glance.id: gitea mag37.dockcheck.update: true volumes: - gitea:/data @@ -50,8 +45,6 @@ services: - '{{ subdomains.auth }}:{{ docker.hairpin_ip }}' - '{{ subdomains.git }}:{{ docker.hairpin_ip }}' labels: - glance.parent: gitea - glance.name: Worker mag37.dockcheck.update: true volumes: - ./runner-config.yaml:/config.yaml diff --git a/roles/docker/templates/glance-compose.yml.j2 b/roles/docker/templates/glance-compose.yml.j2 deleted file mode 100644 index f0ac8c2..0000000 --- a/roles/docker/templates/glance-compose.yml.j2 +++ /dev/null @@ -1,23 +0,0 @@ -services: - glance: - image: glanceapp/glance:latest - volumes: - - ./config:/app/config - - /etc/timezone:/etc/timezone:ro - - /etc/localtime:/etc/localtime:ro - - /var/run/docker.sock:/var/run/docker.sock - restart: unless-stopped - extra_hosts: - - '{{ primary_domain }}:{{ docker.hairpin_ip }}' - - '{{ subdomains.watcher }}:{{ docker.hairpin_ip }}' - labels: - glance.name: Glance - glance.icon: si:homepage - glance.url: https://{{ subdomains.home }}/ - glance.description: Homepage app - glance.id: glance - mag37.dockcheck.update: true -networks: - default: - external: true - name: {{ docker.network_name }} diff --git a/roles/docker/templates/glance.yml.j2 b/roles/docker/templates/glance.yml.j2 deleted file mode 100644 index b66e7c2..0000000 --- a/roles/docker/templates/glance.yml.j2 +++ /dev/null @@ -1,149 +0,0 @@ -pages: - - name: Home - head-widgets: - - type: markets - hide-header: true - markets: - - symbol: SPY - name: S&P 500 - - symbol: VTSAX - name: Vanguard Total Stock Market - - symbol: BAI - name: Blackrock AI - - symbol: NLR - name: VanEck Uranium+Nuclear Energy - - symbol: BITO - name: Bitcoin ETF - - columns: - - - size: full - widgets: - - type: search - search-engine: kagi - new-tab: true - - - size: small - widgets: - - type: weather - location: Nederland, Colorado, United States - units: imperial - - - type: custom-api - title: Air Quality - cache: 10m - url: https://api.waqi.info/feed/geo:39.9676367;-105.4037992/?token={{ vault_glance.air_quality_key }} - template: | - {% raw %}{{ $aqi := printf "%03s" (.JSON.String "data.aqi") }} - {{ $aqiraw := .JSON.String "data.aqi" }} - {{ $updated := .JSON.String "data.time.iso" }} - {{ $humidity := .JSON.String "data.iaqi.h.v" }} - {{ $ozone := .JSON.String "data.iaqi.o3.v" }} - {{ $pm25 := .JSON.String "data.iaqi.pm25.v" }} - {{ $pressure := .JSON.String "data.iaqi.p.v" }} - -