Przejdź do treści

Subiekt / Posejdon — instalacja + cron

Strona ta jest pełnym podręcznikiem instalacji i utrzymania aplikacji Posejdon — mostu między Subiektem (Nexo) a BaseLinkerem. Posejdon działa na serwerze Windows u właściciela — nie na naszej infrastrukturze. Tej strony używaj zarówno przy pierwszej instalacji, jak i przy reinstall / migracji na nowy host Windows.

Krótkie wprowadzenie i kontekst biznesowy są w Sklepy → Posejdon. Tutaj wchodzimy w szczegóły operacyjne.

Krótko

  • Co to jest: .NET 8 Windows console — co tydzień czyta rozchody z Subiekta przez InsERT Moria Sfera SDK, sumuje w oknach 5 / 10 / 20 / 30 / 40 dni i zapisuje wyniki do dodatkowych pól produktów BaseLinkera + emituje plik CSV obsługiwany przez IIS na porcie 8081.
  • Repozytorium: git.aiofactory.pl/aio/posejdon — kod + skrypty bootstrap + README.
  • Hostuje: właściciel, na własnym serwerze Windows. Nie mamy zdalnego dostępu.
  • Aktualizacja: git pull + dotnet build — bez migracji bazy, bez edycji konfiguracji.
  • Granica wsparcia: naprawiamy bugi w kodzie, nie w środowisku. Patrz Granica wsparcia.

Wymagania serwera Windows

Przed instalacją serwer musi mieć:

Komponent Wersja Skąd
Windows Server 2022 (przetestowane) właściciel
.NET 8 SDK net8.0-windows10.0.17763.0, win-x64 dotnet.microsoft.com
InsERT nexoSDK aktualny dla używanej wersji Nexo dystrybutor InsERT (płatny)
Subiekt Nexo dowolna wersja przed v57 InsERT (właściciel ma już zainstalowany)
BaseLinker token uprawnienia inventory write panel BaseLinkera
Konto operatora Nexo + login SQL dostęp do bazy Nexo InsERT / DBA

InsERT nexoSDK musi być zainstalowany lokalnie

Build oczekuje DLL-i pod C:\nexoSDK\Bin\ (override przez MSBuild property nexoSdkBinPath). Bez nexoSDK kompilacja Posejdon.csproj się nie uda. SDK nie da się rozprowadzić razem z aplikacją z powodów licencyjnych.

Nexo Pro v57+ — niewspierane

Posejdon używa starego frameworku Sfera SDK. Subiekt Nexo Pro v57+ wymaga przepisania konektora — to świadomie odroczone do migracji właściciela na nowy framework, żeby uniknąć podwójnego przepisywania (oferta str. 4). Do tego czasu zostań na Nexo < v57.


Pierwsza instalacja

1. Klonowanie repo i build

W konsoli PowerShell (Administrator):

cd C:\Users\IT\Documents
git clone https://git.aiofactory.pl/aio/posejdon.git
cd posejdon
dotnet build Posejdon.sln -c Release

Build kopiuje obok binarki:

  • Xml.pak,
  • sni.dll,
  • ijwhost.dll,
  • Microsoft.Data.SqlClient.SNI.dll

z folderu nexoSDK Bin. Wynik: C:\Users\IT\Documents\posejdon\bin\x64\Release\Posejdon.exe.

2. Test pierwszego uruchomienia (dry-run)

Zanim podepniesz scheduled task, sprawdź że Posejdon w ogóle się łączy:

