home
Automatyczny deploy usług w Portainer: Stacki Docker Compose, zmienne środowiskowe oraz integracja z repozytorium Git.
Przejdz przez wstępną konfiguracje HomeAssistant
Spis treści
Ten wpis pokazuje, jak uruchomić Home Assistanta w środowisku produkcyjnym — stabilnie, bezpiecznie i w sposób, który nie rozpadnie się przy pierwszym restarcie serwera.
Nie będzie tu „magii”. Będzie porządna baza, na której dalej zbudujesz całą automatykę.
Co będzie potrzebne?
Do uruchomienia Home Assistanta w wersji produkcyjnej potrzebujesz tylko trzech rzeczy:
To wszystko. Reszta to już konsekwencja dobrego startu.
Jeśli przeszedłeś przez wpis Dobra struktura katalogów pod usługi — jesteś w domu.
Jeśli nie — wystarczy, że utworzysz katalog na dane Home Assistant. W moim setupie to:
/opt/homeassistant
Jeśli go nie masz:
sudo mkdir /opt/homeassistant
To będzie jedno źródło prawdy dla:
W katalogu PROD(lokalnie na komputerze) utwórz plik:
home-automation.yml
i wklej:
services:
homeassistant:
image: "ghcr.io/home-assistant/home-assistant:2025.12"
container_name: homeassistant
restart: always
environment:
- "TZ=${TZ}"
volumes:
- "${HOMEASSISTANT_DATA}/config:/config"
- "/etc/localtime:/etc/localtime:ro"
privileged: true
network_mode: host
healthcheck:
test: "curl --fail http://localhost:8123/ || exit 1"
interval: 15s
timeout: 10s
retries: 3
Tak — konfiguracja jest inna niż w wersji DEV. I bardzo dobrze. DEV służy do testów, PROD ma być nudne i stabilne.
services - Lista usług w stacku.
Tu mamy jedną — Home Assistant.
image
image: "ghcr.io/home-assistant/home-assistant:2025.12"
Dlaczego nie używamy latest?
W środowisku produkcyjnym kluczowa jest powtarzalność i przewidywalność. Dlatego zamiast latest używamy konkretnego tagu wersji.
Co oznacza tag 2025.12?
Tag 2025.12 oznacza:
Masz poprawki błędów z danego wydania, ale nie łapiesz zmian, które mogą wprowadzić regresje.
Moja strategia aktualizacji
Aktualizuję Home Assistanta raz w miesiącu i trzymam się zasady:
Dzięki temu mam już poprawione bugi, omijam problemy świeżych wydań oraz aktualizacja jest świadomą decyzją, a nie przypadkiem.
Tip Przy pierwszym uruchomieniu ustaw tag na wydanie sprzed 2 miesięcy. W sekcji z testami przejdziesz cały proces aktualizacji.
restart: always
Kontener:
Produkcja nie pyta „czy chcesz wrócić?”. Produkcja ma wracać sama.
environment
- "TZ=${TZ}"
Strefa czasowa przekazywana z Portainera.
Dzięki temu:
volumes
"${HOMEASSISTANT_DATA}/config:/config"
Tu dzieje się magia trwałości.
To oznacza:
=
Bez zmiennej wyglądałoby to tak:
/opt/homeassistant/config:/config
Dlaczego zmienne są lepsze?
Drugi mount:
"/etc/localtime:/etc/localtime:ro"
Synchronizacja czasu z hostem — tylko do odczytu (ro).
privileged: true
W produkcji Home Assistant często:
Tryb privileged daje mu dostęp do tych zasobów bez kombinowania z uprawnieniami.
network_mode: host
To kluczowy element.
Dzięki temu:
Krótko:
W automatyce domowej to ogromna różnica.
healthcheck
healthcheck:
test: "curl --fail http://localhost:8123/ || exit 1"
interval: 15s
timeout: 10s
retries: 3
To mechanizm, który pozwala Portainerowi ocenić:
czy Home Assistant naprawdę działa, a nie tylko „jest uruchomiony”.
Jak to działa?
To mały detal, ale w produkcji robi ogromną różnicę.
W Portainerze:
1 Dodaj nowy stack.
2 Nazwij go np.:
home_automation
3 Wskaż plik z repo (PROD/home-automation.yml).
4 Ustaw zmienne środowiskowe:
lub podczas dodawania zmiennych kliknij Advanced mode i wklej
HOMEASSISTANT_DATA=/opt/homeassistant
TZ=Europe/Warsaw
5 Kliknij Deploy the stack.
Portainer => containers

