Przejdź do treści

Konfiguracja appsettings.json

Plik appsettings.json to główny plik konfiguracyjny API systemu Navigator365. Znajdziesz go w katalogu aplikacji – podczas wdrożenia to właśnie ten plik (lub zmienne środowiskowe) decyduje o tym, jak system się zachowuje.

Jak ustawiać konfigurację w Docker

Navigator365 uruchamia się jako kontener Docker. Wartości z appsettings.json można nadpisać na dwa sposoby:

Zmienne środowiskowe (zalecane)

ASP.NET Core automatycznie mapuje zmienne środowiskowe na klucze konfiguracji. Separatorem sekcji jest podwójny podkreślnik __.

Przykład w docker-compose.yml:

services:
  navigator365-api:
    image: navigator365/api:latest
    environment:
      - AppSettings__License=TWOJ-KLUCZ-LICENCYJNY
      - AppSettings__FileStorePath=/data/files
      - JwtSettings__TokenSecret=bardzo-dlugi-losowy-ciag-znakow-min-32-znaki
      - JwtSettings__AccessTokenExpireMinutes=15
      - FrontEndHostAddress=https://navigator.twojafirma.pl
    volumes:
      - navigator_files:/data/files

Podpięcie pliku konfiguracyjnego

Alternatywnie można podpiąć własny plik appsettings.local.json jako wolumin:

volumes:
  - ./config/appsettings.local.json:/app/appsettings.local.json:ro

Plik appsettings.local.json jest wczytywany po głównym appsettings.json i nadpisuje jego wartości – wystarczy umieścić w nim tylko te klucze, które chcesz zmienić.


AppSettings

Podstawowe ustawienia aplikacji.

Klucz Opis
License Klucz licencyjny systemu Navigator365 otrzymany od dostawcy
FileStorePath Ścieżka na dysku, w której przechowywane są załączniki i pliki przesyłane przez użytkowników. W Docker powinna wskazywać na katalog zamontowany jako wolumin, by dane przeżyły restart kontenera

Przykład (docker-compose):

environment:
  - AppSettings__License=TWOJ-KLUCZ
  - AppSettings__FileStorePath=/data/files
volumes:
  - navigator_files:/data/files

DockerSettings

Klucz Wartość domyślna Opis
IsReady true Informuje aplikację, że działa w środowisku Docker. Wpływa na działanie health-checka – endpoint /health zwraca status gotowości kontenera, który Docker i orkiestratory (np. Kubernetes) odpytują, by sprawdzić czy aplikacja jest gotowa do obsługi ruchu

JwtSettings

JWT (JSON Web Token) to mechanizm uwierzytelniania użytkowników. Po zalogowaniu system wydaje token, który przeglądarka przesyła przy każdym żądaniu. Aplikacja weryfikuje ten token za pomocą poniższych ustawień.

Klucz Opis
TokenSecret Tajny klucz używany do podpisywania tokenów. Musi być unikalny dla każdej instalacji – jeśli ktoś go pozna, może sfałszować tokeny i zalogować się jako dowolny użytkownik. Zalecana długość: minimum 32 znaki losowych znaków
ValidateIssuer Czy sprawdzać, skąd pochodzi token. Ustaw true w środowisku produkcyjnym
Issuer Adres serwera API – wpisywany w token jako informacja o wystawcy
ValidateAudience Czy sprawdzać, dla kogo przeznaczony jest token. Ustaw true w środowisku produkcyjnym
Audiences Lista adresów aplikacji obsługujących ten token
AccessTokenExpireMinutes Jak długo ważny jest token logowania (w minutach). Po tym czasie użytkownik zostanie wylogowany, chyba że przeglądarka odświeży token automatycznie. Typowe wartości: 5–60 minut
RefreshTokenExpireMinutes Jak długo użytkownik pozostaje zalogowany bez konieczności ponownego wpisywania hasła (w minutach). Domyślnie 43200 = 30 dni

Przykład (docker-compose):

environment:
  - JwtSettings__TokenSecret=zmien-mnie-na-dlugi-losowy-ciag-znakow-XyZ123
  - JwtSettings__ValidateIssuer=true
  - JwtSettings__Issuer=https://api.navigator.twojafirma.pl
  - JwtSettings__AccessTokenExpireMinutes=15

RefreshTokenCookie

