Printer icon

Instalacja nAxiom z poziomu CLI

📅 2026-05-21 sygnet.svg 1.15.6.5 👤 mmy, dbo 37 min.

Spis treści

1. Wprowadzenie

TL;DR

   .\AppInstaller.exe it=:file iv=:".\install.json" nogui

Przykładowa konfiguracja do zapisania jako install.json tutaj. W konfiguracji wymagane jest podanie własnych wartości co najmniej następujących parametrów:

  • CertificateThumbprint: odcisk palca certyfikatu hosta Host
  • CertificateStore: magazyn certyfikatu (jeśli inny niż My)
  • Server, Port, Instance: adres serwera, port i nazwa instancji bazy danych SQL Server (w trzech miejscach)
  • Username, Password: nazwa i hasło administratora bazy danych (GlobalSettings.DatabaseConnectionSA)
  • MessageBrokerConfiguration: wszystkie parametry w sekcji

Instalator nAxiom można uruchomić w linii komend i automatycznie wykonać pełną instalację nAxiom lub zaktualizować działającą witrynę nAxiom, w tym również zmienić parametry konfiguracyjne. Proces instalacji obejmuje następujące kroki:

  • konfigurację witryny IIS oraz pul aplikacji,
  • rozpakowanie pakietów aplikacji (ZIP) na serwer WWW,
  • konfigurację połączeń z bazami danych SQL Server,
  • ustawienie schematów bazy danych,
  • konfigurację brokera komunikatów RabbitMQ,
  • konfigurację diagnostyki (logi, OpenTelemetry),
  • ustawienie restrykcji IP dla poszczególnych aplikacji,
  • konfigurację lokalizacji zasobów (załączniki, e-mail, OCR).

2. Wymagania systemowe

Instalator automatycznie weryfikuje poniższe wymagania w pierwszym kroku. Wymagania oznaczone jako obowiązkowe blokują instalację w przypadku niespełnienia.

Wymaganie Obowiązkowe Opis
System operacyjny Windows Wymagany system Windows
.NET Framework 4.8 Wykorzystywany przez Crystal Reports
.NET 8 Środowisko uruchomieniowe dla aplikacji DotNetCore
ANCM (ASP.NET Core Hosting Bundle) Moduł hostujący dla IIS
IIS 8+ Internet Information Services
IIS — Przeglądanie katalogów Funkcja HTTP: Directory Browsing
IIS — IP Security Moduł zabezpieczeń: IP Address and Domain Restrictions
IIS — Zawartość statyczna Funkcja HTTP: Static Content
IIS — Inicjowanie aplikacji Application Initialization
IIS — Protokół WebSocket Obsługa WebSocket
URL Rewrite (rozszerzenie IIS) Moduł URL Rewrite
Microsoft SQL Server 2016+ Baza danych (może być zdalny serwer)
SAP Crystal Reports Runtime 13 Tylko jeśli instalowany jest moduł Crystal
Uprawnienia administratora Wymagane do zarządzania IIS
Erlang/OTP Wymagane dla RabbitMQ (wersja 27.0–27.3.4.2)
RabbitMQ Broker komunikatów ( wersja 4.0–4.1.3)

Uwaga: Instalator wymaga podniesionych uprawnień (Run as Administrator).

3. Parametry wiersza poleceń (CLI)

3.1 Składnia

AppInstaller.exe [it=:<input_type>] [iv=:"<value>"] [nogui|noguiupdate]

3.2 Lista parametrów

Parametr Wymagany Opis
it=:<input_type> Tak* Typ wejścia konfiguracji. Dozwolone wartości: file, json
iv=:"<value>" Tak* Wartość wejścia — ścieżka do pliku JSON (dla it=:file) lub zminifikowany JSON (dla it=:json)**
nogui Nie Uruchamia instalator w trybie silent — pełna instalacja bez GUI
noguiupdate Nie Uruchamia instalator w trybie silent — aktualizacja plików bez zmiany konfiguracji - pobiera ustawienia konfiguracyjne z witryny działającej na serwerze IIS

Uwagi

* Parametry it i iv są wymagane, gdy podano nogui lub noguiupdate.