Weryfikacja w przeglądarce:
http://IP_SERWERA:8123

Jeśli zobaczysz ekran powitalny Home Assistanta — właśnie uruchomiłeś produkcyjne środowisko automatyki domowej
To idealny moment, żeby:
Dlaczego właśnie teraz? Bo w tym momencie Home Assistant zaczyna zapisywać dane w katalogu na serwerze — a my chcemy mieć 100% pewności, że wszystko trafia tam, gdzie powinno.
Wejdź na serwer i wykonaj:
ls -al /opt/homeassistant/config
Powinieneś zobaczyć zawartość katalogu config, w którym Home Assistant zapisuje m.in.: konfigurację
jeśli katalog jest pusty:
HOMEASSISTANT_DATA upewnij się, że nie ma literówki w zmiennejMożesz też szybko zweryfikować, czy dane nie zapisały się gdzieś indziej:
ls -la /opt/
Jeśli zobaczysz więcej niż jeden katalog typu homeassistant — to znak, że gdzieś po drodze wkradł się błąd w ścieżce.
Opcja 1 — najszybsza (gdy system jest świeży) UTRATA DANYCH
Jeśli masz tylko utworzone konto użytkownika i nic więcej nie skonfigurowałeś:
1 Popraw zmienną HOMEASSISTANT_DATA w stacku Portainera.
2 Zrestartuj kontener:
Gotowe — kontener zapisze dane już w poprawnej lokalizacji.
Opcja 2 — poprawna technicznie (porządkujemy dane)
Jeśli chcesz mieć porządek i przenieść dane do właściwego katalogu:
1 Zatrzymaj kontener Home Assistanta w Portainerze.
2 Na serwerze sprawdź, gdzie faktycznie są dane, np.:
ls -la /opt
3 Jeśli dane są w złym katalogu, zmień jego nazwę na poprawną:
sudo mv /opt/homeassistant_wrong /opt/homeassistant
(zamień homeassistant_wrong na rzeczywistą nazwę błędnego katalogu)
4 W stacku Portainera popraw zmienną:
HOMEASSISTANT_DATA=/opt/homeassistant
5 Uruchom ponownie kontener.
Od tego momentu Home Assistant będzie korzystał z właściwej lokalizacji danych.
Skoro masz już utworzonego użytkownika — czas na test, który najlepiej pokazuje sens używania volume.
Krok 1 — usuń kontener
Tak, naprawdę 😄
1 Wejdź w zakładkę Containers w Portainer.
2 Zaznacz kontener homeassistant.
3 Kliknij Remove.
Nie martw się — danych nie usuwasz, bo one żyją poza kontenerem.
Krok 2 — redeploy stacka
1 Przejdź do Stacks.
2 Wybierz home_automation.
3 Kliknij Pull and redeploy.

4 Gdy pojawi się okno potwierdzenia:
Update,Re-pull image and redeploy.Po chwili kontener uruchomi się ponownie i wróci do zakładki Containers.
1 Otwórz plik compose w edytorze (np. VS Code).
2 Zmień tag obrazu:
2025.12 => 2026.1 - nowy tag to obecny miesiąc -1 dla bezpieczeństwa
3 Zapisz zmiany i wypchnij je do repozytorium.
4 Poczekaj chwilę — maksymalnie tyle, ile ustawiłeś w Portainer w opcji GitOps updates (u nas: do 5 minut) + czas na pobranie nowego obrazu.
5 Resztę zrobi Portainer automatycznie:
Czas niedostępności usługi to tylko czas startu Home Assistanta — czyli dokładnie tyle, ile trwa uruchomienie kontenera.
Masz teraz:
fundament pod:
Od tego momentu Home Assistant nie jest już „projektem”. Jest pełnoprawną usługą w Twojej infrastrukturze.
Właśnie w taki sposób będziemy dodawać kolejne klocki do systemu:
1 definiujesz usługę w pliku compose,
2 wypychasz zmiany do repozytorium,
3 Portainer automatycznie wykonuje redeploy stacka.
I nie zawsze będzie to oznaczało tworzenie nowego stacka. W tym samym pliku home_automation możesz jako kolejną usługę dodać np.:
Jedno commit → push → automatyczny redeploy i infrastruktura rozszerza się sama — bez klikania w UI.
Dobrze przygotowane stacki dają Ci:
I dokładnie tak powinno wyglądać środowisko produkcyjne — a nie tylko testowa zabawka uruchomiona „na chwilę”.