Install On Windows Server
This page installs the application as the
BareBonesTicketing Windows Service on one Windows Server
host. The default path also installs and manages PostgreSQL 18 on the
same host.
The package is self-contained. Do not install .NET, the ASP.NET Core runtime, an SDK, IIS, or Docker.
Before you start
Windows Server 2019, 2022, or 2025, under your organization's control.
Windows Administrator rights on that host.
Inbound TCP
8443approved under your firewall policy.The customer package, its manifest, integrity evidence, and legal material, extracted to a folder. Extract it fully — do not run the installer from inside the archive.
A decision on database mode. Local is the default. See PostgreSQL.
For an offline install, the exact PostgreSQL installer file placed beside
Install-BareBonesTicketing.cmd:postgresql-18.4-2-windows-x64.exe SHA-256: 0698d1a6083da490e5a57149257f5d9220d8c34109ed11b38aa592d320bf5385 Size: 376326192 bytesFor a connected install, the installer downloads this same file from EnterpriseDB. It checks the hash and the EnterpriseDB publisher signature, and it will not fall back to another version.
Install with the local database
Check that the package, manifest, integrity evidence, legal material, and version procedure all name the same product and version. If they disagree, stop and return the package to whoever supplied it.
Double-click
Install-BareBonesTicketing.cmd.You can also run the same file from an already-elevated Command Prompt.
Approve the User Account Control prompt.
Wait. The installer checks the host and package, installs the PostgreSQL server and command-line tools, creates the BareBones Ticketing database, creates the restricted runtime database identity, applies the database migrations, installs and starts the Windows Service, and adds the firewall rule.
Read the final result. Continue only if the installer reports success.
On success it prints two addresses:
https://localhost:8443/setup, which it has already tested, andhttps://<machine-name>:8443/setupfor use from another computer. It tries to open the local one in a browser.If it failed, read
C:\ProgramData\BareBonesTicketing\install\last-install-failure.jsonfor the stage that failed, and the Windows Event Viewer Application and System logs.Open the setup address. Your browser warns that the certificate is not trusted. That is expected: the application is using its own self-signed bootstrap certificate. Confirm you are on the right server before continuing.
Go to First administrator.
Install against an existing PostgreSQL server
Use this only when your organization has deliberately approved an existing PostgreSQL target. The database must already exist before you start.
Open PowerShell as Administrator.
Change to the extracted package root.
Run:
.\Install-BareBonesTicketing.ps1 -DatabaseMode ExternalAnswer the prompts. You are asked only for values the installer has no default for — the server, the setup and runtime usernames, and the setup password. The port, the target database name, and the SSL mode are supplied with defaults (
5432,barebonesticket,Prefer) and are not prompted for. Override them with the corresponding installer parameters if your site needs different values.Do not put the password on the command line. If your automation needs the
BBT_DATABASE_ADMIN_PASSWORDenvironment variable, remove it once the installer returns.Wait for the installer to run its authority and role-name checks, create the restricted runtime identity, apply migrations, and test the runtime connection.
Continue only when both database setup and runtime privilege verification report success.
Go to First administrator.
The setup login needs CREATEROLE or PostgreSQL superuser
rights. See PostgreSQL for why, and for
exactly what setup touches.
What gets installed where
| Path | Contents |
|---|---|
C:\Program Files\BareBonesTicketing\app |
Application binaries |
C:\Program Files\BareBonesTicketing\tools |
Maintenance tools |
C:\ProgramData\BareBonesTicketing\config |
Generated runtime configuration |
C:\ProgramData\BareBonesTicketing\attachments |
Ticket attachments |
C:\ProgramData\BareBonesTicketing\keyring |
Data Protection keys and managed HTTPS material |
C:\ProgramData\BareBonesTicketing\install |
Installer state and local-database maintenance record |
C:\ProgramData\BareBonesTicketing\backups |
Rollback copies of the application files |
C:\ProgramData\BareBonesTicketing\postgresql\data |
Product-managed PostgreSQL data |
C:\Program Files\PostgreSQL\18 |
PostgreSQL program files |
Services and firewall
| Name | Type | When it exists |
|---|---|---|
BareBonesTicketing |
Windows Service | Always |
BareBonesTicketingPostgreSQL18 |
Windows Service | Local database mode only |
BareBonesTicketing-HTTPS |
Inbound firewall rule, TCP 8443 | Always |
The installer creates or repairs only that one firewall rule. It does not open the HTTP port.
That rule has two names. BareBonesTicketing-HTTPS is its
internal name, which is what Get-NetFirewallRule -Name
matches. BareBones Ticketing HTTPS is its display name,
which is what Windows Defender Firewall (wf.msc) lists and
what default Get-NetFirewallRule output shows. Searching
the firewall console for BareBonesTicketing-HTTPS finds
nothing.
The local setup credential is stored in the maintenance record,
readable only by Administrators and SYSTEM. The Windows
Service receives only the restricted runtime database configuration,
never the setup credential.
Check it worked
Windows reports
BareBonesTicketingas running. In local database mode,BareBonesTicketingPostgreSQL18is also running.The installer reported database setup and runtime privilege verification as successful.
The firewall rule is enabled for inbound TCP
8443. It appears inwf.mscasBareBones Ticketing HTTPS.https://localhost:8443/setupresponds.The installation record contains no password, connection string, certificate password, or private address.
https://localhost:8443/health/readyreturns{"status":"Healthy"}.
The installer also configures the Windows service to restart itself
if it fails, retrying twice a minute apart before giving up. That covers
a crashed process. It does not cover a process that is running but
cannot reach its database, which is what /health/ready is
for. See Diagnostics and
logs.
If it does not work
The installer fails partway. Read
last-install-failure.json for the stage name, then the
Event Viewer logs. Correct the cause and rerun the same package.
The offline PostgreSQL file does not match. Stop. Do not substitute another installer. Get the correct file.
You need to repair or upgrade. Rerun the current approved package. It keeps the database mode, runtime identity, configuration, PostgreSQL data, attachments, and Data Protection keys. It stops the service before replacing files and keeps a copy of the previous application files.
Replacing application files is not a database rollback. If database setup already completed on a rerun, the schema change stands.
Setup is only reachable over an untrusted connection. Stop. Do not type administrator credentials. Go back to whoever owns HTTPS for this deployment.