.\bin\x64\Release\Posejdon.exe `
  --server <sql-server>\<instance> `
  --database <nexo-db> `
  --sql-login <sql-user> --sql-password <sql-pass> `
  --nexo-operator <nexo-op> --nexo-password <nexo-pass> `
  --baselinker-token <bl-token> `
  --warehouse MAG7 `
  --inventory-id 43228 `
  --dry-run `
  --limit 5

--dry-run czyta i liczy, ale nie zapisuje do BaseLinkera. --limit 5 ogranicza do 5 produktów. Jeśli wyjście zawiera Exit code 0 i wypisuje sumy rozchodów per okno czasowe — działa.

3. Konfiguracja IIS dla CSV

Posejdon emituje plik thresholds.csv z progami zamówieniowymi. Konsumenci (np. magazynier) pobierają go po HTTP. Konfiguracja:

cd C:\Users\IT\Documents\posejdon
powershell -ExecutionPolicy Bypass -File setup-iis.ps1

Skrypt jest idempotentny — można uruchamiać wielokrotnie. Wykonuje:

Krok Co robi
1 Install-WindowsFeature dla IIS (Web-Server, Web-Static-Content, Web-Mgmt-Console, Web-Default-Doc, Web-Dir-Browsing).
2 Tworzy C:\Users\IT\Documents\posejdon\served\ i wpisuje placeholder thresholds.csv z samym nagłówkiem (żeby site nie zwracał 404 przed pierwszym uruchomieniem Posejdona).
3 Nadaje IIS_IUSRS uprawnienia ReadAndExecute do tego folderu.
4 Tworzy IIS site Posejdon-Served na porcie 8081 wskazujący na ten folder. Nie używamy 8080 — już zajęty przez srvXMAG Nexo. Skrypt sam sprawdza konflikt portów i przerywa jeśli coś nasłuchuje.
5 Rejestruje MIME .csvtext/csv (na poziomie site'u).
6 Otwiera regułę firewall inbound TCP 8081.
Smoke test Invoke-WebRequest http://localhost:8081/thresholds.csv — powinno zwrócić HTTP 200 z Content-Type: text/csv.

Po skrypcie URL produkcyjny:

http://<server>:8081/thresholds.csv

LAN-owe IP też zostaną wypisane. Jeśli planujesz konsumować plik z innego hosta — używaj LAN IP, nie localhost.

4. Uprawnienia ACL — fix gdy IIS dostaje 401

Jeśli z jakiegoś powodu IIS nie czyta plików (typowo: ktoś zmodyfikował uprawnienia ręcznie), uruchom:

powershell -ExecutionPolicy Bypass -File fix-iis-perms.ps1

Skrypt nadaje IIS_IUSRS ReadAndExecute na folder served\.

5. Scheduled Task

Posejdon chodzi raz na tydzień (typowo niedziela rano). Stwórz scheduled task ręcznie (przez Task Scheduler GUI lub New-ScheduledTask w PowerShellu):

Parametr Wartość
Nazwa Posejdon - sync Nexo do Baselinker
Trigger Tygodniowy, niedziela 04:00
Akcja → Program C:\Users\IT\Documents\posejdon\bin\x64\Release\Posejdon.exe
Akcja → Argumenty --server ... --database ... --sql-login ... --sql-password ... --nexo-operator ... --nexo-password ... --baselinker-token ... --warehouse MAG7 --inventory-id 43228 --log-file "C:\Users\IT\Documents\posejdon\logs\posejdon-{datetime}.log" --csv-file "C:\Users\IT\Documents\posejdon\served\thresholds-{datetime}.csv"
Akcja → Working directory C:\Users\IT\Documents\posejdon\
Konto Konto z dostępem do bazy Nexo i prawem zapisu do served\ (zwykle dedykowane konto serwisowe).
Restart przy błędzie Po 30 min, max 2 razy.

Po stworzeniu zadania uruchom je raz ręcznie (Run w Task Scheduler) i obserwuj log w logs\posejdon-<timestamp>.log.

Gotowy skrypt aktualizacji argumentów

Jeśli masz już zadanie i chcesz dorzucić --csv-file (np. po pierwszej instalacji bez tej opcji), repo zawiera helper:

powershell -ExecutionPolicy Bypass -File update-scheduled-task.ps1

Skrypt:

  • znajduje zadanie po nazwie Posejdon - sync Nexo do Baselinker,
  • jest idempotentny — jeśli --csv-file już jest w argumentach, kończy się komunikatem „Nothing to do",
  • dopisuje --csv-file "C:\Users\IT\Documents\posejdon\served\thresholds-{datetime}.csv",
  • przy okazji prostuje nazwę logu z posejdon-TEST-{datetime}.log na posejdon-{datetime}.log.

Mapowanie pól BaseLinkera

Posejdon zapisuje sumy rozchodów do extra fields produktów w BaseLinkerze. ID-ki są zaszyte w kodzie (Program.cs):

Okno (dni) BL extra field
5 extra_field_20667
10 extra_field_20668
20 extra_field_20669
30 extra_field_20639
40 extra_field_20670

Jeśli właściciel zmieni te ID-ki w BaseLinkerze (np. po reorganizacji katalogu), trzeba zaktualizować kod i przebudować. Na razie są stałe.


Schemat CSV

Każde uruchomienie z --csv-file zapisuje dwa pliki w served\:

  • thresholds-<timestamp>.csv — wersja historyczna (audyt).
  • thresholds.csv — stabilna kopia, którą serwuje IIS (zawsze najnowsza).

Format:

produkt_id,prog_hala_7,prog_20dni
12345,5,12
12346,5,8

Kolumny:

Kolumna Co znaczy
produkt_id ID produktu w BaseLinkerze.
prog_hala_7 Próg dla magazynu HALA7max(ceil(rozchód_5_dni), 5).
prog_20dni Próg dla MAGAZYN POMOCNICZYmax(ceil(rozchód_20_dni), 5).

Konsumenci (np. skrypt magazyniera generujący zamówienia) pobierają plik po HTTP i porównują z aktualnym stockiem. To poza zakresem Posejdona — on tylko emituje CSV.


Aktualizacja po naprawie buga

Cykl pracy w bug-fix mode:

  1. Właściciel zgłasza problem przez Forgejo (aio/posejdon issues).
  2. Wykonawca naprawia w kodzie, mergeuje do main, taguje wersję.
  3. Właściciel u siebie:
cd C:\Users\IT\Documents\posejdon
git pull
dotnet build Posejdon.sln -c Release
  1. Następne uruchomienie scheduled task używa nowej binarki — bez restartu Windowsa, bez ponownej konfiguracji IIS.

Jeśli build się nie udaje

Najczęstsza przyczyna: nexoSDK po stronie InsERT został zaktualizowany i DLL-e zmieniły interfejsy. Wtedy build wymaga zmian w kodzie (przekompilowanie pod nową wersję SDK) — zgłoś na Forgejo z plikiem dotnet build output.


Granica wsparcia

Co Kto Komentarz
Kod (Program.cs, SferaFactory.cs, *.ps1) My (bug-fix mode) Naprawy w repo Forgejo. Właściciel pobiera + buduje + wdraża.
README + dokumentacja My Repo aio/posejdon + ta strona.
Pierwotna instalacja My (asysta) Możemy poprowadzić zdalnie (TeamViewer / AnyDesk) przy pierwszej instalacji jeśli właściciel poprosi.
Hosting Windows Server Właściciel Nie mamy zdalnego dostępu.
Instalacja .NET 8 SDK + nexoSDK Właściciel Lokalnie u siebie.
dotnet build (kompilacja po git pull) Właściciel Powinien być częścią rutyny po naprawie buga.
Scheduled Task — utrzymanie Właściciel Restart, zmiana harmonogramu, zmiana credenciali.
IIS (port 8081, ACL, firewall) Właściciel Po setup-ie nasze skrypty (setup-iis.ps1, fix-iis-perms.ps1) wystarczają.
Token BaseLinkera, hasła Nexo, login SQL Właściciel Trzymane lokalnie u właściciela. Nie pojawiają się w naszym SOPS.
Backup binarki + plików served\ + logs\ Właściciel Cała maszyna jest u właściciela — backup po jego stronie.
Migracja na Subiekt Nexo Pro v57+ Poza zakresem Wymaga przepisania konektora pod nowy framework — odroczone w ofercie.

Cross-linki