NodePilot 1.1.0
The server installation now has a setup you can double-click.
v1.0.1 shipped the artifacts; installing them still meant reading docs/deployment-guide.md,
creating a SQL login by hand, granting the service account access to a certificate's private key,
and getting a dozen Install-NodePilot.ps1 parameters right on the first try. This release adds
NodePilot-Server-Setup, a signed GUI installer that runs those same scripts, checks the host
before it changes anything, and fixes what it can fix itself.
Downloads
| Asset | For |
|---|---|
NodePilot-Server-Setup-1.1.0.exe |
Windows service — the production rollout. Wizard, or /VERYSILENT with an answer file. Carries the signed artifact inside; nothing else to download. |
NodePilot-Desktop-Setup-1.1.0.exe |
Desktop app — one machine. Bundles a local PostgreSQL and the .NET runtime, installs both as services, opens a native window. Offline, no prerequisites. |
NodePilot-1.1.0.zip + .manifest.json + .manifest.json.p7s |
The scripted path, for automation and troubleshooting: deploy/Install-NodePilot.ps1 -ArtifactPath …. This is exactly what the setup runs. |
SHA256SUMS.txt |
Checksums over everything above. |
nodepilot-release-signing.cer |
Public signing certificate (see below). |
Building from source stays fully supported and is documented in the README.
What the server setup does for you
- Checks the host first, and says why. Administrator rights, the ports (naming HTTP.SYS when
the kernel — not IIS — is holding 443), the .NET runtime, the TLS certificate, the service
account, and whether the database is reachable at all. Nothing is changed until every blocking
item is green. - Creates the database access it needs. SQL Server: the login for the service identity and the
database, withdb_owneron it. PostgreSQL: the role and the database, from superuser
credentials you supply on the page or in the answer file. Both check first and skip what already
exists, and both refuse politely — with the missing privilege named — when the running account
may not do it. This used to be a block of SQL the wizard printed for you to run somewhere else. - Picks the certificate from a list instead of asking for a thumbprint. An expired certificate
blocks the install; one whose name does not match the public hostname is a warning you can
override, because split-DNS deployments are legitimate. - Grants the private key to the service account, sets the ACLs and the firewall rule, installs
the service, starts it, and waits for/healthz/readybefore calling it done. - Shows the first-login details on the finish page — the setup token and, if you enabled it,
the external-trigger API key. That page is the only place they are ever shown. - Runs unattended for SCCM or GPO:
NodePilot-Server-Setup-1.1.0.exe /VERYSILENT /SUPPRESSMSGBOXES /ANSWERFILE=answers.json.
The answer file can create the first administrator and seed the installation from a
configuration backup, so a rollout does not end with someone typing a setup token into a browser. - Upgrades in place. An existing installation keeps its configuration; the service is down for
roughly half a minute.
You still bring two things: a TLS certificate in LocalMachine\My (imported with
MachineKeySet|PersistKeySet, otherwise the private key cannot be granted later) and a database
server whose TLS the NodePilot host trusts. The short version of all of this is the Quick start
at the top of deploy/server/README.md.
Fixes
- Changing the service identity no longer bricks the installation it replaces. Installing over
an existing instance under a different account (LocalSystem → gMSA) left the identity-bound
secrets readable by nobody. The secrets are handed over to the new identity, and a failed switch
now rolls the directory ACL back instead of leaving a half-migrated install. - An update leaves the service running. It used to stop the service and hand it back stopped.
- The uninstaller waits for the service process instead of orphaning a still-running one.
- The service waits for its database at boot rather than crash-looping past it, in both the
server and desktop postures. AllowedHostsderived from the public hostname no longer excludeslocalhost, which broke the
installer's own health probe.- Registry ACLs are addressed by path, not by a literal that drifted.
- The global query-error toast no longer fires every fifteen seconds while a background refresh
retries.
Verifying the download
Publisher : CN=NodePilot Release Signing
Thumbprint : 277EAB317A581C88302CE92BE805938C86B4650D
Valid until : 2031-08-02
Get-FileHash .\NodePilot-1.1.0.zip -Algorithm SHA256 # compare with SHA256SUMS.txt
(Get-PfxCertificate .\nodepilot-release-signing.cer).Thumbprint # must equal the value above
Import-Certificate -FilePath .\nodepilot-release-signing.cer -CertStoreLocation Cert:\LocalMachine\RootBoth installers are Authenticode-signed with that same certificate, RFC-3161 timestamped. It is a
self-signed publisher, not a public CA — that is why the thumbprint is published here and why
you should compare it before importing anything into LocalMachine\Root. Expect a SmartScreen
warning; it has no reputation to draw on. If your organisation will not trust a self-signed
publisher, build and sign both artifacts with your own enterprise certificate — the walkthrough is
in docs/deployment-guide.md.
Also in this release
Roughly fifty commits since v1.0.1. Beyond the setup itself: the installer pre-flight was
extracted so it can run without side effects (the wizard and the scripts now check the same way),
the setup's PowerShell adapter and the deployment templates gained contract tests, and the
deployment documentation was corrected where it named a build parameter that no longer exists.
Licensed under Apache-2.0.