Zautomatyzowane wdrożenia Docker na Raspberry Pi: Środowiska deweloperskie Local-First
Część 3 z 3 serii Homelab na Raspberry Pi
Spis treści
Utrzymanie własnych usług — takich jak Home Assistant, Node-RED czy lokalne środowiska śledzenia analitycznego — na platformie Raspberry Pi w klasycznym modelu często wymaga ręcznych aktualizacji oprogramowania oraz doraźnych modyfikacji konfiguracji. Podejście to pochłania znaczny czas administracyjny i generuje ryzyko operacyjne, w tym rozbieżności konfiguracyjne (configuration drift), konflikty zależności oraz nieoczekiwane przestoje.
W celu stworzenia niezawodnej, deterministycznej infrastruktury lokalnej warstwa usług musi zostać ściśle odseparowana od systemu operacyjnego hosta. Pełna konteneryzacja środowiska Smart Home oraz narzędzi analitycznych za pomocą Docker Compose w połączeniu ze zautomatyzowanymi potokami wdrożeniowymi — przy użyciu lokalnego mechanizmu Watchtower lub struktur CI/CD w GitHub Actions — gwarantuje w pełni powtarzalne środowiska brzegowe o zerowym czasie niedostępności.
1. Konteneryzacja środowiska brzegowego za pomocą Docker Compose
Docker Compose stanowi deklaratywną podstawę nowoczesnych architektur Local-First. Zdefiniowanie wszystkich usług, wolumenów trwałych oraz wirtualnych mostków sieciowych w jednym pliku konfiguracyjnym objętym kontrolą wersji zapewnia całkowitą powtarzalność stanu infrastruktury.
# docker-compose.yml: Zintegrowany stos Smart Home i analityki lokalnej
services:
homeassistant:
container_name: homeassistant
image: ghcr.io/home-assistant/home-assistant:stable
volumes:
- /opt/homeassistant/config:/config
- /etc/localtime:/etc/localtime:ro
restart: unless-stopped
network_mode: host
nodered:
container_name: nodered
image: nodered/node-red:latest
environment:
- TZ=Europe/Warsaw
volumes:
- /opt/nodered/data:/data
ports:
- "1880:1880"
restart: unless-stopped
watchtower:
container_name: watchtower
image: containrrr/watchtower:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE=0 0 4 * * *
restart: unless-stopped
Uwaga dotycząca stanu utrzymania: pierwotny projekt containrrr/watchtower został zarchiwizowany 17 grudnia 2025 roku i od tego czasu pozostaje w trybie tylko do odczytu, przez co obraz nie otrzymuje kolejnych aktualizacji ani poprawek bezpieczeństwa. Pierwotni opiekunowie nie wskazali oficjalnego następcy. Dalszy rozwój odbywa się w forkach społecznościowych — nickfedor/watchtower (publikowany również jako ghcr.io/nicholas-fedor/watchtower) zachowuje zgodność konfiguracyjną i nadal ukazuje się w regularnych wydaniach. Przed zastosowaniem produkcyjnym warto zatem zweryfikować ścieżkę aktualizacji tej usługi.
W przedstawionej architekturze katalogi z danymi trwałymi znajdują się na zewnętrznej, bezpiecznej przestrzeni dyskowej (np. udziale NAS lub dysku SSD), dzięki czemu aktualizacje kontenerów nigdy nie nadpisują krytycznych konfiguracji ani zebranych danych historycznych.
2. Automatyzacja utrzymania: Watchtower a potoki CI/CD
Automatyzacja procesów wdrożeniowych oraz zarządzania cyklem życia oprogramowania może być realizowana w oparciu o dwa główne wzorce architektoniczne, w zależności od złożoności systemu i wymagań governance:
| Wzorzec wdrożeniowy | Mechanizm wykonawczy | Optymalne zastosowanie | Kluczowa zaleta |
|---|---|---|---|
| Automatyzacja lokalna (Watchtower) | Usługa w tle codziennie weryfikuje rejestry obrazów i automatycznie restartuje zaktualizowane kontenery. | Standardowe, gotowe obrazy (Home Assistant, Node-RED, Eclipse Mosquitto). | Brak konieczności utrzymywania infrastruktury zewnętrznej; w pełni autonomiczna praca. |
| GitOps / CI/CD (GitHub Actions) | Zmiany w kodzie inicjują zdalne potoki wdrożeniowe, które łączą się przez SSH z Raspberry Pi. | Własne aplikacje, dedykowane narzędzia analityczne lub infrastruktury rozproszone. | Pełna kontrola wersji, automatyczne testy przed wdrożeniem i szybkie wycofywanie zmian. |
3. Implementacja potoku wdrożeniowego w GitHub Actions
W przypadku autorskich aplikacji brzegowych lub strukturalnych repozytoriów Infrastructure-as-Code (IaC), wdrożenie przy użyciu GitHub Actions zapewnia pełną historię audytową każdej zmiany konfiguracyjnej. Po opublikowaniu zmian w gałęzi głównej, zautomatyzowany przepływ pracy łączy się bezpiecznie przez SSH z Raspberry Pi, pobiera aktualizacje i przebudowuje stos kontenerów.
# .github/workflows/deploy-edge.yml
name: Deploy Stack to Raspberry Pi
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Execute Remote Deployment via SSH
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.RPI_HOST }}
username: ${{ secrets.RPI_USER }}
key: ${{ secrets.RPI_SSH_KEY }}
script: |
cd /opt/edge-stack
git pull origin main
docker compose pull
docker compose up -d --remove-orphans
docker system prune -f
Podsumowanie
Przekształcenie Raspberry Pi z ręcznie konfigurowanego komputera jednopłytkowego w zautomatyzowany, skonteneryzowany serwer brzegowy redukuje narzut administracyjny do minimum. Zarówno autonomiczne aktualizacje realizowane przez Watchtower, jak i deterministyczne wdrożenia GitOps w GitHub Actions gwarantują stabilne, bezpieczne i niewymagające stałego nadzoru środowisko operacyjne dla systemów Smart Home oraz infrastruktury analitycznej.
Homelab na Raspberry Pi
- Przyspiesz swoje Raspberry Pi 4 i 5: Jak uruchomić system z dysku SSD
- Zasilanie awaryjne (UPS) dla Raspberry Pi 4 i 5: Top 5 urządzeń do wymagających projektów
- Zautomatyzowane wdrożenia Docker na Raspberry Pi: Środowiska deweloperskie Local-First