diff --git a/CONTAINERS.md b/CONTAINERS.md index 0965425..2b94b55 100644 --- a/CONTAINERS.md +++ b/CONTAINERS.md @@ -1,8 +1,8 @@ # Container Reference - tower-of-joy Infrastructure -> **Last Updated:** 2026-01-01 -> **Total Services:** 27 containers across 21 stacks -> **System:** Intel i7-6700, RTX 2080 Ti (11GB VRAM), 16GB RAM, Zorin OS 16.3 +> **Last Updated:** 2026-01-02 +> **Total Services:** 28 containers across 22 stacks +> **System:** Intel i7-6700, RTX 2080 Ti (11GB VRAM), 64GB RAM, Zorin OS 16.3 --- @@ -37,6 +37,7 @@ | **Paperless-ngx** | 8091 | https://documents.schweitz.net | Internet | No | 8 | ✅ Running | | **ClamAV** | 3310 | N/A (host service) | No | No | - | ✅ Running | | **AdGuard Home** | 53, 3053 | http://dns.schweitz.internal | LAN (DNS) | No | - | ✅ Running | +| **Tatlock UI** | 8092 | http://192.168.86.149:8092 | LAN (future: home.schweitz.net) | No | - | ✅ Running | ### External Domains (SSL via Let's Encrypt) - **home.schweitz.net** → Organizr (Protected by Authentik SSO) @@ -86,6 +87,7 @@ Services marked "(external)" have source code in separate Gitea repositories. Co | **Scheduler** | [scheduler](https://git.schweitz.net/jpmschweitzer/scheduler) | `git.schweitz.net/jpmschweitzer/scheduler:latest` | | **Core API** | [core-api](https://git.schweitz.net/jpmschweitzer/core-api) | `git.schweitz.net/jpmschweitzer/core-api:latest` | | **Library Desk** | [library-desk](https://git.schweitz.net/jpmschweitzer/library-desk) | `git.schweitz.net/jpmschweitzer/library-desk:latest` | +| **Tatlock UI** | [tatlock-ui](https://git.schweitz.net/jpmschweitzer/tatlock-ui) | `git.schweitz.net/jpmschweitzer/tatlock-ui:latest` | **Development workflow:** Clone repo → make changes → create Gitea release → Watchtower auto-updates container. @@ -373,6 +375,30 @@ Organizr serves as a comprehensive unified dashboard that consolidates all homel --- +### Tatlock UI + +Tatlock UI is a modern Flutter-based home lab dashboard designed to replace Organizr, providing a responsive web interface for monitoring and accessing all infrastructure services. Built as a stateless static web application served via nginx, it offers fast load times and a clean, customizable interface for the tower-of-joy infrastructure. The Flutter web build is compiled and containerized via Gitea Actions, with automatic deployment through Watchtower. + +| Property | Value | +|----------|-------| +| **Image** | `git.schweitz.net/jpmschweitzer/tatlock-ui:latest` | +| **Container Name** | `tatlock-ui` | +| **Access URL (LAN)** | http://192.168.86.149:8092 | +| **Access URL (Public)** | https://home.schweitz.net (future, replacing Organizr) | +| **External Access** | LAN only (future: via NPM reverse proxy with SSL) | +| **Port Mapping** | 8092:80 (HTTP) | +| **Network Mode** | Bridge (docker-dataplane) | +| **Restart Policy** | `unless-stopped` | +| **Volume Mounts** | None (stateless static web app) | +| **Resource Limits** | Memory: 128M limit, 32M reservation | +| **GPU Required** | No | +| **Dependencies** | None (static frontend) | +| **Source Repository** | https://git.schweitz.net/jpmschweitzer/tatlock-ui | +| **Health Check** | `wget -q --spider http://localhost:80/` (30s interval) | +| **Features** | Service dashboard, infrastructure monitoring, responsive design | + +--- + ## Optimization Layer ### Watchtower @@ -659,6 +685,7 @@ Gitea is a lightweight, self-hosted Git service providing repository hosting, is | **Gitea** | https://git.schweitz.net | Yes | Git repository hosting | | **Samba** | \\\\192.168.86.149 | No | Network file shares | | **Home Assistant** | https://housekeeping.schweitz.net | Yes | Smart home automation | +| **Tatlock UI** | http://192.168.86.149:8092 | No (future: Yes) | Home lab dashboard | | **Watchtower** | N/A (background) | N/A | Auto-updates | --- @@ -694,6 +721,7 @@ Gitea is a lightweight, self-hosted Git service providing repository hosting, is | **Gitea** | `~/docker-data/gitea/` | N/A | Data: ~100MB, DB: ~50MB, Repos: variable | | **Samba** | `~/docker-data/samba/` | Mounts: `/mnt/media/` (shares) | Config: ~5MB | | **Home Assistant** | `~/docker-data/home-assistant/config/` | N/A | Config: ~100MB, DB: ~50MB | +| **Tatlock UI** | None (stateless) | N/A | ~0MB (static files in container) | **SSD Usage (docker-data):** ~6-11GB (configs, caches, databases) **HDD Usage (/mnt/media):** ~2.1TB / 3.6TB (58% used) diff --git a/stacks/tatlock-ui.yml b/stacks/tatlock-ui.yml new file mode 100644 index 0000000..7cf6fe7 --- /dev/null +++ b/stacks/tatlock-ui.yml @@ -0,0 +1,44 @@ +version: '3.8' + +# Tatlock UI - Home Lab Dashboard (Flutter Web) +# Port: 8092 (HTTP) +# GPU: No +# External: home.schweitz.net (future, replacing Organizr) +# Storage: None (stateless static web app) +# +# Container image built from: git.schweitz.internal/jpmschweitzer/tatlock-ui +# See CONTAINERS.md for port allocation reference + +services: + tatlock-ui: + image: git.schweitz.internal/jpmschweitzer/tatlock-ui:latest + container_name: tatlock-ui + restart: unless-stopped + ports: + - "8092:80" + networks: + - docker-dataplane + labels: + - "com.centurylinklabs.watchtower.enable=true" + healthcheck: + test: ["CMD-SHELL", "wget -q --spider http://localhost:80/ || exit 1"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 10s + deploy: + resources: + limits: + memory: 128M + reservations: + memory: 32M + +networks: + docker-dataplane: + external: true + name: docker-dataplane + +# Access: +# - Internal: http://tower-of-joy:8092 +# - Mesh VPN: http://10.99.0.1:8092 +# - Future: https://home.schweitz.net (after NPM switch from Organizr)