Instalacja Homarr na Docker Swarm


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ę na serwer1
  • 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:/data

W 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 raz
  • placement.constraints – uruchamiaj tylko na węzłach z etykietą stack=monitoring
  • mode: 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 stack

Na 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 ls

Naszym oczom powinna się ukazać następująca tabela:

ID             NAME           MODE         REPLICAS   IMAGE                          PORTS
vrjhz72xkmvp   stack_homarr   replicated   0/1        ghcr.io/ajnart/homarr:latest

Co 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.


Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *