home
Automatyczny deploy usług w Portainer: Stacki Docker Compose, zmienne środowiskowe oraz integracja z repozytorium Git.
Spis treści:
Jeśli masz już za sobą pierwsze uruchomienie i utworzenie konta administratora — świetnie, możesz iść dalej. Jeżeli nie, zacznij od wejścia pod adres:
https://<<TWOJE IP SERVERA>>:9433
Na ekranie zobaczysz formularz tworzenia konta administratora.

Podaj nazwę użytkownika (np. admin) i ustaw silne hasło. To dobry moment, żeby zadbać o bezpieczeństwo — nawet jeśli to środowisko domowe i działa tylko w sieci lokalnej.
Nawyki wyniesione z początku konfiguracji zostają na długo, a Portainer to centrum zarządzania całą infrastrukturą — warto więc od razu traktować go jak narzędzie produkcyjne, a nie „tymczasowy panel”.
Klikamy „Get Started”.
Po chwili zostaniesz przekierowany do sekcji Environments i zobaczysz mniej więcej taki widok:

Sekcja Environments to lista środowisk, którymi zarządza Portainer. W praktyce są to instancje Dockera, do których Portainer ma dostęp.
Dla świeżej instalacji powinieneś zobaczyć jedno środowisko, zwykle z nazwą:
Na start warto uporządkować nazewnictwo.
Zamiast domyślnego localhost zmień nazwę środowiska np. na:
serv-prod-1
(lub cokolwiek, co będzie dla Ciebie czytelne).

Zmień nazwę i kliknij Update environment.
Od razu robi się czytelniej — i to nie tylko wizualnie. Dlaczego to ma sens? Portainer możesz traktować jak centralny panel zarządzania infrastrukturą. Dzisiaj masz jeden serwer. Jutro możesz dodać kolejny — np.:
Wystarczy wtedy dodać nowe środowisko do Portainer za pomocą portainer-agent i od tego momentu będziesz w stanie zarządzasz wieloma serwerami z jednego miejsca.
To właśnie jest cel tej konfiguracji:
Spis treści:
Zanim przejdziemy do dalej, jedna ważna rzecz.
Zrzuty ekranu, które zobaczysz w tej sekcji, pochodzą z mojej prawdziwej instalacji. Celowo nie budowałem tu „sztucznego” środowiska tylko na potrzeby tutoriala.
Dlaczego?
Bo już na tym etapie chcę, żebyś zobaczył:
Pod każdą sekcją postaram się też krótko wyjaśnić dlaczego zrobiłem coś właśnie w taki sposób — nie tylko co kliknąć, ale po co. Dzięki temu łatwiej będzie Ci później budować własne środowisko, a nie tylko odtwarzać kroki z instrukcji.
No to… możemy zaczynać ;)
Aby przejść do dashboardu, kliknij w panel środowiska. Zobaczysz ekran z kilkoma przydatnymi kafelkami podsumowującymi jego stan:

Najważniejsze sekcje to:
Przejdźmy przez nie po kolei.
Stacks to sposób na zarządzanie grupą powiązanych usług jako jedną całością. Najczęściej są to pliki docker-compose.yml, które Portainer uruchamia i kontroluje jako jeden „pakiet”.

Stack to nie tylko „worek kontenerów”, ale pełnoprawne środowisko:
Dzięki stackom:
Jak możesz zauważyć na screenie, mam kilka stacków. Wygląda to mniej więcej tak:
To są osobne stacki, ale wszystkie są spięte jedną wspólną siecią: proxy.
Dlaczego rozdzielone, a jednak połączone?
Bo to daje najlepsze z obu światów.
Izolacja. Każdy stack to osobna jednostka zarządzania,
Czyli: zero efektu domina.
Wspólna komunikacja. Dzięki jednej sieci proxy, wszystkie stacki nadal mogą się widzieć, a usługi komunikują się po nazwach kontenerów, nie trzeba wystawiać wszystkiego na porty hosta. Mam więc separację odpowiedzialności, kontrolę nad restartami, i jednocześnie spójny ekosystem usług.
W praktyce oznacza to tyle że każdy komponent żyje swoim życiem, ale cały system działa jak jedna, dobrze zsynchronizowana infrastruktura. I dokładnie o to chodzi w sensownym projektowaniu środowiska pod Home Assistant.
Od góry możesz zobaczyć sekcje gdzie możesz pobrać obrazy Dockera.

