homelab/nodes/watchtower/compose.yaml
nathan e16f98a183 feat(bootstrap)!: introduce unified bootstrap system with modular libraries
BREAKING CHANGE: day0bootstrap.sh deprecated in favor of bootstrap.sh

- Add scripts/bootstrap.sh (488 lines): Unified entrypoint supporting multiple hardware types (Proxmox/Docker VMs/Pi)
- Create scripts/lib/ modular library system:
  - detection.sh: OS/hardware/container detection (362 lines)
  - fingerprint.sh: System fingerprinting and inventory (494 lines)
  - network.sh: IP configuration and VLAN placement (356 lines)
  - proxmox.sh: PVE post-install automation (453 lines)
  - validation.sh: Comprehensive pre-flight checks (510 lines)
- Add validation tools: validate-node.sh, onboarding.sh, pi_init.sh
- Deprecate scripts/day0bootstrap.sh with graceful redirect wrapper
- Document architecture in scripts/README.md (495 lines) and PROXMOX-COMPARISON.md
- Update SOP-002 with new bootstrap workflow
- Add nodes/watchtower/compose.yaml (Raspberry Pi 5 stack)

Migration: Existing day0bootstrap.sh users automatically redirected to new system after 5-second warning. No manual intervention required.

Ref: Infrastructure automation modernization per active-tasks.md
2026-04-12 22:48:19 -04:00

86 lines
2.5 KiB
YAML

name: node-tools
services:
# 🔒 Local Security Layer for this Node
docker-socket-proxy:
image: tecnativa/docker-socket-proxy:latest
container_name: docker-socket-proxy
userns_mode: "host"
user: "0:0"
security_opt:
- apparmor=unconfined
privileged: true
networks:
- node-net
ports:
- "127.0.0.1:2375:2375" # Expose on localhost for host-mode periphery
group_add:
- "988"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- CONTAINERS=1
- NETWORKS=1
- IMAGES=1
- INFO=1
- POST=1
- ALLOW_START=1
- ALLOW_STOP=1
# Added for Stack Management
- SERVICES=1 # Required for stack/service operations
- TASKS=1 # Required for stack task management
- VOLUMES=1 # Required if stacks use volumes
- CONFIGS=1 # Required for Docker configs
- SECRETS=1 # Required for Docker secrets
# 🦎 Komodo Periphery
periphery:
image: ghcr.io/moghtech/komodo-periphery:2
container_name: komodo-perihery-watchtower
network_mode: host # Use host networking to access external IPs
depends_on:
- docker-socket-proxy
environment:
- DOCKER_HOST=tcp://127.0.0.1:2375 # Access via localhost
- PERIPHERY_CORE_ADDRESS=ws://10.0.0.151:9120
- PERIPHERY_CONNECT_AS=Watchtower
- PERIPHERY_ONBOARDING_KEY=O_VegHtPxiQKrzsAd8MqlrJEs2WLxZ_O
volumes:
- /proc:/proc
- /mnt/appdata/komodo/watchtower/keys:/config/keys
- /mnt/appdata/komodo/watchtower/work:/etc/komodo
# ✅ Added for Stack Deployments
- /mnt/appdata/komodo/watchtower/stacks:/etc/komodo/stacks
# ✅ Added for Git-linked Stacks
- /mnt/appdata/komodo/watchtower/repos:/etc/komodo/repos
# 🔍 Traefik-KOP (Kubernetes Operator for Traefik Discovery)
traefik-kop:
image: ghcr.io/jittering/traefik-kop:0.19.4
container_name: traefik-kop
restart: unless-stopped
depends_on:
- docker-socket-proxy
networks:
- node-net
environment:
- DOCKER_HOST=tcp://docker-socket-proxy:2375
- REDIS_ADDR=10.0.0.151:6379
- BIND_IP=10.0.0.200
- KOP_HOSTNAME=watchtower
# Optional: Enable debug logging
# - VERBOSE=true
# 📜 Dozzle Agent
# dozzle:
# image: amir20/dozzle:latest
# depends_on:
# - docker-socket-proxy
# networks:
# - node-net
# environment:
# - DOCKER_HOST=tcp://docker-socket-proxy:2375
networks:
node-net:
driver: bridge