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:
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 .csv → text/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:
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:
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:
Skrypt:
- znajduje zadanie po nazwie
Posejdon - sync Nexo do Baselinker, - jest idempotentny — jeśli
--csv-filejuż 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}.lognaposejdon-{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:
Kolumny:
| Kolumna | Co znaczy |
|---|---|
produkt_id |
ID produktu w BaseLinkerze. |
prog_hala_7 |
Próg dla magazynu HALA7 — max(ceil(rozchód_5_dni), 5). |
prog_20dni |
Próg dla MAGAZYN POMOCNICZY — max(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:
- Właściciel zgłasza problem przez Forgejo (
aio/posejdonissues). - Wykonawca naprawia w kodzie, mergeuje do
main, taguje wersję. - Właściciel u siebie:
- 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¶
- Pierwsze omówienie Posejdona — Sklepy → Posejdon.
- Repozytorium kodu —
git.aiofactory.pl/aio/posejdon(README + skrypty*.ps1). - Podsumowanie integracji BaseLinker / Subiekt — FAQ #19.
- Dlaczego nie ma Subiekta w panelu — Pierwsze kroki — Słowniczek → Subiekt.
- Granica wsparcia ogólna — Granica wsparcia (theme/plugins/treść).