** Przy JSON inline należy użyć zminifikowanego formatu i poprawnie stosować znaki ucieczki (\") w cmd/PowerShell.

3.3 Format separatora

Parametry klucz-wartość używają separatora =: (znak równości + dwukropek):

it=:file
iv=:"C:\config\install.json"

3.4 Obsługiwane ścieżki do pliku JSON

Typ ścieżki Przykład Opis
Bezwzględna C:\nAxiom\install.json Pełna ścieżka na dysku
Względna (.\) .\install.json Względem katalogu instalatora
Nadrzędna (..\) ..\config\
install.json
Katalog nadrzędny (z rekurencyjną obsługą)

3.5 Przykładowe użycie

  1. Uruchomienie polecenia z parametrem nogui.

    .\AppInstaller.exe it=:file iv=:".\install.json" nogui
    

    W przykładzie powyżej wszystkie ustawienia zostaną odczytane z pliku install.json zapisanego w folderze z instalatorem. W trakcie działania programu na konsoli będą wyświetlane komunikaty. Przykładową zawartość pliku zamieszczono w sekcji 5.

  2. Uruchomienie polecenia z parametrem noguiupdate.

    AppInstaller.exe it=:file iv=:".\install.json" noguiupdate
    

    Tryb aktualizacji istniejącej witryny. Aktualizuje wyłącznie pliki aplikacji (rozpakowuje nowe paczki ZIP) bez modyfikacji konfiguracji (bazy danych, IIS, schematy, itp.). W tym trybie z pliku JSON wymagana jest jedynie sekcja Packages.

    Parametr noguiupdate jest przewidziany do stosowania w środowiskach, w których na serwerze IIS działa dokładnie jedna witryna nAxiom, ponieważ pobiera z niej ustawienia konfiguracyjne.

3.6 Porównanie trybów

Funkcja nogui noguiupdate
Konfiguracja IIS ❌ (pomija)
Konfiguracja baz danych ❌ (pomija)
Rozpakowywanie paczek
Konfiguracja schematów ❌ (pomija)
Restrykcje IP ❌ (pomija)
RabbitMQ ❌ (pomija)
Diagnostyka ⚠️ częściowe ❌ (pomija)
Wyjście na konsolę
Wymaga pełnego JSON ❌ (tylko Packages)

4. Konfiguracja JSON — pełna specyfikacja

Plik JSON zawiera kompletną konfigurację instalacji. Poniżej opisano każdą sekcję z typami danych i dozwolonymi wartościami.

4.1 Struktura główna

{
  "IISApplication": { ... },
  "Environment": { ... },
  "Packages": [ ... ],
  "Databases": [ ... ],
  "GlobalSettings": { ... },
  "ResourceLocations": [ ... ],
  "Schemas": { ... },
  "Restrictions": { ... },
  "MessageBrokerConfiguration": { ... },
  "DiagnosticsConfiguration": { ... }
}

4.2 IISApplication — Konfiguracja witryny IIS

{
  "IISApplication": {
    "MainBinding": {
      "Host": "mysite.com",
      "Port": 443,
      "IpAddress": "*",
      "Protocol": "https",
      "CertificateThumbprint": "03C7D02F959CDEBB4C...",
      "CertificateStore": "My"
    },
    "OptionalLocalBinding": {
      "Host": "localhost",
      "Port": 8082,
      "IpAddress": "*",
      "Protocol": "http"
    },
    "InstallationType": "Global",
    "WebsiteName": "naxiom.mysite",
    "WebsitePath": "C:\\inetpub\\naxiom",
    "CompanyName": "MyCompany",
    "PoolIdentityType": "ApplicationPoolIdentity",
    "IdentityUser": "",
    "IdentityPassword": ""
  }
}
Pole Typ Wartości Opis
MainBinding.
Host
string Nazwa hosta (domena)
MainBinding.
Port
int 1–65535 Port witryny
MainBinding.
IpAddress
string * lub adres IP Adres IP nasłuchiwania
MainBinding.
Protocol
string https Obsługiwany jest tylko protokół https
MainBinding.
Certificate
Thumbprint
string hex Odcisk palca certyfikatu SSL (wymagane)
MainBinding.
Certificate
Store
string My, Root, itp. Magazyn certyfikatów Windows
Optional
Local
Binding
object/null Opcjonalne dodatkowe powiązanie (np. localhost na HTTP)
Installation
Type
string Local, Global Local — dostęp lokalny; Global — dostęp z Internetu
Website
Name
string Nazwa witryny w IIS
Website
Path
string Ścieżka na dysku do plików witryny
Company
Name
string Nazwa klucza licencyjnego
Pool
Identity
Type
string ApplicationPoolIdentity, SpecificUser Tożsamość puli aplikacji
Identity
User
string Nazwa użytkownika (wymagane dla SpecificUser)
Identity
Password
string Hasło (wymagane dla SpecificUser)

Instalacja Global: wartość Host nie może być localhost ani 127.0.0.1.

4.3 Environment — Typ środowiska

{
  "Environment": {
    "EnvironmentType": "Production"
  }
}
Wartość Opis
Development Środowisko deweloperskie
Test Środowisko testowe
Production Środowisko produkcyjne

4.4 Packages — Pakiety instalacyjne

Lista pakietów ZIP do zainstalowania. Każdy wpis odpowiada jednej aplikacji platformy nAxiom. Jeśli plik konfiguracyjny zostanie zapisany w folderze z pakietami instalacyjnymi, można użyć ścieżek względnych.

{
  "Packages": [
    {
      "Name": "Front",
      "ZipPath": ".\\front.zip"
    },
    {
      "Name": "Api",
      "ZipPath": ".\\api.zip"
    }
  ]
}

Dostępne nazwy pakietów (Name):

Nazwa Typ aplikacji Opis Wymagana DB
Front Angular Główna strona internetowa
Admin Angular Panel administratora
Api .NET Core Interfejs programistyczny (API)
Auth .NET Core Panel autoryzacyjny
TenantsApi .NET Core API zarządzania tenantami
TenantsAdmin Angular Aplikacja zarządzania tenantami
Crystal .NET Framework Generator raportów Crystal Reports
Workflow Angular Graficzne przejścia dokumentów
TaskService .NET Core Serwis zadań czasowych
PublicApi .NET Core Publiczne API
OcrApi .NET Core API rozpoznawania tekstu
Ocr Angular Aplikacja OCR
Syncfusion .NET Core Konwerter plików PDF
ReportsApi .NET Core Moduł raportów
MobileApi .NET Core API dla aplikacji mobilnej
DocApi .NET Core Moduł dokumentacji
DocPdf Content Dokumentacja PDF
Word Angular Wtyczka MS Word
Outlook Angular Wtyczka MS Outlook
MobileTools Content Pliki generatora aplikacji mobilnych
Bpmn Angular Edytor BPMN/DMN

Pomijanie pakietów: Aby pominąć instalację określonego pakietu, wystarczy usunąć go z sekcji Packages (oraz z Databases, jeśli dotyczy).

4.5 Databases — Połączenia z bazami danych

Lista konfiguracji baz danych dla aplikacji, które ich wymagają.

{
  "Databases": [
    {
      "Name": "Api",
      "DatabaseConnection": {
        "Server": "localhost",
        "UsePort": false,
        "Port": 1433,
        "Timeout": 15,
        "Instance": "SQLEXPRESS",
        "IntegratedSecurity": false,
        "Username": "tenant1user",
        "Password": "!Q2w3e4r",
        "Database": "nAxiom"
      }
    },
    {
      "Name": "TenantsApi",
      "DatabaseConnection": {
        "Server": "localhost",
        "UsePort": false,
        "Port": 1433,
        "Timeout": 15,
        "Instance": "SQLEXPRESS",
        "IntegratedSecurity": false,
        "Username": "tenantadmin",
        "Password": "!Q2w3e4r",
        "Database": "nAxiom_tenantsAdmin"
      }
    }
  ]
}
Pole Typ Domyślnie Opis
Name string Api, TenantsApi Nazwa serwisu używającego bazy danych: Api - baza używana przez wszystkie serwisy, TenantsApi - baza danych tenantów
Server string localhost Adres serwera SQL
UsePort bool false Czy użyć niestandardowego portu
Port int 1433 Port SQL Server
Timeout int 120 Timeout połączenia (sekundy)
Instance string SQLEXPRESS Nazwa instancji SQL (puste = domyślna)
Integrated
Security
bool true Czy używać uwierzytelniania Windows
Username string "" Login SQL (gdy IntegratedSecurity = false)
Password string "" Hasło SQL (gdy IntegratedSecurity = false)
Database string nAxiom Nazwa bazy danych

4.6 GlobalSettings — Połączenie administratora

W przypadku jeśli login podany dla bazy danych TenantsApi w sekcji Databases istnieje na serwerze i ma uprawnienia do tworzenia baz danych i loginów (dbcreator i securityadmin lub sysadmin), podanie poświadczeń w tej sekcji nie jest wymagane. Struktura DatabaseConnectionSA jest identyczna jak DatabaseConnection opisane w sekcji 4.5.

Minimalne uprawnienia loginu podanego w tej sekcji to dbcreator i securityadmin. Nie musi to być login sa.

{
  "GlobalSettings": {
    "DatabaseConnectionSA": {
      "Server": "localhost",
      "UsePort": false,
      "Port": 1433,
      "Timeout": 15,
      "Instance": "SQLEXPRESS",
      "IntegratedSecurity": false,
      "Username": "sa",
      "Password": "saPassword!@89",
      "Database": ""
    }
  }
}

4.7 ResourceLocations — Lokalizacja zasobów

Definiuje, gdzie przechowywane są poszczególne typy zasobów aplikacji.

{
  "ResourceLocations": [
    {
      "ResourceType": "Attachments",
      "Location": "DataBaseTable",
      "DatabaseConnection": {
        "Server": "localhost",
        "UsePort": false,
        "Port": 1433,
        "Instance": "SQLEXPRESS",
        "Username": "sa",
        "Password": "!Q2w3e4r",
        "Database": "nAxiom.TESTOWY"
      },
      "TableName": "dbo.my_attachments",
      "FolderPath": ""
    },
    {
      "ResourceType": "EmailMessages",
      "Location": "InstallationFolder",
      "DatabaseConnection": null,
      "TableName": "",
      "FolderPath": ""
    },
    {
      "ResourceType": "Ocr",
      "Location": "NoChange",
      "DatabaseConnection": null,
      "TableName": "",
      "FolderPath": ""
    },
    {
      "ResourceType": "AdditionalLibrary",
      "Location": "InstallationFolder",
      "DatabaseConnection": null,
      "TableName": "",
      "FolderPath": ""
    }
  ]
}

Typy zasobów (ResourceType):

Wartość Opis
Attachments Załączniki dokumentów
EmailMessages Wiadomości e-mail
Ocr Rozpoznane pliki OCR
AdditionalLibrary Dodatkowe biblioteki

Lokalizacja (Location):

Wartość Zastosowanie Opis
InstallationFolder Pierwsza instalacja / aktualizacja Folder instalacyjny witryny
SelectedFolder Pierwsza instalacja / aktualizacja Wybrany folder na dysku (wymaga FolderPath)
DataBaseTable Pierwsza instalacja / aktualizacja Tabela w bazie danych (wymaga DatabaseConnection i TableName)
NoChange Tylko aktualizacja Zachowuje obecne ustawienia (nie zmienia konfiguracji)

4.8 Schemas — Schematy bazy danych

{
  "Schemas": {
    "AppCoreSchema": "core",
    "AppAuthSchema": "auth",
    "AppUserSchema": "*"
  }
}
Pole Domyślnie Opis
AppCoreSchema core Schemat tabel systemowych
AppAuthSchema auth Schemat tabel autoryzacyjnych
AppUserSchema * Schemat tabel użytkownika (* = wszystkie)

4.9 Restrictions — Restrykcje IP

Konfiguracja filtrowania ruchu IP na poziomie poszczególnych aplikacji IIS.

{
  "Restrictions": {
    "ClearRestrictions": false,
    "Applications": [
      {
        "Name": "front",
        "Restrictions": [
          {
            "Ip": "192.168.1.1",
            "Mask": "255.255.255.255",
            "HasMask": false,
            "Traffic": "Allow"
          }
        ]
      },
      {
        "Name": "api",
        "Restrictions": [
          {
            "Ip": "192.168.1.0",
            "Mask": "255.255.255.0",
            "HasMask": true,
            "Traffic": "Deny"
          }
        ]
      }
    ]
  }
}
Pole Typ Opis
ClearRestrictions bool true = wyczyść istniejące restrykcje przed dodaniem nowych
Applications\[].
Name
string Nazwa aplikacji (lowercase, np. front, api)
Restrictions\[].
Ip
string Adres IP
Restrictions\[].
Mask
string Maska podsieci
Restrictions\[].
Has
Mask
bool Czy stosować maskę podsieci
Restrictions\[].
Traffic
string Allow lub Deny

4.10 MessageBrokerConfiguration — RabbitMQ

{
  "MessageBrokerConfiguration": {
    "HostName": "amqps://rabbitmq.mycompany.com",
    "VirtualHostName": "/",
    "UserName": "naxiom",
    "Password": "secretPassword",
    "StartLocalServices": false,
    "UseSsl": true,
    "RabbitNodePort": 0,
    "RabbitDistPort": 0,
    "RabbitManagementConsolePort": 0,
    "ErlangEpmdPort": 0
  }
}
Pole Typ Opis
HostName string Adres hosta RabbitMQ
Virtual
Host
Name
string Nazwa hosta wirtualnego w RabbitMQ
UserName string Użytkownik RabbitMQ
Password string Hasło RabbitMQ
Start
Local
Services
bool true = uruchom lokalne usługi RabbitMQ (instalacja lokalna)
UseSsl bool ‘true’ = używaj bezpiecznego połączenia (amqps)
Rabbit
Node
Port
int Port węzła RabbitMQ (domyślnie 5672)
Rabbit
Dist
Port
int Port dystrybucyjny Erlang
Rabbit
Management
Console
Port
int Port konsoli zarządzania RabbitMQ (domyślnie 15672)
Erlang
Epmd
Port
int Port EPMD Erlang (domyślnie 4369)

Gdy StartLocalServices = true, instalator konfiguruje porty i uruchamia lokalne serwisy RabbitMQ. Gdy false, podaj adres zdalnego serwera RabbitMQ.

4.11 DiagnosticsConfiguration — Diagnostyka i telemetria (opcjonalne)

{
  "DiagnosticsConfiguration": {
    "LogLevel": "Info",
    "LogsTarget": "Db3",
    "ElasticEndpoint": "",
    "ElasticUserName": "",
    "ElasticPassword": "",
    "TelemetryEnabled": false,
    "TracesEndpoint": "",
    "TracesProtocol": "",
    "LogsEndpoint": "",
    "LogsProtocol": "",
    "MetricsEndpoint": "",
    "MetricsProtocol": ""
  }
}
Pole Typ Wartości Opis
LogLevel string Trace, Debug, Info, Warn, Error, Fatal Poziom logowania (NLog)
LogsTarget string Db3, ElasticSearch Cel logów: pliki SQLite (Db3) lub ElasticSearch
Elastic
Endpoint
string URL Endpoint ElasticSearch
Elastic
User
Name
string Użytkownik ElasticSearch
Elastic
Password
string Hasło ElasticSearch
Telemetry
Enabled
bool Włącz OpenTelemetry
Traces
Endpoint
string URL Endpoint OTLP traces
Traces
Protocol
string grpc, http/protobuf Protokół OTLP traces
Logs
Endpoint
string URL Endpoint OTLP logs
Logs
Protocol
string grpc, http/protobuf Protokół OTLP logs
Metrics
Endpoint
string URL Endpoint OTLP metrics
Metrics
Protocol
string grpc, http/protobuf Protokół OTLP metrics

Sekcja DiagnosticsConfiguration jest obsługiwana tylko w trybie nogui. W trybie noguiupdate jest pomijana. Dodatkowe ograniczenia opisano w sekcji 8.

5. Przykładowy plik konfiguracji JSON

Poniżej kompletny plik konfiguracji do instalacji w trybie nogui:

{
  "IISApplication": {
    "MainBinding": {
      "Host": "localhost",
      "Port": 1575,
      "IpAddress": "*",
      "Protocol": "https",
      "CertificateThumbprint": "17653d6ccf0f16...",
      "CertificateStore": "My"
    },
    "OptionalLocalBinding": null,
    "InstallationType": "Local",
    "WebsiteName": "naxiom",
    "WebsitePath": "C:\\inetpub\\naxiom",
    "CompanyName": "nAxiom",
    "PoolIdentityType": "ApplicationPoolIdentity",
    "IdentityUser": "",
    "IdentityPassword": ""
  },
  "Environment": {
    "EnvironmentType": "Development"
  },
   "Packages": [
    { "Name": "Front", "ZipPath": ".\\front.zip" },
    { "Name": "Admin", "ZipPath": ".\\admin.zip" },
    { "Name": "Api", "ZipPath": ".\\api.zip" },
    { "Name": "Auth", "ZipPath": ".\\auth.zip" },
    { "Name": "TenantsApi", "ZipPath": ".\\tenantsApi.zip" },
    { "Name": "TenantsAdmin", "ZipPath": ".\\tenantsAdmin.zip" },
    { "Name": "Workflow", "ZipPath": ".\\workflow.zip" },
    { "Name": "TaskService", "ZipPath": ".\\taskservice.zip" },
    { "Name": "PublicApi", "ZipPath": ".\\publicApi.zip" },
    { "Name": "Syncfusion", "ZipPath": ".\\syncfusion.zip" },
    { "Name": "ReportsApi", "ZipPath": ".\\reportsApi.zip" },
    { "Name": "DocApi", "ZipPath": ".\\docApi.zip" },
    { "Name": "Bpmn", "ZipPath": ".\\bpmn.zip" }
  ],
  "Databases": [
    {
      "Name": "Api",
      "DatabaseConnection": {
        "Server": "localhost",
        "UsePort": false,
        "Port": 1433,
        "Timeout": 30,
        "Instance": "SQLEXPRESS",
        "IntegratedSecurity": false,
        "Username": "naxiom_user",
        "Password": "p@assword",
        "Database": "naxiom"
      }
    },
    {
      "Name": "TenantsApi",
      "DatabaseConnection": {
        "Server": "localhost",
        "UsePort": false,
        "Port": 1433,
        "Timeout": 30,
        "Instance": "SQLEXPRESS",
        "IntegratedSecurity": false,
        "Username": "naxiom_tenantadmin",
        "Password": "p@assword!",
        "Database": "naxiom_tenantsAdmin"
      }
    }
  ],
  "GlobalSettings": {
    "DatabaseConnectionSA": {
      "Server": "localhost",
      "UsePort": false,
      "Port": 1433,
      "Timeout": 30,
      "Instance": "SQLEXPRESS",
      "IntegratedSecurity": false,
      "Username": "sa",
      "Password": "S@P@ssword!",
      "Database": ""
    }
  },
  "ResourceLocations": [
     {
      "ResourceType": "Attachments",
      "Location": "InstallationFolder",
      "DatabaseConnection": null,
      "TableName": "",
      "FolderPath": ""
    },
    {
      "ResourceType": "EmailMessages",
      "Location": "InstallationFolder",
      "DatabaseConnection": null,
      "TableName": "",
      "FolderPath": ""
    },
     {
      "ResourceType": "Ocr",
      "Location": "InstallationFolder",
      "DatabaseConnection": null,
      "TableName": "",
      "FolderPath": ""
    },
    {
      "ResourceType": "AdditionalLibrary",
      "Location": "InstallationFolder",
      "DatabaseConnection": null,
      "TableName": "",
      "FolderPath": ""
    }
  ],
  "Schemas": {
    "AppCoreSchema": "core",
    "AppAuthSchema": "auth",
    "AppUserSchema": "*"
  },
  "Restrictions": {
    "ClearRestrictions": false,
    "Applications": [
      { "Name": "front", "Restrictions": [{ "Ip": "", "Mask": "255.255.255.255", "HasMask": false, "Traffic": "Allow" }] },
      { "Name": "api", "Restrictions": [{ "Ip": "", "Mask": "255.255.255.255", "HasMask": false, "Traffic": "Allow" }] },
      { "Name": "auth", "Restrictions": [{ "Ip": "*", "Mask": "255.255.255.255", "HasMask": false, "Traffic": "Allow" }] },
      { "Name": "workflow", "Restrictions": [{ "Ip": "127.0.0.1", "Mask": "255.255.255.255", "HasMask": false, "Traffic": "Allow" }] }
    ]
  },
  "MessageBrokerConfiguration": {
    "HostName": "amqp://localhost:8762",
    "VirtualHostName": "naxiom",
    "UserName": "naxiomRabbitUser",
    "Password": "!Q2w3e4r",
    "UseSsl": false,
    "StartLocalServices": false,
    "RabbitNodePort": 8762,
    "RabbitDistPort": 28762,
    "RabbitManagementConsolePort": 18762,
    "ErlangEpmdPort": 4369
  },
  "DiagnosticsConfiguration": {
    "LogLevel": "Error",
    "LogsTarget": "Db3",
    "TelemetryEnabled": false
  }
}

6. Kody zakończenia (Exit Codes)

Kod Znaczenie
0 Instalacja zakończona pomyślnie
1 Wystąpił błąd podczas instalacji
10 Instalacja przerwana przed krokiem instalacyjnym

W trybie nogui/noguiupdate kod zakończenia jest dostępny poprzez:

  • cmd: echo %ERRORLEVEL%
  • PowerShell: $LASTEXITCODE

7. Ograniczenia i znane braki

7.1 Ograniczenia trybu nogui

Ograniczenie Opis
Brak walidacji danych wejściowych Instalator nie sprawdza poprawności wartości w pliku JSON przed rozpoczęciem instalacji. Błędne dane mogą spowodować nieprzewidywalne zachowanie.
Diagnostyka — częściowe wsparcie Sekcja DiagnosticsConfiguration w trybie nogui jest jedynie częściowo obsługiwana — metoda SetSettings przyjmuje model, ale nie aplikuje wszystkich wartości do kontrolek. Główna konfiguracja diagnostyki odczytywana jest z istniejących plików appsettings.json, zmiennych środowiskowych i bazy TenantAdmin. Domyślne ustawienia mogą być zastosowane zamiast tych z JSON.
Brak parametru --help Instalator nie oferuje wbudowanej pomocy CLI.

7.2 Ograniczenia trybu noguiupdate

Ograniczenie Opis
Jedna witryna Tryb noguiupdate działa poprawnie wyłącznie, gdy na IIS istnieje dokładnie jedna witryna nAxiom.
Brak zmiany konfiguracji Aktualizowane są wyłącznie pliki — ustawienia IIS, bazy danych, schematy, restrykcje itp. pozostają niezmienione.

7.3 Ograniczenia ogólne

Ograniczenie Opis
Tylko Windows Instalator działa wyłącznie w systemie Windows.
Wymagane uprawnienia administratora Operacje na IIS wymagają uruchomienia jako administrator.
Hasła w jawnym tekście Hasła w pliku JSON są przechowywane w postaci jawnej. Connection stringi są szyfrowane dopiero po wgraniu do plików konfiguracyjnych.
Brak walidacji JSON Brak schematu JSON Schema do walidacji pliku konfiguracyjnego. Błędy w strukturze JSON powodują wyjątki deserializacji.
Brak logowania do pliku W trybie nogui komunikaty wyświetlane są na konsoli — nie ma dedykowanego pliku logu z instalacji (jedynie summary.json po zakończeniu).
Brak mechanizmu rollback W przypadku błędu podczas instalacji — nie jest wykonywane automatyczne cofnięcie zmian (konfiguracja jest przywracana z backup, ale witryna IIS może pozostać w niespójnym stanie).

8. Dobre praktyki

  1. Waliduj JSON — przed uruchomieniem sprawdź poprawność składni JSON (np. python -m json.tool install.json lub dowolny edytor z podświetlaniem).
  2. Nie zostawiaj haseł w pliku — po instalacji usuń plik konfiguracyjny lub zabezpiecz go odpowiednimi uprawnieniami.
  3. Uprawnienia pliku JSON — ogranicz dostęp do pliku konfiguracyjnego (zawiera hasła w jawnej postaci).
  4. Usunięcie pliku po instalacji — po pomyślnej instalacji usuń plik JSON zawierający dane uwierzytelniające.
  5. Restrykcje IP — dla aplikacji backendowych (Api, TaskService, Crystal) rozważ ograniczenie dostępu do ruchu wewnętrznego.
  6. Konto puli aplikacji — w środowisku produkcyjnym rozważ użycie dedykowanego konta (SpecificUser) zamiast ApplicationPoolIdentity.
  7. Backup przed aktualizacją — instalator tworzy pliki .backup, ale warto mieć pełną kopię katalogu witryny.
  8. Użyj noguiupdate do aktualizacji plików — (dotyczy środowisk z jedną witryną) nie zmienia konfiguracji, minimalizuje ryzyko.
  9. Plik summary.json — po instalacji sprawdź plik summary.json w katalogu instalatora — zawiera URL witryny.
  10. Ścieżki względne — w pliku JSON używaj ścieżek względnych (.\front.zip) — ułatwia przenoszenie między środowiskami.
  11. Sprawdzaj exit code — w skryptach zawsze weryfikuj $LASTEXITCODE / %ERRORLEVEL%.
  12. Przekierowanie wyjścia — w trybie nogui output jest kierowany na konsolę:

    .\AppInstaller.exe it=:file iv=:".\install.json" nogui 2>&1 | Tee-Object -FilePath "install.log"
    
  13. Osobny JSON per środowisko — przygotuj osobne pliki konfiguracyjne dla dev/test/prod.
  14. Aby pominąć instalację opcjonalnych modułów (np. OcrApi, Crystal, PublicApi):
    • Usuń wpis pakietu z sekcji Packages.
    • Usuń wpis z sekcji Databases (jeśli aplikacja wymaga bazy danych).
    • Upewnij się, że żadna inna sekcja nie odwołuje się do pominiętego pakietu.

9. FAQ / Rozwiązywanie problemów

Instalator kończy się natychmiast z kodem 1

Przyczyna: Brak poprawnej konfiguracji JSON przy użyciu flagi nogui/noguiupdate. Rozwiązanie: Upewnij się, że parametry it i iv są poprawnie sformatowane. Separator to =: (nie =).

Błąd: “Nie znaleziono witryny do automatycznej aktualizacji”

Przyczyna: Tryb noguiupdate nie znalazł żadnej witryny nAxiom na IIS. Rozwiązanie: Upewnij się, że na serwerze IIS istnieje witryna z pulą aplikacji o nazwie zaczynającej się od naxiom..

Błąd: “Automatyczna aktualizacja nie może być przeprowadzona jeżeli istnieje więcej niż jedna witryna”

Przyczyna: Na IIS istnieje więcej niż jedna witryna nAxiom. Rozwiązanie: Użyj trybu nogui z pełną konfiguracją JSON zamiast noguiupdate.

Certyfikat SSL nie został znaleziony

Przyczyna: Podany CertificateThumbprint nie odpowiada żadnemu certyfikatowi w magazynie. Rozwiązanie: Sprawdź odcisk palca certyfikatu w MMC (Certificates → Local Computer) i upewnij się, że wartość CertificateStore jest poprawna (zwykle My dla Personal).

Nie można znaleźć pliku JSON

Przyczyna: Ścieżka w parametrze iv jest niepoprawna. Rozwiązanie:

  • Użyj ścieżki bezwzględnej: iv=:"C:\config\install.json"
  • Ścieżka względna .\ odnosi się do katalogu, w którym znajduje się AppInstaller.exe, nie do bieżącego katalogu roboczego.

Copyright © 2025 OPTEAM SA. Theme Copyright © 2017-2020 Patrick Marsceill. Distributed by an MIT license.