Skip to Content
Tworzenie aplikacji IoTUdziały sieciowe

Udziały sieciowe

W wielu zakładach przemysłowych pliki trzymane są na serwerze NAS lub serwerze plików Windows w sieci lokalnej — wyniki skanowania trafiają do \\nas\production, raporty odczytywane są z udostępnionego folderu, maszyny wymieniają pliki przez SMB. Aplikacja IronFlock może zamontować taki udział bezpośrednio w swoich kontenerach, dzięki czemu twój kod odczytuje go i zapisuje jak zwykły katalog lokalny.

To odpowiednik on-premises Magazynu plików: Magazyn plików to zarządzany magazyn obiektów platformy, a udział sieciowy to własny serwer plików klienta w jego własnej sieci LAN. Użyj udziału, gdy pliki muszą trafiać do istniejącej infrastruktury klienta.

Obsługiwane są dwa protokoły: SMB/CIFS (serwery plików Windows, praktycznie każdy NAS) oraz NFS (powszechny na serwerach opartych na Linuksie).

Jak to działa

Montowanie deklaruje się jako nazwany wolumen w pliku docker-compose.yml aplikacji, z użyciem wbudowanego w Docker sterownika wolumenów local. Silnik Docker na urządzeniu sam wykonuje montowanie przy starcie kontenerów — na urządzeniu nie trzeba niczego instalować, a użytkownik urządzenia nigdy nie dotyka wiersza poleceń.

Adres udziału i poświadczenia nie są wpisywane do pliku compose. Są to symbole zastępcze ${VARIABLE}, wypełniane per urządzenie z parametrów aplikacji — tym samym mechanizmem co każde inne ustawienie per urządzenie. Użytkownicy konfigurują udział w formularzu Parametry aplikacji na każdym urządzeniu (lub jednorazowo per grupa urządzeń) i ponownie uruchamiają aplikację.

Deklarowanie wolumenu

Dodaj do docker-compose.yml nazwany wolumen z driver_opts i zamontuj go w usługach, które go potrzebują:

services: app: build: . volumes: - netshare:/mnt/share restart: unless-stopped volumes: netshare: # Wolumeny Docker zachowują ustawienia, z którymi zostały utworzone. # Umieszczenie parametru rewizji w nazwie wolumenu oznacza: podnieś rewizję, # uruchom aplikację ponownie, a powstanie świeży wolumen z bieżącymi ustawieniami. name: "${APP_NAME}_share_r${SHARE_REV:-1}" driver: local driver_opts: type: cifs device: "//${SHARE_HOST}/${SHARE_NAME}" o: "username=${SHARE_USER},password=${SHARE_PASSWORD},vers=3.0,uid=1000,gid=1000"

Twój kod pracuje odtąd z /mnt/share jak ze zwykłym katalogiem.

Elementy, które warto rozumieć:

PoleZnaczenie
deviceAdres udziału: //server/sharename dla SMB
oOpcje montowania, rozdzielane przecinkami. vers=3.0 wybiera wersję protokołu SMB; uid/gid decydują, który użytkownik kontenera jest właścicielem plików — dopasuj je do użytkownika, jako który działa twój proces
nameTożsamość wolumenu na urządzeniu. Docker nigdy nie zmienia istniejącego wolumenu, dlatego rewizja ustawień jest częścią nazwy — zobacz niżej
${VAR:-fallback}Interpolacja Compose z wartością domyślną. Nadaj każdemu symbolowi zastępczemu wartość domyślną (choćby pustą), aby plik zawsze dawał się sparsować

APP_NAME to jedna ze standardowych zmiennych udostępnianych automatycznie przez platformę; wiąże ona nazwę wolumenu z twoją aplikacją.

Umożliwienie konfiguracji

Zadeklaruj symbole zastępcze w .ironflock/env-template.yml, aby użytkownicy otrzymali pełnoprawny formularz — z hasłem maskowanym jako sekret:

SHARE_HOST: label: "File server (IP or hostname)" type: text defaultValue: "" description: "The SMB server or NAS on the device's local network." SHARE_NAME: label: "Share name" type: text defaultValue: "" SHARE_USER: label: "Username" type: text defaultValue: "" SHARE_PASSWORD: label: "Password" type: text secret: true defaultValue: "" SHARE_REV: label: "Storage settings revision" type: numeric defaultValue: 1 description: "Increase by 1 whenever you change one of the settings above, then restart the app."

