{"id":529,"date":"2026-10-05T18:35:00","date_gmt":"2026-10-05T16:35:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/?page_id=529"},"modified":"2026-09-25T10:49:12","modified_gmt":"2026-09-25T08:49:12","slug":"autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/","title":{"rendered":"Autonomiczny serwer domowy Docker-Compose z Traefik, SSL i Watchtower"},"content":{"rendered":"<h2>Przegl\u0105d architektury: Projekt autonomicznego serwera domowego na Raspberry Pi<\/h2>\n<p>Wdro\u017cenie samodzielnie hostowanego laboratorium domowego na platformie Raspberry Pi wymaga zastosowania odpornej na awarie i bezobs\u0142ugowej architektury orkiestracji. Udost\u0119pnianie wewn\u0119trznych kontener\u00f3w Docker w sieci lokalnej lub publicznej bez centralnego terminowania ruchu SSL\/TLS podnosi stopie\u0144 skomplikowania administracji i rodzi powa\u017cne zagro\u017cenia bezpiecze\u0144stwa. R\u0119czne odnawianie certyfikat\u00f3w, statyczna konfiguracja serwer\u00f3w proxy oraz manualne aktualizacje kontener\u00f3w nieuchronnie prowadz\u0105 do przerw w \u015bwiadczeniu us\u0142ug i wygasania certyfikat\u00f3w kryptograficznych.<\/p>\n<p>Autonomiczna architektura serwera domowego \u0142\u0105czy trzy kluczowe technologie w ramach jednego deklaratywnego stosu Docker Compose: <strong>Traefik v3<\/strong> dzia\u0142a jako dynamiczny router brzegowy, kt\u00f3ry monitoruje gniazdo systemu Docker i kieruje przychodz\u0105cy ruch HTTP\/HTTPS na podstawie etykiet kontener\u00f3w. Integracja z <strong>Let&#8217;s Encrypt ACME<\/strong> automatyzuje generowanie oraz odnawianie certyfikat\u00f3w SSL za pomoc\u0105 weryfikacji HTTP-01 lub DNS-01; natomiast <strong>Watchtower<\/strong> zapewnia automatyczne zarz\u0105dzanie cyklem \u017cycia aplikacji poprzez regularne sprawdzanie rejestr\u00f3w obraz\u00f3w i bezkolizyjne aktualizowanie kontener\u00f3w bez interwencji manualnej.<\/p>\n<figure class=\"lw-diagram\">\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/traefik-docker-serwer-domowy-pl.png\" width=\"1120\" height=\"560\" alt=\"\u015acie\u017cka \u017c\u0105dania z internetu przez edge router Traefik do kontener\u00f3w w sieci proxy, z Let&apos;s Encrypt i Watchtowerem\"><figcaption>\u015acie\u017cka \u017c\u0105dania na serwerze domowym: Traefik terminuje TLS na porcie 443, sam odnawia certyfikat Let&#8217;s Encrypt i znajduje cele routingu wy\u0142\u0105cznie przez etykiety Dockera. Watchtower w tle utrzymuje aktualne obrazy.<\/figcaption><\/figure>\n<h2>Instrukcja wdro\u017cenia krok po kroku<\/h2>\n<h3>Krok 1: Przygotowanie systemu i architektura systemu plik\u00f3w<\/h3>\n<p>W celu zapewnienia trwa\u0142o\u015bci danych oraz czystego podzia\u0142u r\u00f3l na hostuj\u0105cym urz\u0105dzeniu Raspberry Pi, konieczne jest utworzenie standardowej struktury katalog\u00f3w w \u015bcie\u017cce <code>\/opt\/containers\/<\/code>:<\/p>\n<pre><code>mkdir -p \/opt\/containers\/traefik\/data\nmkdir -p \/opt\/containers\/watchtower\ntouch \/opt\/containers\/traefik\/data\/acme.json\nchmod 600 \/opt\/containers\/traefik\/data\/acme.json<\/code><\/pre>\n<p><em>Krytyczna uwaga dotycz\u0105ca bezpiecze\u0144stwa:<\/em> Plik <code>acme.json<\/code>, w kt\u00f3rym przechowywane s\u0105 prywatne klucze kryptograficzne Let&#8217;s Encrypt, musi posiada\u0107 uprawnienia ograniczone rygorystycznie do warto\u015bci <code>600<\/code>. Us\u0142uga Traefik odm\u00f3wi uruchomienia, je\u015bli prawa odczytu i zapisu b\u0119d\u0105 zbyt szerokie.<\/p>\n<h3>Krok 2: Projektowanie dynamicznego routera brzegowego Traefik v3<\/h3>\n<p>Infrastruktura routingu definiowana jest w pliku <code>docker-compose.yml<\/code> zlokalizowanym w katalogu <code>\/opt\/containers\/traefik\/<\/code>. Konfiguracja ta okre\u015bla punkty wej\u015bciowe dla portu 80 (HTTP) z obowi\u0105zkowym przekierowaniem na port 443 (HTTPS), aktywuje automatyczn\u0105 weryfikacj\u0119 Let&#8217;s Encrypt HTTP-01 oraz zamieszcza gniazdo uniksowe Dockera w trybie tylko do odczytu:<\/p>\n<pre><code>services:\n  traefik:\n    image: traefik:v3.1\n    container_name: traefik\n    restart: unless-stopped\n    security_opt:\n      - no-new-privileges:true\n    networks:\n      - proxy\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n    command:\n      - \"--api.dashboard=true\"\n      - \"--providers.docker=true\"\n      - \"--providers.docker.exposedbydefault=false\"\n      - \"--providers.docker.network=proxy\"\n      - \"--entrypoints.web.address=:80\"\n      - \"--entrypoints.web.http.redirections.entryPoint.to=websecure\"\n      - \"--entrypoints.web.http.redirections.entryPoint.scheme=https\"\n      - \"--entrypoints.websecure.address=:443\"\n      - \"--certificatesresolvers.myresolver.acme.httpchallenge=true\"\n      - \"--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web\"\n      - \"--certificatesresolvers.myresolver.acme.email=admin@lukaswojcik.com\"\n      - \"--certificatesresolvers.myresolver.acme.storage=\/data\/acme.json\"\n    volumes:\n      - \"\/var\/run\/docker.sock:\/var\/run\/docker.sock:ro\"\n      - \"\/opt\/containers\/traefik\/data:\/data\"\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.dashboard.rule=Host(`proxy.lukaswojcik.com`)\"\n      - \"traefik.http.routers.dashboard.service=api@internal\"\n      - \"traefik.http.routers.dashboard.entrypoints=websecure\"\n      - \"traefik.http.routers.dashboard.tls.certresolver=myresolver\"\n      - \"traefik.http.routers.dashboard.middlewares=dashboard-ip\"\n      - \"traefik.http.middlewares.dashboard-ip.ipallowlist.sourcerange=192.168.0.0\/16, 10.0.0.0\/8\"\n\nnetworks:\n  proxy:\n    external: true<\/code><\/pre>\n<h3>Krok 3: Tworzenie zewn\u0119trznej sieci Docker Proxy<\/h3>\n<p>Przed uruchomieniem stosu us\u0142ug konieczne jest zainicjowanie izolowanej sieci mostkowej w systemie gospodarza, co pozwoli us\u0142udze Traefik na bezpieczn\u0105 komunikacj\u0119 z podrz\u0119dnymi kontenerami aplikacji:<\/p>\n<pre><code>docker network create proxy<\/code><\/pre>\n<h3>Krok 4: Integracja narz\u0119dzia Watchtower w celu automatyzacji cyklu \u017cycia<\/h3>\n<p>Aby wyeliminowa\u0107 konieczno\u015b\u0107 r\u0119cznego kontrolowania i instalowania aktualizacji kontener\u00f3w, narz\u0119dzie Watchtower jest dodawane w charakterze autonomicznej us\u0142ugi t\u0142a. Poniewa\u017c pierwotne repozytorium <code>containrrr\/watchtower<\/code> zosta\u0142o zarchiwizowane 17 grudnia 2025 roku i nie otrzymuje ju\u017c poprawek ani aktualizacji bezpiecze\u0144stwa, wykorzystywany jest tutaj aktywnie rozwijany fork <code>nickfedor\/watchtower<\/code>, kt\u00f3ry zast\u0119puje je bez zmian w konfiguracji. Skrypt sprawdza skonfigurowane rejestry co 24 godziny (86400 sekund), pobiera zaktualizowane obrazy zgodne z aktualnymi etykietami, w spos\u00f3b kontrolowany wy\u0142\u0105cza stare instancje kontener\u00f3w oraz automatycznie usuwa osierocone obrazy z dysku:<\/p>\n<pre><code>services:\n  watchtower:\n    image: nickfedor\/watchtower:latest\n    container_name: watchtower\n    restart: unless-stopped\n    volumes:\n      - \"\/var\/run\/docker.sock:\/var\/run\/docker.sock\"\n    environment:\n      - WATCHTOWER_CLEANUP=true\n      - WATCHTOWER_POLL_INTERVAL=86400\n      - WATCHTOWER_INCLUDE_RESTARTING=true\n      - WATCHTOWER_ROLLING_RESTART=true<\/code><\/pre>\n<h3>Krok 5: Wdro\u017cenie bezpiecznego mikroserwisu docelowego przez etykiety<\/h3>\n<p>W celu pod\u0142\u0105czenia dowolnej w\u0142asnej aplikacji do routera brzegowego Traefik bez edytowania centralnych plik\u00f3w konfiguracyjnych proxy, dynamiczne etykiety routingu deklaruje si\u0119 bezpo\u015brednio w definicji kontenera docelowego:<\/p>\n<pre><code>services:\n  whoami:\n    image: traefik\/whoami:latest\n    container_name: whoami\n    restart: unless-stopped\n    networks:\n      - proxy\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.whoami.rule=Host(`whoami.lukaswojcik.com`)\"\n      - \"traefik.http.routers.whoami.entrypoints=websecure\"\n      - \"traefik.http.routers.whoami.tls.certresolver=myresolver\"\n      - \"traefik.http.services.whoami.loadbalancer.server.port=80\"\n\nnetworks:\n  proxy:\n    external: true<\/code><\/pre>\n<h3>Krok 6: Kontrola jako\u015bci i audyt systemu<\/h3>\n<p>Po uruchomieniu us\u0142ug poleceniem <code>docker compose up -d<\/code> ca\u0142a infrastruktura musi zosta\u0107 systematycznie zweryfikowana:<\/p>\n<ol>\n<li><strong>Weryfikacja wydawania certyfikat\u00f3w:<\/strong> Sprawdzenie log\u00f3w kontenera poleceniem <code>docker logs -f traefik<\/code> w celu potwierdzenia pomy\u015blnego uko\u0144czenia weryfikacji Let&#8217;s Encrypt ACME oraz upewnienie si\u0119, \u017ce plik <code>acme.json<\/code> zawiera poprawne certyfikaty RSA\/ECDSA.<\/li>\n<li><strong>Audyt automatycznych przekierowa\u0144:<\/strong> Wykonanie zapytania cURL przez czyste HTTP (<code>curl -I http:\/\/whoami.lukaswojcik.com<\/code>) w celu potwierdzenia natychmiastowego zwrotu nag\u0142\u00f3wka <code>308 Permanent Redirect<\/code> lub <code>301 Moved Permanently<\/code> kieruj\u0105cego na HTTPS.<\/li>\n<li><strong>Symulacja wyzwolenia aktualizacji:<\/strong> Wykonanie jednorazowego, nieingeruj\u0105cego przebiegu narz\u0119dzia Watchtower poleceniem <code>docker exec -it watchtower \/watchtower --run-once --monitor-only<\/code> w celu weryfikacji poprawno\u015bci uprawnie\u0144 dost\u0119pu do gniazda Dockera. Flaga <code>--no-pull<\/code> nie nadaje si\u0119 do tego celu: blokuje jedynie pobieranie obraz\u00f3w z rejestru, natomiast nowszy obraz obecny ju\u017c lokalnie nadal prowadzi do zatrzymania i odtworzenia kontenera.<\/li>\n<\/ol>\n<h2>Podsumowanie i mierzalna warto\u015b\u0107 dodana<\/h2>\n<p><strong>Co da si\u0119 osi\u0105gn\u0105\u0107 dzi\u0119ki instrukcji:<\/strong> Ca\u0142kowite zast\u0105pienie r\u0119cznej konfiguracji routingu proxy, awaryjnych skrypt\u00f3w odnawiaj\u0105cych certyfikaty SSL oraz manualnych aktualizacji kontener\u00f3w przez autonomiczn\u0105, deklaratywn\u0105 infrastruktur\u0119 Docker Compose opart\u0105 na rozwi\u0105zaniach Traefik v3 i Watchtower.<\/p>\n<p><strong>Resultuj\u0105cy warto\u015b\u0107 dodana:<\/strong><\/p>\n<ul>\n<li><strong>Bezobs\u0142ugowe utrzymanie SSL\/TLS:<\/strong> Certyfikaty kryptograficzne s\u0105 automatycznie wnioskowane, wdra\u017cane i odnawiane przez Let&#8217;s Encrypt, zapobiegaj\u0105c ostrze\u017ceniom przegl\u0105darek i przerwom w dost\u0119pno\u015bci us\u0142ug.<\/li>\n<li><strong>Dynamiczne wykrywanie serwis\u00f3w:<\/strong> Nowe aplikacje na serwerze domowym s\u0105 natychmiast kierowane i szyfrowane poprzez dodanie etykiet Docker, co eliminuje konieczno\u015b\u0107 edycji plik\u00f3w Nginx\/Apache oraz prze\u0142adowywania serwera.<\/li>\n<li><strong>Ci\u0105g\u0142e, automatyczne \u0142atanie luk:<\/strong> Poprawki bezpiecze\u0144stwa oraz aktualizacje aplikacji s\u0105 wdra\u017cane automatycznie w ci\u0105gu 24 godzin od publikacji w rejestrach nadrz\u0119dnych, skutecznie zabezpieczaj\u0105c Raspberry Pi przed znanymi podatno\u015bciami. Gwarancja ta obowi\u0105zuje jedynie tak d\u0142ugo, jak samo narz\u0119dzie aktualizuj\u0105ce jest rozwijane; dlatego miejsce zarchiwizowanego orygina\u0142u zajmuje aktywnie utrzymywany fork <code>nickfedor\/watchtower<\/code>.<\/li>\n<\/ul>\n<div class=\"lw-faq\">\n<h2>Pytania i odpowiedzi<\/h2>\n<h3>Czy :ro przy gnie\u017adzie Dockera sprawia, \u017ce dost\u0119p Traefika jest nieszkodliwy?<\/h3>\n<p>Nie. :ro uniemo\u017cliwia jedynie modyfikacj\u0119 samego pliku gniazda przez kontener. Przez gniazdo Traefik rozmawia jednak z API Dockera, a ono nie rozr\u00f3\u017cnia wywo\u0142a\u0144 odczytuj\u0105cych i zapisuj\u0105cych tylko dlatego, \u017ce plik zamontowano w trybie tylko do odczytu. Kto uzyska dost\u0119p do gniazda, mo\u017ce przez nie uruchamia\u0107 kontenery, tak\u017ce takie z zamontowanym katalogiem g\u0142\u00f3wnym hosta, i tym samym ma w praktyce uprawnienia roota na Raspberry Pi.<\/p>\n<p>Ryzyko le\u017cy wi\u0119c w powierzchni ataku Traefika: to jedyna us\u0142uga, kt\u00f3ra przyjmuje po\u0142\u0105czenia bezpo\u015brednio z internetu. Luka w Traefiku nie sko\u0144czy\u0142aby si\u0119 na kontenerze. Watchtower i tak potrzebuje gniazda z prawem zapisu, \u017ceby podmienia\u0107 kontenery, ale nie przyjmuje po\u0142\u0105cze\u0144 z zewn\u0105trz.<\/p>\n<p>Zaradzi\u0107 temu mo\u017ce proxy gniazda: ma\u0142y kontener, kt\u00f3ry trzyma gniazdo i przekazuje dalej tylko te odczytuj\u0105ce punkty ko\u0144cowe API, kt\u00f3rych Traefik potrzebuje do wykrywania kontener\u00f3w. Traefik dostaje wtedy zamiast gniazda adres sieciowy tego proxy, a dostawc\u0119 Docker da si\u0119 na niego skierowa\u0107 parametrem endpoint.<\/p>\n<h3>Jakie aktualizacje instaluje Watchtower i jak unikn\u0105\u0107 skok\u00f3w do nowej wersji g\u0142\u00f3wnej?<\/h3>\n<p>Watchtower pod\u0105\u017ca za tagiem, z kt\u00f3rym obraz jest wpisany, a nie za numerem wersji. Kontener na latest dostaje wi\u0119c tak\u017ce skok do nowej wersji g\u0142\u00f3wnej, gdy tylko zostanie ona opublikowana pod latest, razem ze zmienion\u0105 konfiguracj\u0105 czy formatem danych. Drogi powrotnej nie przewidziano: po sprz\u0105taniu z WATCHTOWER_CLEANUP=true starego obrazu nie ma ju\u017c nawet na dysku.<\/p>\n<p>Konfiguracja w artykule pokazuje ju\u017c \u015brodek zaradczy: Traefik stoi na traefik:v3.1 i dostaje tylko nowe obrazy pod tym tagiem, czyli poprawki w obr\u0119bie 3.1, ale \u017cadnego skoku do innej wersji. Warto tak samo post\u0105pi\u0107 z ka\u017cd\u0105 us\u0142ug\u0105 przechowuj\u0105c\u0105 w\u0142asne dane, na przyk\u0142ad z baz\u0105 danych. Przy us\u0142ugach na latest, w artykule whoami i samym Watchtowerze, ryzyko jest mniejsze, bo nie przechowuj\u0105 one danych.<\/p>\n<h3>Czy panel Traefika pod adresem proxy.lukaswojcik.com jest chroniony?<\/h3>\n<p>Tak, w obr\u0119bie sieci domowej: router panelu ma opr\u00f3cz TLS middleware dashboard-ip, list\u0119 dozwolonych adres\u00f3w IP (ipAllowList), kt\u00f3ra przepuszcza tylko adresy z 192.168.0.0\/16 i 10.0.0.0\/8. Bez niej ka\u017cdy, kto zna nazw\u0119 hosta, widzia\u0142by wszystkie routery, us\u0142ugi i nazwy host\u00f3w serwera domowego. Je\u015bli panel ma by\u0107 osi\u0105galny tak\u017ce spoza domu, dochodzi middleware Basic Auth.<\/p>\n<h3>Czy weryfikacja HTTP-01 dzia\u0142a na ka\u017cdym \u0142\u0105czu domowym?<\/h3>\n<p>Tylko wtedy, gdy Let&#8217;s Encrypt mo\u017ce po\u0142\u0105czy\u0107 si\u0119 z Raspberry Pi z internetu na porcie 80: nazwa hosta musi publicznie wskazywa\u0107 na \u0142\u0105cze, a router musi przekierowywa\u0107 port 80 na Raspberry Pi. Na \u0142\u0105czach bez w\u0142asnego publicznego adresu IPv4, na przyk\u0142ad za carrier-grade NAT albo DS-Lite, przez IPv4 to si\u0119 nie uda; zadzia\u0142a wtedy tylko, je\u015bli nazwa hosta ma rekord AAAA, a sam Raspberry Pi jest osi\u0105galny przez IPv6. To samo ograniczenie dotyczy us\u0142ug, kt\u00f3re maj\u0105 by\u0107 dost\u0119pne wy\u0142\u0105cznie w sieci domowej.<\/p>\n<p>Na takie przypadki przewidziana jest wymieniona w artykule weryfikacja DNS-01. Potwierdza ona kontrol\u0119 nad domen\u0105 rekordem TXT w DNS, nie potrzebuje otwartego portu i pozwala te\u017c na certyfikaty wieloznaczne (wildcard). W zamian Traefik potrzebuje danych dost\u0119powych do API dostawcy DNS, a te dane wymagaj\u0105 wtedy takiej samej ochrony jak plik acme.json.<\/p>\n<\/div>\n<div class=\"lw-quellen\">\n<h2>\u0179r\u00f3d\u0142a<\/h2>\n<ul>\n<li><a href=\"https:\/\/docs.docker.com\/compose\/\" target=\"_blank\" rel=\"noopener noreferrer\">Docker Compose documentation<\/a><\/li>\n<li><a href=\"https:\/\/doc.traefik.io\/traefik\/\" target=\"_blank\" rel=\"noopener noreferrer\">Traefik documentation<\/a><\/li>\n<li><a href=\"https:\/\/letsencrypt.org\/docs\/\" target=\"_blank\" rel=\"noopener noreferrer\">Let&#8217;s Encrypt documentation<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Techniczny przewodnik po wdro\u017ceniu w pe\u0142ni zautomatyzowanego laboratorium domowego na Raspberry Pi z proxy Traefik v3, automatycznym SSL i aktualizacjami Watchtower.<\/p>\n","protected":false},"author":1,"featured_media":14081,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[92634],"tags":[92061,92232,92220,92223,92226,92238],"class_list":["post-529","post","type-post","status-publish","format-standard","hentry","category-tutorials-pl-raspberry-pi-pl","tag-automation-pl","tag-docker-pl","tag-homelab-pl","tag-raspberry-pi-pl","tag-self-hosting-pl","tag-tutorial-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Autonomiczny serwer domowy Docker-Compose z Traefik, SSL i Watchtower | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Domowy serwer Docker Compose na Raspberry Pi: Traefik, TLS, etykiety kontener\u00f3w i Watchtower oraz kontrola dost\u0119pu i aktualizacji.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Autonomiczny serwer domowy Docker-Compose z Traefik, SSL i Watchtower | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Domowy serwer Docker Compose na Raspberry Pi: Traefik, TLS, etykiety kontener\u00f3w i Watchtower oraz kontrola dost\u0119pu i aktualizacji.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-05T16:35:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-529-autonomiczny-serwer-domowy-docker-co-g.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/raspberry-pi-pl\\\/tutorials-pl-raspberry-pi-pl\\\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/raspberry-pi-pl\\\/tutorials-pl-raspberry-pi-pl\\\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Autonomiczny serwer domowy Docker-Compose z Traefik, SSL i Watchtower\",\"datePublished\":\"2026-10-05T16:35:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/raspberry-pi-pl\\\/tutorials-pl-raspberry-pi-pl\\\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\\\/\"},\"wordCount\":1390,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/raspberry-pi-pl\\\/tutorials-pl-raspberry-pi-pl\\\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-529-autonomiczny-serwer-domowy-docker-co-g.png\",\"keywords\":[\"Automation\",\"Docker\",\"Homelab\",\"Raspberry Pi\",\"Self-Hosting\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/raspberry-pi-pl\\\/tutorials-pl-raspberry-pi-pl\\\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/raspberry-pi-pl\\\/tutorials-pl-raspberry-pi-pl\\\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/raspberry-pi-pl\\\/tutorials-pl-raspberry-pi-pl\\\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\\\/\",\"name\":\"Autonomiczny serwer domowy Docker-Compose z Traefik, SSL i Watchtower | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/raspberry-pi-pl\\\/tutorials-pl-raspberry-pi-pl\\\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/raspberry-pi-pl\\\/tutorials-pl-raspberry-pi-pl\\\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-529-autonomiczny-serwer-domowy-docker-co-g.png\",\"datePublished\":\"2026-10-05T16:35:00+00:00\",\"description\":\"Domowy serwer Docker Compose na Raspberry Pi: Traefik, TLS, etykiety kontener\u00f3w i Watchtower oraz kontrola dost\u0119pu i aktualizacji.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/raspberry-pi-pl\\\/tutorials-pl-raspberry-pi-pl\\\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/raspberry-pi-pl\\\/tutorials-pl-raspberry-pi-pl\\\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/raspberry-pi-pl\\\/tutorials-pl-raspberry-pi-pl\\\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-529-autonomiczny-serwer-domowy-docker-co-g.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-529-autonomiczny-serwer-domowy-docker-co-g.png\",\"width\":1200,\"height\":630,\"caption\":\"Autonomiczny serwer domowy Docker-Compose z Traefik, SSL i Watchtower\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/raspberry-pi-pl\\\/tutorials-pl-raspberry-pi-pl\\\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Autonomiczny serwer domowy Docker-Compose z Traefik, SSL i Watchtower\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Autonomiczny serwer domowy Docker-Compose z Traefik, SSL i Watchtower | Lukas Wojcik","description":"Domowy serwer Docker Compose na Raspberry Pi: Traefik, TLS, etykiety kontener\u00f3w i Watchtower oraz kontrola dost\u0119pu i aktualizacji.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/","og_locale":"en_US","og_type":"article","og_title":"Autonomiczny serwer domowy Docker-Compose z Traefik, SSL i Watchtower | Lukas Wojcik","og_description":"Domowy serwer Docker Compose na Raspberry Pi: Traefik, TLS, etykiety kontener\u00f3w i Watchtower oraz kontrola dost\u0119pu i aktualizacji.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-10-05T16:35:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-529-autonomiczny-serwer-domowy-docker-co-g.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Autonomiczny serwer domowy Docker-Compose z Traefik, SSL i Watchtower","datePublished":"2026-10-05T16:35:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/"},"wordCount":1390,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-529-autonomiczny-serwer-domowy-docker-co-g.png","keywords":["Automation","Docker","Homelab","Raspberry Pi","Self-Hosting","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/","name":"Autonomiczny serwer domowy Docker-Compose z Traefik, SSL i Watchtower | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-529-autonomiczny-serwer-domowy-docker-co-g.png","datePublished":"2026-10-05T16:35:00+00:00","description":"Domowy serwer Docker Compose na Raspberry Pi: Traefik, TLS, etykiety kontener\u00f3w i Watchtower oraz kontrola dost\u0119pu i aktualizacji.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-529-autonomiczny-serwer-domowy-docker-co-g.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-529-autonomiczny-serwer-domowy-docker-co-g.png","width":1200,"height":630,"caption":"Autonomiczny serwer domowy Docker-Compose z Traefik, SSL i Watchtower"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/raspberry-pi-pl\/tutorials-pl-raspberry-pi-pl\/autonomiczny-serwer-domowy-docker-compose-z-traefik-ssl-i-watchtower\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Autonomiczny serwer domowy Docker-Compose z Traefik, SSL i Watchtower"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/529","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=529"}],"version-history":[{"count":7,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/529\/revisions"}],"predecessor-version":[{"id":21615,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/529\/revisions\/21615"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/14081"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=529"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=529"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=529"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}