Po kliknięciu w Search zostaniesz przekierowany na oficjalną stronę Docker Hub.
Tam możesz:
Jeśli chcesz pobrać obraz MariaDB w wersji 12.1.2, wpisz:
mariadb:12.1.2
i kliknij Pull the image — Portainer pobierze dokładnie tę wersję.
Nie wszystkie obrazy są na Docker Hubie. Część projektów (np. Home Assistant) trzyma obrazy w GitHub Container Registry (ghcr).
Wtedy wystarczy:
Advanced mode.ghcr.io/home-assistant/home-assistant:latest
Kliknąć Pull the image — i gotowe.
GUI do pullowania obrazów jest fajne na start, do testów albo szybkiego sprawdzenia czegoś nowego. W produkcji lepiej, żeby obrazy pojawiały się same — jako efekt deploy-u, a nie ręcznego klikania. Dokładnie do tego zmierzamy w kolejnych krokach
Sekcja Images pokazuje wszystkie obrazy Dockera, które zostały pobrane na serwer.

Tabela zawiera informacje o:
Obrazy, które nie są używane przez żaden kontener, będą oznaczone jako Unused.
Takie obrazy możesz bezpiecznie usuwać — to dobry sposób na odzyskanie miejsca na dysku i utrzymanie porządku w
systemie.
Networks to wewnętrzne sieci Dockera, które łączą kontenery ze sobą.

Możesz mieć:
Dzięki sieciom:
W dobrze poukładanej infrastrukturze sieci są tak samo ważne jak same kontenery.
Volumes to trwała przestrzeń na dane.

Najprościej mówiąc: to katalogi na dysku, w których kontenery zapisują wszystko, co ma przetrwać restart:
Bez volumes każdy restart kontenera oznaczałby utratę danych. Z nimi system działa jak „dorosła” infrastruktura, a nie jednorazowe środowisko testowe.
Ale...
W modelu, którego będziemy używać w tym projekcie, nie korzystamy z wolumenów zarządzanych przez Dockera z poziomu Portainer. Dlatego w zakładce Volumes często… nie zobaczysz nic istotnego.
I to jest celowe.
Całe trwałe dane będziemy montować w kontenerach jako bind mounts — czyli:
Dzięki temu:
W skrócie: kontenery są tymczasowe, dane są trwałe — i właśnie tak powinna wyglądać zdrowa infrastruktura.
I wreszcie najczęściej używana sekcja — Containers.

