feat(stack): add Tatlock UI home lab dashboard
Add Flutter-based dashboard to replace Organizr: - Port 8092, stateless static web app via nginx - Resource limits (128M/32M), wget-based healthcheck - Documented in CONTAINERS.md with full service profile 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
+31
-3
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user