Ustawienia ciasteczka HTTP, w którym przeglądarka przechowuje token odświeżający.

Klucz Opis
Path Ciasteczko będzie wysyłane tylko do żądań pod ten adres URL. Ogranicza ekspozycję tokenu – zostaw domyślną wartość /api/auth
HttpOnly true = ciasteczko jest niewidoczne dla JavaScriptu (ochrona przed kradzieżą przez złośliwe skrypty). Zalecane: true
Secure true = ciasteczko wysyłane tylko przez szyfrowane połączenie HTTPS. W produkcji zawsze true. Podczas testów lokalnych przez HTTP zmień na false
SameSite Kontroluje, kiedy ciasteczko jest wysyłane przy żądaniach z innych stron. Strict = tylko z tej samej domeny (najlepsze bezpieczeństwo)

AuthenticationSettings

Wybór metody logowania użytkowników.

Klucz Opis
UseWindows true = użytkownicy logują się kontem domenowym Windows (Active Directory). Nie muszą wpisywać hasła – system rozpoznaje ich automatycznie na podstawie konta Windows. Wymaga środowiska domenowego
UseIsam true = logowanie przez zewnętrzny system ISAM (IBM Security Access Manager). Używane w środowiskach korporacyjnych z centralnym zarządzaniem tożsamością
PostLogoutRedirectUrl Opcjonalny adres URL, pod który frontend ma przekierować użytkownika po wylogowaniu. Przydaje się np. przy integracji z zewnętrznym SSO, stroną startową firmy albo osobnym portalem logowania. Zostaw puste, aby po wylogowaniu wracać do ekranu logowania Navigator365

Jeśli obie wartości to false, użytkownicy logują się standardowym loginem i hasłem wpisanym w systemie Navigator365.

Przykład (docker-compose):

environment:
  - AuthenticationSettings__UseWindows=false
  - AuthenticationSettings__UseIsam=false
  - AuthenticationSettings__PostLogoutRedirectUrl=https://login.twojafirma.pl/logout

SecuritySettings

Reguły bezpieczeństwa kont użytkowników.

Klucz Opis
RequireConfirmedEmail true = nowy użytkownik musi kliknąć link aktywacyjny wysłany na e-mail, zanim będzie mógł się zalogować
RequireUniqueEmail true = nie można założyć dwóch kont z tym samym adresem e-mail (zalecane)
MaxFailedAccessAttempts Po ilu nieudanych próbach logowania konto zostanie czasowo zablokowane. Chroni przed atakami brute-force
DefaultLockoutTimeSpan Jak długo (w minutach) konto pozostaje zablokowane po przekroczeniu limitu prób

PasswordSecuritySettings

Wymagania, które musi spełniać hasło nowego użytkownika.