Na każdym urządzeniu użytkownik wypełnia formularz w sekcji Parametry aplikacji, zapisuje i ponownie uruchamia aplikację. Ustawienie parametrów na poziomie grupy urządzeń konfiguruje całą flotę względem tego samego serwera plików w jednym kroku.

Późniejsza zmiana ustawień

Docker tworzy wolumen przy pierwszym użyciu i od tej chwili zachowuje jego ustawienia — sama edycja parametrów nie przekieruje istniejącego wolumenu. Właśnie do tego służy parametr rewizji: po zmianie dowolnego ustawienia udziału użytkownik zwiększa rewizję o 1 i ponownie uruchamia aplikację. Nowa nazwa wolumenu sprawia, że Docker tworzy montowanie od nowa, z bieżącymi wartościami.

Nic z tego nie dotyka niczego na serwerze plików: wolumen to wyłącznie definicja montowania. Jego utworzenie, odtworzenie pod nową rewizją ani odinstalowanie aplikacji nigdy nie usuwa plików na udziale.

NFS

Dla serwera NFS ten sam wzorzec z innymi driver_opts:

volumes: netshare: name: "${APP_NAME}_share_r${SHARE_REV:-1}" driver: local driver_opts: type: nfs device: ":${SHARE_PATH}" o: "addr=${SHARE_HOST},nfsvers=4"

SHARE_PATH to eksportowana ścieżka (np. /exports/production), addr — serwer. Preferuj NFSv4 (nfsvers=4) — potrzebuje tylko tej jednej opcji i żadnych dodatkowych usług na urządzeniu.

Obsługiwane urządzenia

Typ urządzeniaSMB/CIFSNFS
Urządzenia Linux (niestandardowa instalacja systemu Linux)
Urządzenia Windows (Docker Desktop)
Urządzenia FlockOSjeszcze niedostępnejeszcze niedostępne

Na urządzeniach Windows montowanie odbywa się wewnątrz linuksowego środowiska Docker Desktop, które zawiera klientów obu protokołów — działa to od razu, łącznie z dostępem do serwerów SMB w sieci LAN urządzenia. Na urządzeniach Linux obsługę protokołów zapewniają standardowe jądra dystrybucji; nie trzeba instalować żadnych pakietów. Obsługa na FlockOS wymaga aktualizacji systemu operacyjnego, która nie została jeszcze wydana — skontaktuj się z nami, jeśli potrzebujesz jej właśnie tam.

Montowanie wymaga aktualnego agenta urządzenia; agent aktualizuje się automatycznie.

Warto wiedzieć

  • Nieskonfigurowane urządzenia: dopóki parametry nie zostaną wypełnione, aplikacja nie startuje, a w jej logach na żywo pojawia się błąd montowania. Jeśli twoja aplikacja ma działać także bez udziału, nie montuj go bezwarunkowo — zamiast tego odczytaj parametry w kodzie i pomiń funkcje zależne od udziału.
  • Poświadczenia: utwórz na serwerze plików dedykowane konto z dostępem wyłącznie do tego udziału i użyj go w parametrach. Hasło jest maskowane w interfejsie platformy, ale trafia na urządzenie wykonujące montowanie — traktuj je jako materiał lokalny dla urządzenia, a nie jako globalne poświadczenie administratora.
  • Bez przecinków w hasłach: opcje SMB przekazywane są jako ciąg rozdzielany przecinkami, więc hasło zawierające przecinek psuje montowanie. Dobierz hasło konta udziału z myślą o tym.
  • Adres serwera: użyj adresu IP lub nazwy, którą rozwiązuje DNS zakładu. Nazwy mDNS takie jak nas.local często nie dają się rozwiązać z wnętrza silnika Docker.
  • Zapora sieciowa: urządzenie łączy się z serwerem plików na porcie TCP 445 (SMB) lub TCP 2049 (NFS). W segmentowanych sieciach fabrycznych upewnij się, że ta ścieżka jest otwarta.
  • Własność plików (SMB): pliki widoczne są w kontenerze jako należące do uid/gid z opcji montowania. Jeśli twój proces działa jako użytkownik inny niż root, ustaw je na tego użytkownika — inaczej zapisy będą kończyć się błędem.
Last updated on