Instalacja nAxiom z poziomu CLI
📅 2026-05-21 1.15.6.5 👤 mmy, dbo ⏳ 37 min.
Spis treści
- 1. Wprowadzenie
- 2. Wymagania systemowe
- 3. Parametry wiersza poleceń (CLI)
-
4. Konfiguracja JSON — pełna specyfikacja
- 4.1 Struktura główna
- 4.2
IISApplication— Konfiguracja witryny IIS - 4.3
Environment— Typ środowiska -
4.4
Packages— Pakiety instalacyjne - 4.5
Databases— Połączenia z bazami danych - 4.6
GlobalSettings— Połączenie administratora -
4.7
ResourceLocations— Lokalizacja zasobów - 4.8
Schemas— Schematy bazy danych - 4.9
Restrictions— Restrykcje IP - 4.10
MessageBrokerConfiguration— RabbitMQ - 4.11
DiagnosticsConfiguration— Diagnostyka i telemetria (opcjonalne)
- 5. Przykładowy plik konfiguracji JSON
- 6. Kody zakończenia (Exit Codes)
- 7. Ograniczenia i znane braki
- 8. Dobre praktyki
- 9. FAQ / Rozwiązywanie problemów
1. Wprowadzenie
TL;DR
.\AppInstaller.exe it=:file iv=:".\install.json" noguiPrzykł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
itiivsą wymagane, gdy podanonoguilubnoguiupdate.** 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
-
Uruchomienie polecenia z parametrem nogui.
.\AppInstaller.exe it=:file iv=:".\install.json" noguiW 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.
-
Uruchomienie polecenia z parametrem noguiupdate.
AppInstaller.exe it=:file iv=:".\install.json" noguiupdateTryb 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.CertificateThumbprint
|
string | hex | Odcisk palca certyfikatu SSL (wymagane) |
MainBinding.CertificateStore
|
string |
My, Root, itp. |
Magazyn certyfikatów Windows |
OptionalLocalBinding
|
object/null | — | Opcjonalne dodatkowe powiązanie (np. localhost na HTTP) |
InstallationType
|
string |
Local, Global
|
Local — dostęp lokalny; Global — dostęp z Internetu |
WebsiteName
|
string | — | Nazwa witryny w IIS |
WebsitePath
|
string | — | Ścieżka na dysku do plików witryny |
CompanyName
|
string | — | Nazwa klucza licencyjnego |
PoolIdentityType
|
string |
ApplicationPoolIdentity, SpecificUser
|
Tożsamość puli aplikacji |
IdentityUser
|
string | — | Nazwa użytkownika (wymagane dla SpecificUser) |
IdentityPassword
|
string | — | Hasło (wymagane dla SpecificUser) |
Instalacja
Global: wartośćHostnie może byćlocalhostani127.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 zDatabases, 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) |
IntegratedSecurity
|
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\[].HasMask
|
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 |
VirtualHostName
|
string | Nazwa hosta wirtualnego w RabbitMQ |
UserName |
string | Użytkownik RabbitMQ |
Password |
string | Hasło RabbitMQ |
StartLocalServices
|
bool |
true = uruchom lokalne usługi RabbitMQ (instalacja lokalna) |
UseSsl |
bool | ‘true’ = używaj bezpiecznego połączenia (amqps) |
RabbitNodePort
|
int | Port węzła RabbitMQ (domyślnie 5672) |
RabbitDistPort
|
int | Port dystrybucyjny Erlang |
RabbitManagementConsolePort
|
int | Port konsoli zarządzania RabbitMQ (domyślnie 15672) |
ErlangEpmdPort
|
int | Port EPMD Erlang (domyślnie 4369) |
Gdy
StartLocalServices = true, instalator konfiguruje porty i uruchamia lokalne serwisy RabbitMQ. Gdyfalse, 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 |
ElasticEndpoint
|
string | URL | Endpoint ElasticSearch |
ElasticUserName
|
string | — | Użytkownik ElasticSearch |
ElasticPassword
|
string | — | Hasło ElasticSearch |
TelemetryEnabled
|
bool | — | Włącz OpenTelemetry |
TracesEndpoint
|
string | URL | Endpoint OTLP traces |
TracesProtocol
|
string |
grpc, http/protobuf
|
Protokół OTLP traces |
LogsEndpoint
|
string | URL | Endpoint OTLP logs |
LogsProtocol
|
string |
grpc, http/protobuf
|
Protokół OTLP logs |
MetricsEndpoint
|
string | URL | Endpoint OTLP metrics |
MetricsProtocol
|
string |
grpc, http/protobuf
|
Protokół OTLP metrics |
Sekcja
DiagnosticsConfigurationjest obsługiwana tylko w trybienogui. W trybienoguiupdatejest 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
-
Waliduj JSON — przed uruchomieniem sprawdź poprawność składni JSON (np.
python -m json.tool install.jsonlub dowolny edytor z podświetlaniem). - Nie zostawiaj haseł w pliku — po instalacji usuń plik konfiguracyjny lub zabezpiecz go odpowiednimi uprawnieniami.
- Uprawnienia pliku JSON — ogranicz dostęp do pliku konfiguracyjnego (zawiera hasła w jawnej postaci).
- Usunięcie pliku po instalacji — po pomyślnej instalacji usuń plik JSON zawierający dane uwierzytelniające.
- Restrykcje IP — dla aplikacji backendowych (Api, TaskService, Crystal) rozważ ograniczenie dostępu do ruchu wewnętrznego.
-
Konto puli aplikacji — w środowisku produkcyjnym rozważ użycie dedykowanego konta (
SpecificUser) zamiastApplicationPoolIdentity. -
Backup przed aktualizacją — instalator tworzy pliki
.backup, ale warto mieć pełną kopię katalogu witryny. -
Użyj
noguiupdatedo aktualizacji plików — (dotyczy środowisk z jedną witryną) nie zmienia konfiguracji, minimalizuje ryzyko. -
Plik
summary.json— po instalacji sprawdź pliksummary.jsonw katalogu instalatora — zawiera URL witryny. -
Ścieżki względne — w pliku JSON używaj ścieżek względnych (
.\front.zip) — ułatwia przenoszenie między środowiskami. -
Sprawdzaj exit code — w skryptach zawsze weryfikuj
$LASTEXITCODE/%ERRORLEVEL%. -
Przekierowanie wyjścia — w trybie
noguioutput jest kierowany na konsolę:.\AppInstaller.exe it=:file iv=:".\install.json" nogui 2>&1 | Tee-Object -FilePath "install.log" - Osobny JSON per środowisko — przygotuj osobne pliki konfiguracyjne dla dev/test/prod.
- 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.
- Usuń wpis pakietu z sekcji
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.