Docker jest podstawą uruchamiania większości usług w homelabie:
docs.lab)Dzięki Dockerowi:
compose.yml),Docker został zainstalowany z oficjalnego repozytorium Dockera, a nie z paczki z Ubuntu (która bywa przestarzała).
sudo apt remove docker docker-engine docker.io containerd runc
sudo apt update
sudo apt install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Zastąp $(. /etc/os-release; echo "$VERSION_CODENAME") odpowiednim codename (25.10)
echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release; echo "$VERSION_CODENAME") stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker marcin
# wylogowanie / zalogowanie, żeby grupa zadziałała
Dzięki temu można używać docker i docker compose bez sudo.
/srv/docker/Wszystkie usługi dockera w homelabie są trzymane w jednym katalogu:
/srv/docker/
├── traefik/
├── portainer/
├── gitea/
├── monitoring/
├── pihole/
└── docs/
Zasada:
compose.yml,Przykładowo:
/srv/docker/traefik/
└── compose.yml
/srv/docker/portainer/
├── compose.yml
└── data/
/srv/docker/gitea/
├── compose.yml
├── gitea/
└── postgres/
/srv/docker/monitoring/
├── compose.yml
├── prometheus/
├── grafana/
└── ...
/srv/docker/traefik/
compose.yml – konfiguracja Traefika jako centralnego reverse proxy.*.lab (Portainer, Gitea, Docs, Grafana, itd.).Szczegóły: zobacz Usługi → Traefik.
/srv/docker/portainer/
compose.yml– uruchamia Portainer CE./var/run/docker.sock../data.Portainer jest dostępny pod:
http://portainer.lab (za Traefikiem)./srv/docker/gitea/
compose.yml – uruchamia:
gitea-db),gitea).Volumes:
./gitea → dane Gitei (/var/lib/gitea),./postgres → dane Postgresa (/var/lib/postgresql/data).gitea_net – wewnętrzna (Gitea ↔ Postgres),
proxy – do wystawienia gitea.lab przez Traefika.
Szczegóły: zobacz Usługi → Gitea.
/srv/docker/monitoring/
(Docelowy katalog, jeśli nie jest jeszcze w pełni skonfigurowany)
compose.yml – stack monitoringu:
/srv/docker/monitoring/
├── compose.yml
├── prometheus/
│ ├── prometheus.yml
│ └── data/
├── grafana/
│ ├── data/
│ └── provisioning/
├── loki/
└── uptime-kuma/
Sieci:
monitoring – wewnętrzna sieć dla komponentów monitoringu,proxy – do wystawienia grafana.lab, kuma.lab, itp./srv/docker/pihole/
compose.yml – uruchamia Pi-hole jako kontener Dockera.53/udp i 53/tcp – DNS (mapowane na 10.10.20.10),./etc-pihole, ./etc-dnsmasq.d.Rola:
10.10.20.10),*.lab,Szczegóły: Usługi → DNS.
/srv/docker/docs/
compose.yml – uruchamia MkDocs/Material (kontener squidfunk/mkdocs-material)../mkdocs.yml → konfiguracja dokumentacji,./docs/ → pliki .md (treść dokumentacji).proxy – aby wystawiać docs.lab przez Traefika.Rola:
http://docs.lab.W homelabie używane są różne sieci Dockera:
proxy (external)traefik,portainer,gitea,docs (MkDocs),grafana, prometheus (opcjonalnie),Tworzona ręcznie (jednorazowo):
docker network create proxy
gitea_netZapewnia izolację ruchu bazy danych od reszty usług.
Zdefiniowana w compose.yml Gitei:
networks:
gitea_net:
name: gitea_net
monitoring (przykładowa)Definiowana w compose.yml monitoringu:
networks:
monitoring:
driver: bridge
/srv/docker/
traefik, portainer, gitea, monitoring, pihole, docs.compose.yml
cd /srv/docker/gitea
docker compose up -d
./gitea, ./postgres, ./grafana/data, ./prometheus/data, ./data (Portainer),gitea_net dla Gitei i jej bazy,monitoring dla Prometheusa/Grafany/Lokiego.*.lab,Dla każdej usługi:
cd /srv/docker/<usługa>
docker compose pull # pobierz nowe wersje obrazów
docker compose up -d # uruchom z nowymi obrazami
Przykłady:
cd /srv/docker/traefik
docker compose pull
docker compose up -d
cd /srv/docker/gitea
docker compose pull
docker compose up -d
cd /srv/docker/monitoring
docker compose pull
docker compose up -d
cd /srv/docker/<usługa>
docker compose restart
Przykłady:
mkdocs.yml:cd /srv/docker/docs
docker compose restart docs
cd /srv/docker/traefik
docker compose restart traefik
.md w MkDocs)→ najczęściej wystarczy git pull, ewentualnie docker compose restart <usługa>, gdy auto‑reload nie zadziała.
compose.yml lub zmiennych środowiskowych→ zalecane docker compose up -d (czasem z pull, gdy zmieniasz wersję obrazów).
→ dobrze jest zatrzymać stack (docker compose down), potem up -d z nową konfiguracją, po wcześniejszym backupie danych.
Podejście do backupu na poziomie Dockera:
compose.yml w /srv/docker/*,/srv/docker/gitea/gitea,/srv/docker/gitea/postgres,/srv/docker/monitoring/prometheus/data,/srv/docker/monitoring/grafana/data,/srv/docker/pihole/etc-pihole, itp./srv/docker/ (pliki i katalogi z backupu),network create proxy (i inne sieci, jeśli trzeba),cd /srv/docker/traefik && docker compose up -d
cd /srv/docker/pihole && docker compose up -d
cd /srv/docker/gitea && docker compose up -d
cd /srv/docker/monitoring && docker compose up -d
cd /srv/docker/docs && docker compose up -d
# itd.
Szczegóły i scenariusze backupu opisuję szerzej w sekcji:
Kopie zapasowe.
/srv/docker/ według zasady:
compose.yml i katalogi z danymi.gitea_net, monitoring, itp.) zapewniają izolację.docker compose pull,docker compose up -d,docker compose restart.Docker razem z Traefikiem i Pi-hole tworzą fundament homelabu – reszta usług (Gitea, monitoring, dokumentacja itd.) to tylko „klocki” ułożone na tej bazie.