Zarządzanie flotą 6 kiosków (Raspberry Pi) w centrum handlowym.
┌─────────────────────────────────────────────────────┐
│ Centrum Handlowe "Galaxy" │
│ │
│ 🖥 kiosk-lobby 192.168.1.10 (wejście) │
│ 🖥 kiosk-cafe 192.168.1.11 (kawiarnia) │
│ 🖥 kiosk-entrance-north 192.168.1.12 (północ) │
│ 🖥 kiosk-entrance-south 192.168.1.13 (południe) │
│ 🖥 kiosk-food-court 192.168.1.14 (food court) │
│ 🖥 kiosk-parking 192.168.1.15 (parking) │
└─────────────────────────────────────────────────────┘
Każdy RPi uruchamia aplikację kiosk w kontenerze Podman.
fleet-rpi/
├── Taskfile.yml # Flota: 6 RPi + 3 grupy + taski
├── Dockerfile # Aplikacja kiosk (ARM64)
├── docker-compose.yml # Lokalne dev
└── README.md
| Grupa | Urządzenia | Strategia | Opis |
|---|---|---|---|
all-kiosks |
6 szt. | rolling (max 2) | Bezpieczna aktualizacja |
entrances |
2 szt. | parallel | Wejścia — szybka zmiana |
high-traffic |
3 szt. | canary (1 test) | Popularne — najpierw 1, potem reszta |
# Status wszystkich urządzeń (temp, RAM, dysk, uptime)
taskfile fleet status
# Status tylko kiosków przy wejściach
taskfile fleet status --group entrances
# Lista urządzeń i grup
taskfile fleet list
# Build obrazu ARM64 + push
taskfile run build push --var TAG=v2.1.0
# Deploy na WSZYSTKIE kioski (rolling, 2 naraz)
taskfile -G all-kiosks run deploy-kiosk --var TAG=v2.1.0
# Deploy tylko na wejścia (parallel)
taskfile -G entrances run deploy-kiosk --var TAG=v2.1.0
# Deploy canary — najpierw 1 kiosk, potem reszta
taskfile -G high-traffic run deploy-kiosk --var TAG=v2.1.0
# Deploy na jeden konkretny kiosk
taskfile --env kiosk-lobby run deploy-kiosk --var TAG=v2.1.0
# 8-punktowa diagnostyka (ping, SSH, dysk, RAM, temp, podman, NTP)
taskfile fleet repair kiosk-lobby
# Automatyczna naprawa bez pytań
taskfile fleet repair kiosk-lobby --auto-fix
# Logi z konkretnego kiosku
taskfile --env kiosk-cafe run kiosk-logs
# Info o urządzeniu
taskfile --env kiosk-parking run kiosk-info
# Czyszczenie nieużywanych obrazów (oszczędność karty SD)
taskfile -G all-kiosks run cleanup
# Aktualizacja systemu
taskfile -G all-kiosks run update-os
# Restart konkretnego kiosku
taskfile --env kiosk-food-court run restart-kiosk
# Reboot urządzenia
taskfile --env kiosk-parking run reboot-device
# Pierwsza konfiguracja — instaluje Podman, włącza linger
taskfile --env kiosk-parking run provision
# Potem deploy
taskfile --env kiosk-parking run deploy-kiosk --var TAG=v2.1.0
environment_defaults eliminuje duplikację# Wspólne ustawienia dla wszystkich RPi
environment_defaults:
ssh_user: pi
ssh_key: ~/.ssh/fleet_ed25519
container_runtime: podman
variables:
KIOSK_DISPLAY: ":0"
# Każdy RPi definiuje tylko to, co unikalne
environments:
kiosk-lobby:
ssh_host: 192.168.1.10
variables: { KIOSK_ID: lobby }
environment_groups:
all-kiosks:
members: [kiosk-lobby, kiosk-cafe, ...]
strategy: rolling
max_parallel: 2
-G uruchamia task na całej grupietaskfile -G all-kiosks run deploy-kiosk
# → batch 1: kiosk-lobby + kiosk-cafe
# → batch 2: kiosk-entrance-north + kiosk-entrance-south
# → batch 3: kiosk-food-court + kiosk-parking
ssh-copy-id pi@192.168.1.10)taskfile --env <name> run provision)