Klucz Opis
RequireDigit Wymaga co najmniej jednej cyfry (0–9)
RequireUppercase Wymaga co najmniej jednej wielkiej litery
RequireLowercase Wymaga co najmniej jednej małej litery
RequireNonAlphanumeric Wymaga co najmniej jednego znaku specjalnego (np. !, @, #)
RequiredLength Minimalna długość hasła w znakach

Hangfire

Hangfire to wewnętrzny scheduler – uruchamia zadania w tle, takie jak wysyłanie powiadomień, generowanie raportów czy synchronizacje z zewnętrznymi systemami.

General

Klucz Opis
WorkerCount Ile zadań może być przetwarzanych jednocześnie. Zwiększ, jeśli system ma dużo zadań w kolejce i serwer ma odpowiednią liczbę rdzeni
SchedulePollingIntervalSeconds Co ile sekund scheduler sprawdza, czy są zadania do wykonania. Mniejsza wartość = szybsze reagowanie, ale większe obciążenie bazy
DistributedLockTimeoutIntervalMinutes Ile minut scheduler czeka na zwolnienie blokady, zanim uzna zadanie za nieobsługiwane. Ważne w środowiskach z wieloma instancjami API

Dashboard

Panel zarządzania zadaniami Hangfire dostępny pod adresem /hangfire. Pozwala podglądać kolejkę zadań, historię wykonań i błędy.

Klucz Opis
Username Login do panelu. Zostaw puste, jeśli panel nie powinien być publicznie dostępny (zalecane schowanie go za VPN lub firewallem)
Password Hasło do panelu

Przykład (docker-compose):

environment:
  - Hangfire__Dashboard__Username=admin
  - Hangfire__Dashboard__Password=bezpieczne-haslo

OpenSearchSettings

OpenSearch to wyszukiwarka pełnotekstowa – umożliwia szybkie przeszukiwanie treści dokumentów w systemie. Jest opcjonalna; jeśli nie jest skonfigurowana, wyszukiwanie działa jedynie po metadanych.

Klucz Opis
Uri Adres URL instancji OpenSearch, np. http://opensearch:9200
Auth.Username Nazwa użytkownika OpenSearch
Auth.Password Hasło użytkownika OpenSearch
EmbeddingsUri Adres serwisu generującego wektory semantyczne (embeddingi), używanego przez funkcje AI do wyszukiwania znaczeniowego. Zostaw puste, jeśli nie używasz modułu AI

Przykład (docker-compose):

environment:
  - OpenSearchSettings__Uri=http://opensearch:9200
  - OpenSearchSettings__Auth__Username=admin
  - OpenSearchSettings__Auth__Password=haslo-opensearch

Indices

Lista indeksów OpenSearch konfigurowanych przez system. Zazwyczaj nie wymaga zmian – domyślna konfiguracja jest odpowiednia dla większości instalacji.

Klucz Opis
Alias Nazwa indeksu w OpenSearch, np. documents_pl dla dokumentów po polsku
Version Wersja schematu indeksu. Zmiana wartości wymusza przebudowanie indeksu
UseMinimalSettings true = uproszczona konfiguracja indeksu (mniejsze zużycie zasobów, odpowiednie dla małych instalacji)

StackManagement

Integracja z zewnętrzną usługą zarządzania stosami. Zostaw puste, jeśli ta integracja nie jest używana.

Klucz Opis
BaseUrl Adres URL API zewnętrznej usługi
ApiKey Klucz API do autoryzacji żądań

AISettings

Ustawienia modułu sztucznej inteligencji odpowiedzialnego za automatyczne odczytywanie danych z dokumentów (np. OCR z AI, ekstrakcja pól z faktur).

Klucz Opis
AIDataCaptureUri Adres serwisu AI. Serwis ten musi być dostępny sieciowo z kontenera API

Przykład (docker-compose):

environment:
  - AISettings__AIDataCaptureUri=http://ai-service:8000

LicenseServer

Konfiguracja połączenia z serwerem licencji Navigator365. Wymagana do weryfikacji aktywnej licencji.

Klucz Opis
Url Adres URL serwera licencji – otrzymasz go od dostawcy systemu
ApiKey Klucz API do autoryzacji – unikalny dla każdej instalacji

Ustawienia ogólne

Klucz Opis
AllowedHosts Lista hostów (domen), z których API przyjmuje żądania. * oznacza wszystkie domeny – odpowiednie do testów; w produkcji wpisz konkretną domenę, np. api.navigator.twojafirma.pl
FrontEndHostAddress Publiczny adres frontendu aplikacji, np. https://navigator.twojafirma.pl. Używany w linkach wysyłanych e-mailem (np. reset hasła) oraz w konfiguracji CORS
DefaultBackgroundServicesInterval Co ile minut uruchamiane są domyślne procesy w tle
WorkflowSubstitutionsInterval Co ile minut system sprawdza zastępstwa w obiegach dokumentów (np. gdy pracownik jest na urlopie)
TrashCleanupInterval Co ile minut system automatycznie czyści elementy usunięte do kosza po upływie okresu retencji
MaxAgeOfLogsInDays Po ilu dniach logi systemowe są usuwane z bazy danych. Zmniejsz, jeśli baza szybko rośnie
KeysPath Ścieżka do klucza szyfrowania ASP.NET Core Data Protection, używanego m.in. do zabezpieczania ciasteczek sesji. W Docker wskaż na katalog zamontowany jako wolumin – inaczej po restarcie kontenera wszyscy użytkownicy zostaną wylogowani

Przykład pełnej konfiguracji ogólnej (docker-compose):

environment:
  - AllowedHosts=navigator.twojafirma.pl
  - FrontEndHostAddress=https://navigator.twojafirma.pl
  - KeysPath=/keys
  - MaxAgeOfLogsInDays=30
volumes:
  - navigator_keys:/keys