W tym wpisie pokażę, jak wdrożyć aplikację Homarr jako usługę Docker Swarm, która będzie działać głównie na serwerze typu worker — tak, aby odciążyć węzeł serwera1, który pełni rolę managera. Zapewnimy również automatyczne przejęcie działania przez serwer1 w razie awarii workera.
Założenia do konfiguracji:
- Homarr działa na serwerze2 (oznaczonym etykietą
stack=monitoring) - W razie awarii
serwera2, Homarr przełącza się naserwer1 - Pliki konfiguracji trzymamy w katalogu
/Konf/homarr/ - Port 7575 zostaje wystawiony na
serwer1, by zawsze mieć dostęp
Tworzymy plik docker-compose.yml
Sam plik tworzymy na serwerze1.
services:
homarr:
image: ghcr.io/ajnart/homarr:latest
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.labels.stack == monitoring
ports:
- target: 7575
published: 7575
protocol: tcp
mode: host
volumes:
- /Konf/homarr/configs:/app/data/configs
- /Konf/homarr/icons:/app/public/icons
- /Konf/homarr/data:/dataW moim przypadku wszystkie pliki konfiguracyjne i pliki docker-compose.yml, trzymam w folderze /Konf/, w którym to folderze mam inne podfoldery odpowiadające nazwą stawianych kontenerów. Wyjaśnijmy w takim razie co tutaj jest najistotniejsze:
deploy.replicas: 1– tylko jedna instancja Homarra na razplacement.constraints– uruchamiaj tylko na węzłach z etykietąstack=monitoringmode: host– port 7575 zostanie wystawiony na węźle, który uruchomi kontener
Aby podmapować wszystkie potrzebne foldery, przygotujmy odpowiednią strukturę:
mkdir -p /Konf/homarr/{configs,icons,data}Przechodzimy do folderu z utworzonym plikiem docker-compose.yml i wykonujemy następujące polecenie:
docker stack deploy -c docker-compose.yml stackNa koniec dodałem nazwę stack. Po co? Docker Swarm nie tworzy nazw tak jak sam Docker ale poprzez prefixy. Sam stack ma nazwę homarr więc aby odróżnić nieco tą nazwę, że jest to stack, dodałem po prostu słowo stack.
Sprawdźmy teraz czy nasza usługa, zainstalowała się poprawnie. Wykonajmy polecenie:
docker service lsNaszym oczom powinna się ukazać następująca tabela:
ID NAME MODE REPLICAS IMAGE PORTS
vrjhz72xkmvp stack_homarr replicated 0/1 ghcr.io/ajnart/homarr:latestCo się stanie przy awarii serwer2?
Docker Swarm automatycznie zauważy niedostępność serwer2. Przeniesie usługę homarr na serwe1 (bo też ma etykietę stack=monitoring). Port 7575 będzie wystawiony teraz na serwer1.
Podsumowanie
Dzięki Swarmowi możesz sterować rozmieszczeniem usług z precyzją, jakiej brakuje w typowym Docker Compose. W tym przykładzie:
- Przypisaliśmy aplikację do konkretnej grupy serwerów (
stack=monitoring) - Odciążyliśmy managera
- Zabezpieczyliśmy usługę przed awarią
Aby dostać się do Homarr, wpisz w przeglądarce adres serwera2, w przypadku jego awarii konieczne jest wywołanie adresu serwera1.
W kolejnych wpisach postaram się pokazać jak uruchomić programowy load balancer aby sterować takich ruchem do aplikacji Homarr a w przypadku niedostępności jednego z serwerów aby nie martwić się o konieczność zmiany IP.
