
Self-Hosted Platforma Docker z GPU Offload
Docker / Cloudflare Tunnel / Immich / Open WebUI / Jellyfin / CouchDB / Umami Analytics
Miałem dość płacenia za subskrypcje SaaS i trzymania plików na losowych dyskach. Sprzedałem komputer gamingowy, kupiłem NAS i zbudowałem własną platformę self-hosted. Zdjęcia, kopie zapasowe, finanse, interfejs LLM, wszystko w Dockerze na moim sprzęcie. Układ rozrósł się do trzech maszyn: NAS na dane i kontenery, 12-letni desktop, którego nikt nie chciał, wyczyszczony i przerobiony na zdalną stację roboczą AI z Ubuntu, oraz laptop użyczający swojego GPU do inferencji ML przez LAN.
Płaciłem co miesiąc za rzeczy, które mogłem sam postawić. Potrzebowałem maszyny na 86 tysięcy zdjęć z rozpoznawaniem twarzy, OCR i inteligentnym wyszukiwaniem. Wszystko prywatne, wszystko na moim sprzęcie. Jeden serwer zamiast pięciu kart z SaaS.
Nauczyć się, jak naprawdę działają kontenery, sieć i usługi self-hosted, budując platformę, którą mogę rozszerzać o cokolwiek mnie zainteresuje.
Wszystkie pliki w jednym miejscu, dostępne zdalnie 24/7 z mojego własnego serwera. Zdjęcia synchronizują się natychmiast z inteligentnym wyszukiwaniem, rozpoznawaniem twarzy w 0,3 sekundy zamiast 3,2 na CPU i wbudowanym OCR. 86 tysięcy zdjęć zaindeksowanych. Finanse osobiste śledzone na self-hostowanym panelu. Interfejs LLM na własnym sprzęcie. 12-letni desktop stojący w kącie, cicho uruchamiający agenty AI.
# Unified bridge networknetworks: app_network: driver: bridge services: immich-server: image: ghcr.io/immich-app/immich-server:release networks: [app_network] volumes: - /data/photos:/usr/src/app/upload environment: IMMICH_MACHINE_LEARNING_URL: "http://<GPU_HOST>:<ML_PORT>" # ML inference offloaded to laptop (RTX 4060) jellyfin: image: jellyfin/jellyfin networks: [app_network] devices: - /dev/dri:/dev/dri # Intel QSV hardware transcoding# GPU Offload Pattern Problem: NAS has no GPU. ML inference (face detection, image classification) is 10x slower on CPU. Solution: Split service into two hosts over LAN. NAS Laptop +----------------+ +--------------------+ | storage + API |---- LAN ---->| ML runtime | | photos/videos | 1 Gbps | NVIDIA RTX 4060 | +----------------+ | CUDA acceleration | +--------------------+ Config: IMMICH_MACHINE_LEARNING_URL=http://<GPU_HOST>:<ML_PORT> Result: Face detection 0.3s vs 3.2s (CPU). Smart search indexing overnight: 50k photos in 4h vs 40h.# Cloudflare Tunnel configtunnel: <tunnel-id>credentials-file: /etc/cloudflared/credentials.json ingress: - hostname: sync.home.example service: http://localhost:<port> # Vault sync (CouchDB) - hostname: agent.home.example service: http://localhost:<port> # AI Agent Gateway - service: http_status:404 # catch-all deny # Zero open inbound ports.# Tunnel initiates outbound connection to Cloudflare edge.# Access policies enforced at Cloudflare (email OTP / service tokens).
Architektura Sieci

Dashboard Serwisow