Projekt własny · 2026 - obecnie

Homelab.

Laboratorium na dwóch maszynach z Proxmoxem w domu, w którym uczę się infrastruktury na usługach, których naprawdę używam. Jest dostępne z zewnątrz bez ani jednego otwartego portu.

Panel Proxmoxa i prawdziwe wyniki komend z mojego klastra, 5 listopada 2026. Celowo ukryte: jeden prywatny kontener, adresy węzłów, nazwa klastra, zalogowane konto i historia zadań.

0 otwartych portów na routerze

2 węzły Proxmoxa w jednym klastrze

9 kontenerów LXC, z czego 6 działa

Dlaczego go prowadzę.

Chciałem uczyć się infrastruktury na usługach, których naprawdę używam. Działa w domu na dwóch maszynach z Proxmoxem, a router nie przekierowuje żadnych portów: wszystko wychodzi przez Cloudflare Tunnel.

Każda decyzja jest spisana razem z uzasadnieniem i tym, co mogłoby ją zmienić. Gdy coś się psuje, objaw, przyczyna i naprawa trafiają do dziennika, sprawdzane na działających maszynach, a nie z pamięci.

Co tam działa.

Odczytane z klastra 5 listopada 2026. Zatrzymanych kontenerów tu nie ma.

Sprzęt

Węzeł 1
Intel i3-4130T, 8 GB RAM i dysk SSD 238 GB. Dziś działa tu wszystko.
Węzeł 2
Dell OptiPlex 7050, w klastrze od 1 października 2026. Nie ma na nim jeszcze kontenerów.
Proxmox VE 9.2
Łączy obie maszyny w jeden klaster.

Usługi

Testowa strona Clickwill
Strona Clickwill, testowana tu przed publikacją.
Panel Clickwill
Pobrania, ruch na stronie i wyszukiwane hasła.
Serwer podglądów
Caddy. Szkice moich stron pod publicznym linkiem, niewidoczne dla wyszukiwarek.
Pliki
Nextcloud na dysku 80 GB.
Docker i Portainer
Mniejsze narzędzia, w tym panel benchmarków lokalnych modeli AI.
Moja najbardziej wrażliwa aplikacja
Prywatna, z ostrzejszymi zasadami niż reszta laboratorium.

Dostęp

Cloudflare Tunnel
Jedyna droga z zewnątrz, przez połączenia wychodzące z moich maszyn.
Cloudflare Access
Prywatne hosty proszą o jednorazowy kod wysyłany e-mailem.
WARP i Gateway
Wrażliwa aplikacja otwiera się tylko z zarejestrowanego urządzenia.

Jak pracuję tu z agentami AI.

Agenci wykonują dużą część prac, a ich dostęp jest szeroki. To kompromis, który mam na swojej liście.

Co robią agenci.

  • Hosty i kontenery

    Wdrożenia, konfiguracja i diagnoza, przez SSH.

  • Cloudflare

    DNS, tunele i reguły Access, przez API.

Co robię ja.

  • Decyzje

    Co działa, co jest wystawione i jakie ryzyko przyjmuję.

  • Panele i instalatory

    Wszystko w panelu w przeglądarce albo wymagające sudo na moim Macu.

  • Klucze prywatne

    Zostają u mnie.

Decyzje, które spisałem.

  • Żadnych otwartych portów.

    Skan mojego publicznego adresu niczego nie znajduje, a żaden port nie zostanie otwarty przez przypadek. Zmieniłaby to tylko usługa, której nie da się puścić przez tunel.

  • Ochrona domyślna.

    Reguła wildcard obejmuje każdy nowy host od chwili jego powstania. Wyjątek wymaga świadomego kroku, a nie odwrotnie.

  • Klucze idą do kopii.

    Kopia bez kluczy jest bezużyteczna po utracie kontenera. Archiwum jest szyfrowane kluczem publicznym, którego prywatnej połowy nie ma na serwerze, więc serwer może zrobić kopię, ale nie może jej odczytać.

  • Kopia poza serwerem.

    Nocne kopie leżą na tym samym dysku co aplikacja. Awaria dysku jest bardziej prawdopodobna niż pożar, więc najnowsza kopia trafia na mojego Maca.

Co się zepsuło i co zmieniłem.

  1. 18 sie 2026

    Połowa żądań zwracała 502.

    Wyglądało to na problem z siecią. Tunel miał dwa connectory, jeden na serwerze, drugi na moim Macu, a Mac wyszedł z domu. Kosztowało mnie to godzinę i dziś sprawdzam to w pierwszej kolejności.

  2. 29 sie

    Zabezpieczenia, które istniały tylko na papierze.

    Bez nesting=1 w nieuprzywilejowanym kontenerze systemd nie mógł zbudować piaskownicy i jednostki padały. Plan bezpieczeństwa opierał się właśnie na tych ustawieniach. Bez zauważenia tego istniałyby tylko w pliku konfiguracyjnym.

  3. 5 wrz

    Lockfile z Maca położył usługę.

    package-lock.json z macOS wymusił kompilację w kontenerze, który celowo nie ma kompilatora. Lockfile nie trafia już do paczki wdrożeniowej.

  4. 5 wrz

    Nagłówek, który omijał limit.

    Express czytał adres klienta ze skrajnie lewego wpisu X-Forwarded-For, więc zalogowany użytkownik mógł go zmieniać i omijać limit prób PIN-u. Adres pochodzi teraz z Cf-Connecting-IP.

  5. 6 wrz

    Audyt bezpieczeństwa tylko do odczytu.

    Całej konfiguracji, z zapisanymi dowodami. Prywatna aplikacja wypadła znacznie lepiej niż host wokół niej.

  6. 1 paź

    Drugi węzeł.

    Dell dołączył do pierwszej maszyny w jednym klastrze, a obie przeszły na Proxmoxa 9.2. Usługi wróciły bez szkód.

  7. 19 paź

    Kod 302 niczego nie dowodził.

    W czasie awarii każdy host nadal odpowiadał 302 na curl, a przeglądarka pokazywała Error 1033. Access odpowiada, zanim żądanie dotrze do tunelu, więc dziś testuję przez jedyny publiczny host.

Co jest jeszcze otwarte.

Laboratorium nie jest skończone, a to jest lista.

  • Kopie dla reszty

    Kopię ma tylko wrażliwa aplikacja, ze snapshotem co noc. Reszta laboratorium nie ma jeszcze kopii.

  • Kontenery na węźle 2

    Druga maszyna jest w klastrze, ale wciąż pusta.

  • Dostęp agentów

    Ograniczenie go oznacza więcej ręcznej pracy dla mnie. Ta decyzja jest wciąż otwarta.

  • Sieci i Kubernetes

    Tego chcę się nauczyć w następnej kolejności.

Działa na
Proxmox VE 9.2, dwa węzły
Dostęp
Cloudflare Tunnel, Cloudflare Access, WARP
Zbudowany z
LXC, Docker, Caddy, Nextcloud