To tutaj:
W praktyce to Twoje centrum operacyjne: jeśli coś nie działa — zaczynasz właśnie tutaj.
Jak możesz zauważyć na screenie, przy kontenerze Portainer (u Ciebie pewnie też tak jest) nie ma możliwości jego zaznaczenia ani zarządzania nim z poziomu GUI. Dlaczego nie możesz zarządzać kontenerem Portainer?
Bo Portainer został uruchomiony bezpośrednio przez docker run, a nie jako stack zarządzany przez samego siebie. Żeby Portainer mógł w pełni zarządzać kontenerami, muszą one zostać utworzone przez Portainera (np. jako stack, container lub service).
Czy to dobrze czy źle?
Trochę jedno i drugie:
W praktyce to jednak najczęściej spotykany i bezpieczny model uruchamiania Portainera.
Co dokładnie widzisz na liście kontenerów?
Na górze masz ikony akcji — większość z nich jest intuicyjna, dlatego nie będziemy ich tu szczegółowo omawiać.
Wyjątkiem jest Add container — do tego wrócimy w osobnym wpisie, bo w naszej architekturze raczej nie będziemy z tego korzystać (stawiamy na stacki i GitOps).
Niżej widzisz tabelę z kontenerami. Każda kolumna ma konkretne znaczenie:
Name – nazwa kontenera
State – aktualny stan (running, stopped, unhealthy itd.)
Quick Actions – szybki dostęp do:
Stack – nazwa stacka, do którego należy kontener
Image – obraz Dockera, z którego został utworzony
Created – data utworzenia kontenera
IP address – adres IP kontenera w sieci Dockera
Published ports – mapowanie portów:
Ten widok to miejsce, do którego będziesz wracał najczęściej: przy debugowaniu, aktualizacjach, restartach i każdej awarii. Warto dobrze go znać — to Twoje centrum dowodzenia infrastrukturą
Zakładka Templates to galeria gotowych szablonów aplikacji, które możesz uruchomić w Portainerze jednym kliknięciem.
W praktyce są to predefiniowane konfiguracje kontenerów dla popularnych usług, takich jak:
Do czego to się przydaje?
Templates są świetne, gdy:
Ale…
W dłuższej perspektywie warto traktować templates raczej jako:
Dlaczego?
W moim setupie templates wykorzystuję głównie:
Zakładka Host dotyczy bezpośrednio serwera, na którym działa Docker. To tutaj sprawdzisz nie tylko kontenery, ale samą maszynę, na której wszystko się kręci.
W tej sekcji znajdziesz szybki podgląd stanu hosta:
To bardzo przydatne miejsce, gdy:
Tutaj zarządzasz funkcjami samego Dockera z poziomu Portainera.
W zależności od konfiguracji możesz m.in.:
To nie jest sekcja, do której zagląda się codziennie — ale warto wiedzieć, że istnieje, gdy zaczynasz:
Registries to miejsca, z których Docker pobiera obrazy.
Domyślnie korzystasz z Docker Hub.
Po kliknięciu Add registry zostaniesz przeniesiony do kreatora konfiguracji nowego rejestr:

Możesz tu skonfigurować:
Po co to w ogóle robić?
W praktyce: to krok w stronę bardziej profesjonalnej infrastruktury, nawet jeśli cały setup działa tylko w domu.
Sekcja Administration to miejsce, w którym nie zarządzasz już kontenerami, ale samym Portainerem jako platformą.
Tutaj ustawiasz:
Krótko mówiąc: to panel sterowania całym systemem zarządzania Dockerem.
Users
Lista wszystkich użytkowników Portainera.
Tutaj możesz:
To pierwszy krok, jeśli Portainer ma być czymś więcej niż tylko panelem dla jednej osoby.
Teams
Zespoły użytkowników.
Zamiast nadawać uprawnienia każdej osobie osobno, tworzysz team i przypisujesz do niego użytkowników.
Przykład:
Potem jednym ruchem nadajesz dostęp całemu zespołowi do wybranych środowisk.
Roles
Role definiują co użytkownik może robić, a nie tylko gdzie ma dostęp.
Możesz tu określić:
niestety Business Feature
Environments
Lista wszystkich środowisk Dockera, którymi zarządza Portainer.
To mogą być:
Każde środowisko to osobny „świat”, ale zarządzany z jednego miejsca.
Groups
Grupy środowisk.
Jeśli masz:
to zamiast nadawać uprawnienia osobno do każdego środowiska, robisz to na poziomie grupy.
Bardzo przydatne przy większej infrastrukturze.
Tags
Tagi to sposób na logiczne oznaczanie środowisk.
Np:
Nie wpływają bezpośrednio na uprawnienia, ale bardzo ułatwiają orientację, gdy środowisk zaczyna przybywać.
Tutaj konfigurujesz rejestry obrazów Docker:
Dzięki temu Portainer może:
To kluczowa sekcja, jeśli pracujesz z CI/CD i prywatnymi obrazami.
Authentication
Logi związane z logowaniem:
Podstawa przy kontroli bezpieczeństwa.
niestety Business Feature
Activity
Dziennik aktywności w Portainerze.
Zobaczysz tu:
To Twój audit log — bardzo ważny, gdy z Portainer korzysta więcej niż jedna osoba.
niestety Business Feature
Wszystkie powiadomienia z Portainer, np.: Container successfully restarted.
General
Podstawowe ustawienia Portainer:
Authentication
W tym miejscu ustawisz:
Edge Compute
Sekcja Edge Compute służy do zarządzania zdalnymi hostami, które:
W typowym homelabie raczej jej nie użyjesz, ale warto wiedzieć co tu się dzieje, bo to potężna funkcjonalność.