Naciśnij ESC, aby zamknąć

UniFi Controller w Dockerze: Migracja do UniFi Network Application

Spis treści

Cześć!

Dzisiaj przedstawię Ci kroki jakie trzeba wykonać, aby dokonać migracji UniFi Controllera w wersji kontenerowej opracowanej przez LinuxServer.io do nowego rozwiązania – UniFi Network Application. Ostatnie zmiany wprowadzone przez Ubiquiti oraz decyzja autorów LinuxServer.io dotyczące zaprzestania kontynuacji wsparcia starego kontenera z UniFi Controller, wymagają od administratorów sieci zrozumienia i przeprowadzenia skutecznej migracji. Poniżej przedstawię kroki, które należy podjąć w tym procesie.

Wstęp do naszego projektu

Poradnik podzielę na kilka etapów – od przygotowania kopii zapasowej, po utworzenie folderów na nowy kontener do Network Application i finalne uruchomienie za pomocą Docker Compose. Czynności będę wykonywać na Synology DS920+, uruchamianie kontenerów będę dokonywać za pomocą zainstalowanego już wcześniej Portainer.

Czym jest UniFi Controller?

Ubiquiti, logoUniFi Controller firmy Ubiquiti służy jako centralny hub dla urządzeń sieciowych serii UniFi, zapewniając bezpieczną komunikację i zarządzanie. Ten kontroler jest odpowiedzialny za konfigurację i bieżącą konserwację podłączonych urządzeń, takich jak punkty dostępowe. Po dodaniu urządzenia do kontrolera, tworzy się trwałe połączenie – przyrównać można to do relacji rodzica z dzieckiem, gdzie kontroler pełni rolę „matki” dla „dzieci” w postaci urządzeń sieciowych. Wszystkie informacje o każdym z urządzeń są przechowywane w lokalnym systemie plików kontrolera.

Interesującym aspektem jest to, że urządzenia serii UniFi nie wymagają ciągłej pracy kontrolera do swojego funkcjonowania. Po otrzymaniu konfiguracji od kontrolera, mogą działać niezależnie, przesyłając jedynie statystyki dotyczące ich działania do kontrolera dla celów monitoringu i analizy.

Jaka jest różnica między UniFi Controller, a UniFi Network Application?

Niczym, Ubiquiti postanowiło od wersji kontrolera 6.2 używać zamiast Controller to określenie Network Application. 

Przygotowanie

W celu przygotowania poradnika, przyjmiemy ustaloną nazwę domeny oraz określone nazwy konfiguracyjne, przedstawione poniżej. Dla dostosowania konfiguracji do własnych potrzeb, należy zastosować ustawienia według indywidualnych wymagań.

  • Pełna nazwa domeny (FQDN) Synology DSM: https://dsm.xyz.com,
  • Pełna nazwa domeny (FQDN) UniFi Controller / Network Application: https://unifi.xyz.com,
  • Zainstalowany na Synology poprzez Docker: PortainerAdGuard Home,
  • Zainstalowany na Synology poprzez Centrum pakietów: Container Manager,
  • Na serwerze DHCP routera, wskazany adres IP serwera DNS (AdGuard Home) zainstalowanego na Synology,
  • Istniejące urządzenia np. punkty dostępu (Access Point), które były zarządzane przez UniFi Controller, a chcemy je przenieść do UniFi Network Application.

Hardware

Nginx Proxy Manager (opcjonalnie)

Na moim Synology skonfigurowałem reverse proxy przy użyciu Nginx Proxy Manager, co umożliwia dostęp do panelu administracyjnego UniFi za pomocą adresu URL (https://unifi.xyz.com) zamiast standardowego adresu IP. Jest to rozwiązanie zwiększające wygodę zarządzania urządzeniami UniFi, oferując łatwiejszy do zapamiętania i bardziej intuicyjny adres dostępny w sieci LAN. Jesteś zainteresowany tym jak to zrobić? Zajrzyj tutaj.

Dodatkowo, lokalne przekierowanie DNS realizowane jest przez serwer DNS AdGuard, również działający na serwerze Synology w wersji kontenerowej.

Oprogramowanie

W ofercie Ubiquiti dostępne są również zewnętrzne urządzenia służące jako kontrolery, takie jak Cloud Key. Jednakże, istnieje możliwość zastąpienia ich przez rozwiązanie bazujące na Docker Compose, co stanowi alternatywę zwłaszcza dla tych, którzy preferują bardziej elastyczne i zintegrowane środowiska informatyczne. Szczegóły tego rozwiązania omówię w dalszej części artykułu.

UniFi Network Application od LinuxServer.io

Dostęp do repozytorium kontenerowej wersji UniFi Network Application stworzonej przez LinuxServer.io jest dostępna tutaj. W oparciu o te dane będziemy tworzyć nowy Stack w Portainerze.

Baza danych

MongoDB, logo

Warto wspomnieć, że niektóre modele serwerów Synology, w tym wspomniany wyżej model DS920+, nie obsługują technologii AVX (Advanced Vector Extensions).  AVX to zestaw instrukcji procesora zapewniających lepszą wydajność w zadaniach wymagających intensywnej obliczeniowo pracy, takich jak przetwarzanie danych czy operacje graficzne.  Z tego powodu, w tej instrukcji będziemy korzystać z wersji MongoDB 4.4, która jest kompatybilna z urządzeniami nieposiadającymi wsparcia dla AVX.

MongoDB jest nowoczesną, otwarto-źródłową bazą danych typu NoSQL, która przechowuje dane w formacie podobnym do JSON, znane jako BSON. Jest to system bazodanowy o wysokiej wydajności, skalowalności i elastyczności, szczególnie przydatny w aplikacjach wymagających szybkiego przetwarzania dużych ilości złożonych danych.

Krok 1 – Konfiguracja w Synology DSM

File Station

  • Zaloguj się na swoim serwerze plików Synology i uruchom aplikację File Station.
  • Następnie, przejdź do wcześniej utworzonego folderu współdzielonego o nazwie docker. Wewnątrz tego folderu znajdź i otwórz folder unifi.
  • Następnym krokiem jest utworzenie podfolderu o nazwie network-application wewnątrz folderu unifi.
    • Po udanej migracji i instalacji nowego Unifi Network Application, stary folder zawierający poprzedni kontroler będzie mógł zostać usunięty. To posprząta przestrzeń i uporządkuje strukturę folderów zgodnie z aktualną konfiguracją.
    • W artykule nie będziemy omawiać dodatkowych folderów związanych z UniFi Poller, które są częścią mojej konfiguracji. UniFi Poller to kontenery służące do zbierania danych telemetrycznych z kontrolera UniFi, które następnie mogą być wizualizowane w Grafanie. Skupimy się na innych aspektach konfiguracji i migracji kontrolera UniFi.
  • Wewnątrz folderu network-application, utwórz dwa podfoldery: config oraz mongodb. Podfolder config będzie służył do przechowywania plików konfiguracyjnych, natomiast mongodb będzie przeznaczony do zarządzania danymi bazy danych.

Krok 2 – Stwórz skrypt do stworzenia bazy danych

  • Powróć do folderu network-application, a następnie otwórz folder mongodb. W tym miejscu utwórz plik o nazwie init-mongo.js. Następnie, wklej do tego pliku zawartość kodu, który jest podany poniżej. Ten plik będzie używany do inicjalizacji i konfiguracji bazy danych MongoDB dla Unifi Network Application. Upewnij się, że kod odpowiada specyfikacjom potrzebnym dla Twojej konfiguracji – przede wszystkim zmień hasło domyślne.
db.getSiblingDB("unifi").createUser({user: "unifi", pwd: "unifi", roles: [{role: "readWrite", db: "unifi"}]});
db.getSiblingDB("unifi_stat").createUser({user: "unifi", pwd: "unifi", roles: [{role: "readWrite", db: "unifi_stat"}]});

Krok 3 – Pobierz kopię zapasową z UniFi Controller

Aby przenieść istniejące konfiguracje Site z obecnego kontrolera do nowego repozytorium Network Application, ważnym krokiem jest pobranie kopii zapasowej istniejących urządzeń i konfiguracji. Pozwoli to na łatwe przeniesienie wszystkich ustawień i zarejestrowanych urządzeń do nowego środowiska, eliminując konieczność ponownej rejestracji i konfiguracji każdego urządzenia od początku. Ułatwi to proces migracji, zachowując wszystkie istotne ustawienia i dane.

  • Aby rozpocząć proces migracji, zaloguj się do panelu administracyjnego obecnego kontrolera.
UniFi, ekran logowania
  • W panelu administracyjnym kontrolera, znajdź i wybierz ikonę koła zębatego, która reprezentuje ustawienia (Settings). Ta opcja znajduje się w menu po lewej stronie ekranu i zapewnia dostęp do różnych konfiguracji i ustawień systemu.
UniFi Controller, Settings
  • Po wybraniu ustawień, przejdź do zakładki System. Ta część interfejsu użytkownika zawiera istotne funkcje zarządzania systemem.
UniFi Controller, System tab
  • W kolejnym kroku, w zakładce System, przejdź do sekcji Backups, która znajduje się w menu w górnej części strony. Ta sekcja umożliwia zarządzanie kopiami zapasowymi systemu, co jest niezbędne do zabezpieczenia Twoich danych i ustawień przed migracją do nowego środowiska UniFi Network Application.
UniFi Controller, Backups
  • Kliknij przycisk Download w sekcji Backups, aby pobrać najnowszą kopię zapasową utworzoną przez obecny kontroler UniFi.
UniFi Controller, List of backups
  • Po kliknięciu, zaczekaj chwilę, aż system przygotuje i pobierze plik z kopią zapasową. Ten plik będzie zawierał wszystkie niezbędne dane i ustawienia, które są wymagane do późniejszej migracji do nowego środowiska UniFi Network Application.

Krok 4 – Aktualizacja Stack Docker Compose w Portainerze

Ten krok polega na zalogowaniu się do Portainera i zmodyfikowaniu istniejącego stosu (Stack) poprzez wprowadzenie nowego kodu Docker Compose. W tej nowej konfiguracji Docker Compose uwzględnisz oddzielne usługi dla bazy danych MongoDB oraz dla Unifi Network Application. W ten sposób zintegrujesz zarówno bazę danych, jak i aplikację w ramach jednego rozwiązania kontenerowego.

  • Zaloguj się na swoje konto i przejdź do interfejsu administracyjnego Portainera.
    • Jeśli korzystasz z systemu jednokrotnego logowania Authentik, możesz ułatwić sobie proces logowania, integrując Portainer z Authentikiem. Instrukcje dotyczące integracji znajdziesz w dedykowanym poradniku
  • Wybierz swoje środowisko (eng: Environments) w którym będziesz edytować konfigurację utworzonego Docker Compose. Następnie przejdź do Stacks i wybierz utworzony Stack o nazwie unifi.
Portainer, Stack UniFi Controller
  • W górnej części pod nazwą Stack details przejdź do Editor.
  • Poprzednią zawartość Docker Compose odnoszącego się do repozytorium UniFi Controllera podmień na nowy kod przedstawiony poniżej:
---
version: "3.9"

services:
  unifi_net_app_db:
    image: mongo:4.4
    container_name: unifi_network_application-db
    hostname: unifi-net-app-db
    mem_limit: 2g
    cpu_shares: 768
    healthcheck:
      test: ["CMD", "mongo", "--eval", "db.adminCommand('ping')"]
      interval: 10s
      timeout: 10s
      retries: 5
      start_period: 20s
    networks:
      - unifi_network
    volumes:
      - /volume1/docker/unifi/network-application/mongodb/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
      - /volume1/docker/unifi/network-application/mongodb:/var/lib/mongo:rw
      - /volume1/docker/unifi/network-application/mongodb:/data/configdb:rw
      - /volume1/docker/unifi/network-application/mongodb:/data/db:rw
    restart: unless-stopped

  unifi_net_app_server: 
    image: linuxserver/unifi-network-application:8.0.26
    container_name: unifi_network_application-server
    hostname: unifi-net-app-server
    environment:
      - PUID=1026
      - PGID=100
      - TZ=Europe/Warsaw
      - MONGO_HOST=unifi-net-app-db
      - MONGO_USER=unifi
      - MONGO_PASS=unifi
      - MONGO_PORT=27017 
      - MONGO_DBNAME=unifi
      - MEM_LIMIT=1024
      - MEM_STARTUP=1024
      - MONGO_TLS=false
    volumes:
      - /volume1/docker/unifi/network-application/config:/config
    ports:
      - 8443:8443 
      - 3478:3478/udp 
      - 10001:10001/udp 
      - 8080:8080 
     # - 1900:1900/udp #optional
      - 8843:8843 #optional 
      - 8880:8880 #optional
      - 6789:6789 #optional  
     # - 5514:5514/udp #optional
    restart: unless-stopped 
    networks:
      - unifi_network
    depends_on:
      - unifi_net_app_db  

networks:
  unifi_network:
    name: unifi_network
    ipam:
      config:
        - subnet: 192.168.200.0/24 

Parametry

Podczas uruchamiania możemy określić parametry konfigurujące kontenery (takie jak te zawarte powyżej). Parametry te są rozdzielane dwukropkiem i wskazują kolejno <zewnętrzny>:<wewnętrzny>. Na przykład, -p 8080:80 sprawi, że port 80 wewnątrz kontenera będzie dostępny z zewnątrz kontenera, z IP hosta, na porcie 8080.

Time Zone
  • Po wklejeniu kodu w edytorze, zmień wartość dla strefy czasowej (TZ), wybierając odpowiednią strefę czasową z tej listy.
PUID i PGID

Gdy używasz woluminów (parametru -v), mogą wystąpić kwestie związane z uprawnieniami pomiędzy systemem operacyjnym gospodarza a kontenerem. Aby obejść te problemy, dajemy możliwość wyboru identyfikatora użytkownika (PUID) oraz grupy użytkownika (PGID).

    • Przed wklejeniem powyższego kodu w obszar edytora, zmień wartości numerów dla PUID i PGID na swoje własne wartości PUID i PGID. Wartości PUID i PGID odnoszą się do danego konta istniejącego na Synology. Musisz wpisać swoje własne wartości.
    • Aby sprawdzić swoje wartości PUID i PGID na systemie Linux, możesz użyć terminala. Wpisz komendę id nazwa_użytkownika (zastępując nazwa_użytkownika własną nazwą użytkownika na komputerze). Wynik tej komendy pokaże Twoje identyfikatory PUID (UID) i PGID (GID). Te wartości są niezbędne do prawidłowej konfiguracji kontenerów Docker, gdyż pozwalają na dopasowanie uprawnień plików i katalogów w kontenerze do Twojego systemu.
id jkowalski
uid=1026(jkowalski) gid=100(users) groups=100(users),101(administrators)

Krok 5 – Uruchom Network Application i wgraj kopię zapasową kontrolera

Ostatni krok polega na uruchomieniu Network Application wraz z MongoDB i zaimportowaniu wcześniej pobranej kopii zapasowej z poprzedniego kontrolera.

Po uruchomieniu nowego środowiska Unifi Network Application, będziesz miał możliwość wgrania zapisanych ustawień i konfiguracji, dzięki czemu wszystkie urządzenia i ustawienia sieciowe zostaną przywrócone w nowym systemie bez potrzeby ręcznej rekonfiguracji. To ułatwi szybkie przystosowanie się do nowego środowiska i zapewni ciągłość działania sieci.

Logowanie

  • Zaloguj się, korzystając z adresu https://unifi.xyz.com. Należy pamiętać, że pierwsze uruchomienie i konfiguracja bazy danych mogą zająć trochę czasu.
  • Po uruchomieniu, zacznijmy od wybrania opcji przywrócenia konfiguracji z poprzedniego kontrolera, klikając na Restore Server from a Backup na dole ekranu,
  • Następnie wybierz plik z kopią zapasową i potwierdź chęć jej wgrania. Proces przywracania ustawień może trochę potrwać.
UniFi Network Application, Restore from backup
  • Po zakończeniu tego procesu, Twoje urządzenia powinny być już prawidłowo zintegrowane z nowym środowiskiem Network Application.
  • Gotowe! 🚀

Dodatkowe źródła i informacje

Przeczytaj także

Filip Chochół

Filip Chochol runs two blogs: personal “chochol.io” and together with his girlfriend “Warsaw Travelers” about travel. He specializes in IT resource management and technical support, and has been active in the field of cyber security awareness for almost two years. A proponent of open-source technologies, he previously worked in the film and television industry in the camera division (2013-2021). After hours, he develops interests in smart homes and networking.

Dodaj komentarz

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


This site uses Akismet to reduce spam. Learn how your comment data is processed.